Jlook open api platform-appdevguide

369 views

Published on

Application development guide for platform

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
369
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Jlook open api platform-appdevguide

  1. 1. OPEN API PLATFORMAPPLICATIONDEVELOPMENT GUIDEMETADATA DRIVENSERVICE PLATFORM HongSeong Jeon hsjeon70@gmail.com jlook consulting
  2. 2. ACCOUNT MANAGEMENTDATABASE MODEL
  3. 3. ACCOUNT MANAGEMENTDOMAIN REGISTRATION§  Domain 관리자 및 Domain 정보를 입력하여 Domain 생성 요청을 한다.§  E-Mail이 로그인 User ID로 사용되고, Domain Name도 로그인 시 입력하는 정보이다.
  4. 4. ACCOUNT MANAGEMENTDOMAIN§  Domain 관리자는 Domain Registration에 의해 생성되어 System Administrator 만 정보를 변 경할 수 있고, System Administrator가 Active를 TRUE로 변경해야 Registration이 Approval 된다.
  5. 5. ACCOUNT MANAGEMENTGROUP§  User를 Grouping하는 Entity로 계층 구조로 정의될 수 있다.§  Announcement Detail에서 target 정보로 이용된다.
  6. 6. ACCOUNT MANAGEMENTUSER§  사용자 정보 Entity§  Picture는 Attachment type으로 Profile image를 등록한다.
  7. 7. METADATA MANAGEMENTDATABASE MODEL§  objectId – 모든 Table의 primary key로 Object를 식별하는 ID. insert시 자동 생성됨§  classId – Table을 식별하는 ID로 JClass Table의 object Id가 각 Table의 classId가 됨§  domainId – User의 Domain을 식별하는 ID로 JDomain Table의 objectId
  8. 8. METADATA MANAGEMENTCLASS
  9. 9. METADATA MANAGEMENTCLASS§  Type : Entity class 유형 •  CONCRETE – Entity Table이 생성되고, 데이터를 등록, 수정, 삭제할 수 있는 Entity •  ABSTRACT – Entity Table은 생성되나, 상속을 위해 정의되기 때문에 데이터를 등록할 수 있는 Entity (JValidation) •  INTERFACE – Entity Table도 생성되지 않고, 상속을 위해서 정의되는 Entity (JObject)§  Inheritance JClass : 상속을 받기 위한 부모 JClass§  Inheritance Type : •  EXTENDS – Entity Table이 생성될 때 Inheritance JClass의 Attributes 없이 생성됨 •  IMPLEMENTS – Entity Table이 생성될 때 Inheritance JClass의 Attributes를 갖고 생성됨§  Action Class : 등록, 수정, 삭제 전/후로 처리할 비즈니스 로직을 갖는 Java Action Class§  Summary Filter : Grid summary API 시 Data row filtering을 SQL Where 절을 Expression Language로 설정§  JObject Rule : 등록, 수정 전에 처리할 비즈니스 로직을 Expression Language로 설정§  Access Rule : Entity의 데이터 접근 제어를 위한 Security 속성 §  PUBLIC – DataAccessRule에 create/read/update/delete를 막지 않으면 접근 허용 §  PROTECTED – DataAccessRule에 create/read/update/delete를 허용하지 않으면 접근 금 지 §  PRIVATE – DataAccessRule에 상관없이 read 권한만 허용
  10. 10. METADATA MANAGEMENTCLASS§  Map Action : Virtual attribute로 Entity의 Table 생성 및 삭제 처리를 위해 사용 •  mapping – Entity의 상태가 NONE일 경우 Table을 생성하기 위한 값 •  unmapping – Entity의 Table이 생성된 후 Table을 삭제하기 위한 값 •  remapping – Unmapping Entity를 다시 mapping 하기 위해 임시 상태로 표시하기 위한 값§  Status : Derived attribute로 Entity 상태 정보
  11. 11. METADATA MANAGEMENTCLASS MAPPING§  Mapping entity •  Make java class from metadata •  Make hibernate config from metadata§  Change entity •  Add and remove attribute •  Change attribute : name, type, primary, unique, virtual •  Cannot change : name and category for JClass (CREATED)§  Unmapping entity •  Change status from CREATED to UNMAPPED§  Remapping entity •  Change status from UNMAP to REMAPPED§  Build metadata •  Make java class from metadata for all entities. •  Make hibernate config from metadata for all entities. •  Create and initialize JClassLoader •  Create and initialize JSpringSessionFactoryBean
  12. 12. METADATA MANAGEMENTJOBJECT ACTION§  Create, Update, Delete 전/후로 Custom business logic을 실행하고자 한다면, Custom JObjectAction를 정의한 후 JClass action class 항목에 설정한다. JObjectActionsetJActionContext(JActionContext context)doPreExecute(JActionType type, JObject jObject)doPostExecute(JActionType type, JObject jObject) JObjectActionSupportsetJActionContext(JActionContext context)doPreExecute(JActionType type, JObject jObject) public interface JActionContext {doPostExecute(JActionType type, JObject jObject)doPreCreate(JObject jObject) public JUserEntity getUserEntity();doPreUpdate(JObject jObject) public JObject getBeforeImage();doPreDelete(JObject jObject) public JClass getJClass();doPostCreate(JObject jObject) public JGenericService getJGenericService();doPostUpdate(JObject jObject) public Object getBean(String beanName);doPostDelete(JObject jObject) }§  JObjectActionSupport로 부터 상속을 받아 필요한 메스드만 Overriding한다.
  13. 13. METADATA MANAGEMENTJOBJECT ACTIONpublic class JBatchInstanceAction extends JObjectActionSupport { public static final String CLASS_NAME = "jlook.framework.service.action.batch.JBatchInstanceAction"; @Override public void doPostCreate(JObject jObject) throws JActionException { if(jObject==null) { return; } JBatchInstance jBatch = (JBatchInstance)jObject; JBatchManager manager = (JBatchManager)context.getBean(JBatchManager.ID); manager.addJBatch(jBatch); } @Override public void doPostUpdate(JObject jObject) throws JActionException { JBatchManager manager = (JBatchManager)context.getBean(JBatchManager.ID); JBatchInstance jBatch = (JBatchInstance)jObject; manager.updateJBatch(jBatch); } @Override public void doPostDelete(JObject jObject) throws JActionException { if(jObject==null) { return; } JBatchInstance jBatch = (JBatchInstance)jObject; JBatchManager manager = (JBatchManager)context.getBean(JBatchManager.ID); manager.removeJBatch(jBatch); }}
  14. 14. METADATA MANAGEMENTSUMMARY FILTER§  JClass Summary Filter 설정은 MVEL Expression Language를 사용하기 때문에 자세한 문법 은 아래 URL을 참조한다. http://mvel.codehaus.org/Home§  Expression Language에서 사용할 수 있는 Platform Context Variable은 아래와 같다. §  JUserEntity – 로그인 한 사용자 정보 Variable Type Description juser.administrator boolean System Administrator 여부 juser.admin boolean Domain Administrator 여부 juser.objectId Long 사용자의 User정보에 대한 Object Id juser.domainId Long 사용자의 Domain Id juser.JGroup JGroupEntity 사용자의 Group 정보 juser.JGroupId Long 사용자의 Group에 대한 Object Id juser.nickname String 사용자의 Nickname juser.username String 사용자의 로그인 ID로 email address
  15. 15. METADATA MANAGEMENTSUMMARY FILTER§  JAnnounceMessage에 설정된 Summary Filter 예시 if(!juser.administrator && !juser.admin){ "(active=true and current_date()>=fromDate and current_date()<=toDate) and (objectId not in (select objectId from jannouncedetail) or objectId in (select objectId from jannouncedetail where JDomain="+juser.domainId+” or JGroup="+juser.JGroupId+” or JUser="+juser.objectId+"))" }
  16. 16. METADATA MANAGEMENTJOBJECT RULE§  JClass JObject Rule 설정은 MVEL Expression Language를 사용하기 때문에 자세한 문법은 아래 URL을 참조한다. http://mvel.codehaus.org/Home§  Expression Language에서 사용할 수 있는 Platform Context Variable은 아래와 같다. §  JUserEntity – 로그인 한 사용자 정보 Variable Type Description juser.administrator boolean System Administrator 여부 juser.admin boolean Domain Administrator 여부 juser.objectId Long 사용자의 User정보에 대한 Object Id juser.domainId Long 사용자의 Domain Id juser.JGroup JGroupEntity 사용자의 Group 정보 juser.JGroupId Long 사용자의 Group에 대한 Object Id juser.nickname String 사용자의 Nickname juser.username String 사용자의 로그인 ID로 email address
  17. 17. METADATA MANAGEMENTJOBJECT RULE §  jaction – “create”, “update” §  jObject – 현재 처리하고 있는 Entity Jobject§  JObject Rule의 예시 if(jaction==‘create’ && jobject.description==null) { jobject.description = jobject.category+”.”+jobject.name }
  18. 18. METADATA MANAGEMENTATTRIBUTE
  19. 19. METADATA MANAGEMENTATTRIBUTE§  JClass : Attribute가 속한 Class (readOnly=true)§  Type : Attribute의 Data Type으로 JType을 Reference§  Unique : Entity 생성 시 unique constraint 생성§  Derived : System Handle attribute§  Virtual : Table생성 시 Column으로 생성되지 않고, 화면에는 보여짐§  Primary : 등록, 수정 시 Primary true인 attribute들의 중복 체크를 함§  Hidden : Table에는 Column으로 정의되고, 화면에 보여지지 않음§  Searchable : true인 attribute는 Summary View에 포함되어, Grid 와 Search form에 보여짐§  Encrypt : 데이터 암호화 적용 •  password – Password 컬럼과 같이 1-way encryption§  JValidation :§  Status : derived attribute로 Attribute의 상태 정보 •  NONE – Table이 생성되지 않고, Attribute 정보만 등록한 경우 •  CREATED – Table에 Attribute에 대한 컬럼이 생성된 경우 •  CHANGED – 컬럼이 생성된 후 중요 정보가 변경된 경우 (name, type, primary, unique, virtual)
  20. 20. METADATA MANAGEMENTTYPE §  JType의 Access Rule은 ‘PRIVATE’으로 모든 사용자가 JType을 Read Only로 접금한다.§  Data Type을 표현하는 Entity로 Data Type은 Primitive와 Reference Type을 지원한다.§  JClass 가 Mapping될 때 생성되고, Unmapping될 때 삭제된다.
  21. 21. METADATA MANAGEMENTVIEW §  Title : Data의 제목 정보를 표현하고, primary attribute로 구성 됨 §  Summary : Data의 요약 정보를 표현하고, searchable attribute로 구성 됨 §  Detail : Data 의 전체 정보를 표현하고, 모든 attribute로 구성 됨§  Table에 대한 View를 표현하는 Entity로 모든 Class가 mapping될 때 3가지 Type의 View가 생 성된고, Unmapping될 때 생성된 View 정보가 삭제 된다.§  Summary View는 Grid, Detail View는 Object Widget에서 사용된다.
  22. 22. METADATA MANAGEMENTVIEW DETAIL§  View 에 대한 Attribute Mapping 정보에 대한 Entity
  23. 23. METADATA MANAGEMENTCLASS ACTION§  JClass에 관련된 UI에 보여줄 Custom Action button을 정의하는 Entity
  24. 24. METADATA MANAGEMENTCLASS ACTION§  Type : JClassAction의 유형으로 Custom Button을 어떤 Widget에 보여줄지를 경정한다. •  Class : Summary View를 사용하는 Widget에 보여줄 경우 설정 •  Object : Detail View를 사용하는 Object Widget에 보여줄 경우 설정 •  All : 모든 Widget에 보여줄 경우 설정§  Target Url : Custom Button이 클릭된 경우 호출할 URL§  Target Method : Custom Button이 클릭된 경우 호출할때 사용할 HTTP METHOD§  Target : 호출한 결과로 Widget을 보여줄 영역 •  Tab : tab 영역에 결과를 Rendering •  Main : main 영역에 결과를 Rendering •  Document : Browser 전체를 refresh함, html widget일 경우 사용 •  Overlay : Overlay dialog로 결과를 Rendering 함§  Widget : 호출한 결과로 보여줄 UI Widget •  Grid : Grid widget •  Object : Object widget •  Html : html, JSP •  None : 서버에 Event만 전달하고 화면 변화는 없는 경우
  25. 25. METADATA MANAGEMENTENUM VALIDATION§  Enumeration validation을 정의하는 Entity로 상세 정보를 Enum Detail에 등록해야 한다.§  Type : UI 컴포넌트 유형 (SELECT, RADIO, CHECKBOX, COMBO)
  26. 26. METADATA MANAGEMENTENUM DETAIL§  Enumeration validation의 detail 정보에 대한 Entity§  Sequence : UI에 나타날 순서
  27. 27. METADATA MANAGEMENTPATTERN VALIDATION§  Pattern Validation 에 대한 Entity§  RegExpression : Pattern validation을 적용한 regular expression을 설정하는 attribute
  28. 28. METADATA MANAGEMENTRANGE VALIDATION§  Range Validation에 대한 Entity§  Inclusive attribute는 Min. / Max value가 표함되는지에 대한 속성
  29. 29. SECURITY MANAGEMENTDATABASE MODEL
  30. 30. SECURITY MANAGEMENTROLE§  Security Role에 대한 Entity§  System Domain에서는 3 가지 Reserved Role 제공 •  User – 일반 사용자 Role, 모든 사용자는 User Role을 갖는다. •  Admin - Domain 관리자 Role •  Administrator – System 관리자 Role
  31. 31. SECURITY MANAGEMENTDATA ACCESS RULE§  Role에 대한 Table의 접근 제어(create, read, update, delete)를 설정하는 Entity
  32. 32. SECURITY MANAGEMENTMENU ACCESS RULE§  Role에 대한 메뉴의 접근 제어를 설정하는 Entity§  Enabled 속성이 True인 메뉴만 접근 가능함.
  33. 33. SECURITY MANAGEMENTWIDGET ACCESS RULE§  Role과 WidgetInstance 간의 Standard Buttons에 대한 접근 제어를 설정한다. WidgetAccessRule이 설정되어 있지 않으면, DataAccessRule을 따른다.
  34. 34. BATCH MANAGEMENTDATABASE MODEL
  35. 35. BATCH MANAGEMENTBATCH DEFINITION§  Batch 기본 정보를 등록하는 Entity§  Task Class : Batch에 대한 Java Logic을 구현한 Class로 JBatchTask로 부터 상속을 받아 정의 한다.
  36. 36. BATCH MANAGEMENTBATCH DEFINITION§  Batch Task Class는 JBatchTaskSupport로 부터 상속을 받아 doExecute() 메서드에 Business Logic을 정의한다. public interface JBatchContext { JBatchTask public static final String PARAM_BATCH_USER = "batchUser";setJBatchContext(JBatchContext context) doInit() public String getName() ;doExecute() public String getServer();doEnd() public Long getInstanceId(); public Long getDefinitionId(); public String uuid(); JBatchTaskSupport public Object getParameter(String name); public Object getEnvironment(String name);setJActionContext(JActionContext context)doInit() doExecute() public JGenericService getJGenericService();doEnd() public void put(String key, Object value); public Object get(String key); public String currentDateTime(); public Object getBean(String beanName); }
  37. 37. BATCH MANAGEMENTBATCH DEFINITIONpublic class JClassBatchTask extends JBatchTaskSupport { public static final String PARAM_SOURCE_CID = "sourceCid"; public static final String PARAM_UNIT_COUNT = "unitCount"; private JGenericService jGenericService; @Override public void doExecute() throws JBatchException { jGenericService = (JGenericService)this.context.getBean(JGenericService.ID); Object sourceCid = context.getParameter(PARAM_SOURCE_CID); Long classId = null; if(sourceCid instanceof Long) { classId = (Long)sourceCid; } else { throw new JBatchException("Invalid parameter("+PARAM_SOURCE_CID+ "). It is not a Long. - "+sourceCid); } Object unitCount = context.getParameter(PARAM_UNIT_COUNT); Integer pageSize = null; if(unitCount instanceof Integer) { pageSize = (Integer)unitCount; } else { throw new JBatchException("Invalid parameter("+PARAM_UNIT_COUNT+ "). It is not a Integer. - "+unitCount); }
  38. 38. BATCH MANAGEMENTBATCH DEFINITION PageUtil page = new PageUtil(); page.setPageSize(pageSize); page.setPageNumber(1); do { JSummaryModel smodel = null; try { smodel = getSummary(classId, page); page = smodel.getPage(); } catch (JServiceException e) { throw new JBatchException("Fail to get summary data. - "+classId+", JBatchInstanceId="+context.getInstanceId(), e); } try { writeFile(smodel, page.getPageNumber()); if(page.getPageNumber() * page.getPageSize() >= page.getTotalCount()) { break; } page.setPageNumber(page.getPageNumber()+1); } catch (IOException e) { throw new JBatchException("Fail to write batch file.", e); } } while(true); }
  39. 39. BATCH MANAGEMENTBATCH PARAMETER NAME§  Batch 기본 정보 등록 시 Batch Task Class가 사용할 Parameter를 등록하는 Entity.§  Name : Batch Task Class가 사용할 Parameter Name§  Type : Parameter의 Data Type§  Default Value : Parameter의 Default Value
  40. 40. BATCH MANAGEMENTBATCH INSTANCE§  Batch Definition으로 부터 Runtime에 실재 실행될 Batch를 등록하는 Entity§  Fixed Delay : Batch start 후 최초 실행을 결정하는 Delay time§  Fixed Rate : Batch 실행 주기
  41. 41. BATCH MANAGEMENTBATCH INSTANCE§  Cron Expression : Batch 실행 Schedule 정보§  Batch Server : Batch가 실행될 서버를 구분하는 정보로 설정안된 경우 모든 서버에서 실행됨. 서버 실행 시 –Dapp.server 로 설정한 값과 비교하여 Batch를 실행함§  Active : True인 Batch Instance만 실행하고, 동적으로 값을 변경하여 Batch를 start/stop할 수 있음.
  42. 42. BATCH MANAGEMENTBATCH PARAMETER VALUE§  Batch 기본정보에 설정한 Parameter에 대한 값을 설정하는 Entity§  JBatchParamName : Parameter Name을 정의한 JBatchParamName Entity§  Value : Parameter Value
  43. 43. BATCH MANAGEMENTBATCH HISTORY
  44. 44. WIDGET MANAGEMENTDATABASE MODEL
  45. 45. WIDGET MANAGEMENTWIDGET DEFINITION§  Widget Definition 정보를 등록하는 화면
  46. 46. WIDGET MANAGEMENTWIDGET PARAMETER NAME§  Widget에서 사용하는 Parameter Name 정보를 등록하는 화면
  47. 47. WIDGET MANAGEMENTWIDGET INSTANCE§  Widget Instance 정보를 등록하는 화면
  48. 48. WIDGET MANAGEMENTWIDGET PARAMETER VALUE§  Widget Instance에서 사용할 Parameter Value를 정의하는 화면
  49. 49. COMMON MANAGEMENTMENU
  50. 50. COMMON MANAGEMENTMENU§  Menu 정보를 등록하는 Entity§  Action URL : 메뉴를 클릭했을 때 호출할 Target URL 정보§  Target : Target URL의 결과를 Rendering할 영역 •  main – Response 받은 json 결과를 widget과 binding하여 main 영역에 rendering 함 •  document – Browser page 전체를 refresh하여 호출 결과를 rendering 함 •  overlay –§  Widget : 메뉴를 클릭한 후 보여줄 UI Type •  grid – Response 결과를 target 영역에 grid widget으로 rendering 함 •  object – Response 결과를 target 영역에 object widget으로 rendering 함 •  html – Response 결과 html을 target 영역에 Rendering 함 •  none – 서버에 Event만 전달 함.§  Access Rule : Menu의 접근 제어에 대한 Security 속성으로 System Administrator만 설정 가 능 (Default Value = ‘PROTECTED’) §  PRIVATE : System에서만 사용하기 위해 Domain 사용자에게 메뉴를 Hidden 시키는 속성 §  PROTECTED : Menu의 기본 AccessRule로 JDataAccessRule에 따라 접근 제어가 처리됨 §  PUBLIC : UI에서 메뉴를 바로 접근할 수 있게 처리하기 위한 Common Menu를 정의하는 속성
  51. 51. COMMON MANAGEMENTPREFERENCE§  Preference를 정의하는 Entity§  Type : Preference type (System, Domain, User)
  52. 52. COMMON MANAGEMENTPREFERENCE DETAIL§  Preference의 값을 정의하는 Entity§  Target : Domain, User Preference일 경우 Preference 대상 Domain 및 User object Id§  Value : Preference Value
  53. 53. COMMON MANAGEMENTANNOUNCE MESSAGE§  공지사항 메시지에 대한 Entity§  System Administrator와 Domain Admin만 공지사항 메시지를 등록할 수 있다.
  54. 54. COMMON MANAGEMENTANNOUNCE DETAIL§  공지사항 메시지를 전달할 대상을 설정하는 Entity§  공지사항 메시지 대상 : JDomain, JGroup, JUser
  55. 55. WRAP-UP Q&A

×