SlideShare a Scribd company logo
1 of 56
OPEN API PLATFORM
APPLICATION
DEVELOPMENT GUIDE


METADATA DRIVEN
SERVICE PLATFORM   HongSeong Jeon
                   hsjeon70@gmail.com
                   jlook consulting
ACCOUNT MANAGEMENT
DATABASE MODEL
ACCOUNT MANAGEMENT
DOMAIN REGISTRATION




§    Domain 관리자 및 Domain 정보를 입력하여 Domain 생성 요청을 한다.
§    E-Mail이 로그인 User ID로 사용되고, Domain Name도 로그인 시 입력하는 정보이다.
ACCOUNT MANAGEMENT
DOMAIN




§    Domain 관리자는 Domain Registration에 의해 생성되어 System Administrator 만 정보를 변
      경할 수 있고, System Administrator가 Active를 TRUE로 변경해야 Registration이 Approval
      된다.
ACCOUNT MANAGEMENT
GROUP




§    User를 Grouping하는 Entity로 계층 구조로 정의될 수 있다.
§    Announcement Detail에서 target 정보로 이용된다.
ACCOUNT MANAGEMENT
USER




§    사용자 정보 Entity
§    Picture는 Attachment type으로 Profile image를 등록한다.
METADATA MANAGEMENT
DATABASE MODEL




§    objectId – 모든 Table의 primary key로 Object를 식별하는 ID. insert시 자동 생성됨
§    classId – Table을 식별하는 ID로 JClass Table의 object Id가 각 Table의 classId가 됨
§    domainId – User의 Domain을 식별하는 ID로 JDomain Table의 objectId
METADATA MANAGEMENT
CLASS
METADATA MANAGEMENT
CLASS
§    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 권한만 허용
METADATA MANAGEMENT
CLASS
§    Map Action : Virtual attribute로 Entity의 Table 생성 및 삭제 처리를 위해 사용
       •  mapping – Entity의 상태가 NONE일 경우 Table을 생성하기 위한 값
       •  unmapping – Entity의 Table이 생성된 후 Table을 삭제하기 위한 값
       •  remapping – Unmapping Entity를 다시 mapping 하기 위해 임시 상태로 표시하기 위한 값
§    Status : Derived attribute로 Entity 상태 정보
METADATA MANAGEMENT
CLASS 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
METADATA MANAGEMENT
JOBJECT ACTION
§    Create, Update, Delete 전/후로 Custom business logic을 실행하고자 한다면, Custom
      JObjectAction를 정의한 후 JClass action class 항목에 설정한다.

                  JObjectAction

setJActionContext(JActionContext context)
doPreExecute(JActionType type, JObject jObject)
doPostExecute(JActionType type, JObject jObject)



              JObjectActionSupport

setJActionContext(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한다.
METADATA MANAGEMENT
JOBJECT ACTION
public 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);
             }
}
METADATA MANAGEMENT
SUMMARY 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
METADATA MANAGEMENT
SUMMARY 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+"))"
      }
METADATA MANAGEMENT
JOBJECT 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
METADATA MANAGEMENT
JOBJECT RULE
       §    jaction – “create”, “update”
       §    jObject – 현재 처리하고 있는 Entity Jobject

§    JObject Rule의 예시
       if(jaction==‘create’ && jobject.description==null) {
           jobject.description = jobject.category+”.”+jobject.name
       }
METADATA MANAGEMENT
ATTRIBUTE
METADATA MANAGEMENT
ATTRIBUTE
§    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)
METADATA MANAGEMENT
TYPE




                     §    JType의 Access Rule은 ‘PRIVATE’으로 모든 사용자가 JType을 Read
                           Only로 접금한다.



§    Data Type을 표현하는 Entity로 Data Type은 Primitive와 Reference Type을 지원한다.
§    JClass 가 Mapping될 때 생성되고, Unmapping될 때 삭제된다.
METADATA MANAGEMENT
VIEW




                    §    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에서 사용된다.
METADATA MANAGEMENT
VIEW DETAIL




§    View 에 대한 Attribute Mapping 정보에 대한 Entity
METADATA MANAGEMENT
CLASS ACTION




§    JClass에 관련된 UI에 보여줄 Custom Action button을 정의하는 Entity
METADATA MANAGEMENT
CLASS 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만 전달하고 화면 변화는 없는 경우
METADATA MANAGEMENT
ENUM VALIDATION




§    Enumeration validation을 정의하는 Entity로 상세 정보를 Enum Detail에 등록해야 한다.
§    Type : UI 컴포넌트 유형 (SELECT, RADIO, CHECKBOX, COMBO)
METADATA MANAGEMENT
ENUM DETAIL




§    Enumeration validation의 detail 정보에 대한 Entity
§    Sequence : UI에 나타날 순서
METADATA MANAGEMENT
PATTERN VALIDATION




§    Pattern Validation 에 대한 Entity
§    RegExpression : Pattern validation을 적용한 regular expression을 설정하는 attribute
METADATA MANAGEMENT
RANGE VALIDATION




§    Range Validation에 대한 Entity
§    Inclusive attribute는 Min. / Max value가 표함되는지에 대한 속성
SECURITY MANAGEMENT
DATABASE MODEL
SECURITY MANAGEMENT
ROLE




§    Security Role에 대한 Entity
§    System Domain에서는 3 가지 Reserved Role 제공
       •    User – 일반 사용자 Role, 모든 사용자는 User Role을 갖는다.
       •    Admin - Domain 관리자 Role
       •    Administrator – System 관리자 Role
SECURITY MANAGEMENT
DATA ACCESS RULE




§    Role에 대한 Table의 접근 제어(create, read, update, delete)를 설정하는 Entity
SECURITY MANAGEMENT
MENU ACCESS RULE




§    Role에 대한 메뉴의 접근 제어를 설정하는 Entity
§    Enabled 속성이 True인 메뉴만 접근 가능함.
SECURITY MANAGEMENT
WIDGET ACCESS RULE




§    Role과 WidgetInstance 간의 Standard Buttons에 대한 접근 제어를 설정한다.
      WidgetAccessRule이 설정되어 있지 않으면, DataAccessRule을 따른다.
BATCH MANAGEMENT
DATABASE MODEL
BATCH MANAGEMENT
BATCH DEFINITION




§    Batch 기본 정보를 등록하는 Entity
§    Task Class : Batch에 대한 Java Logic을 구현한 Class로 JBatchTask로 부터 상속을 받아 정의
      한다.
BATCH MANAGEMENT
BATCH 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);
                                            }
BATCH MANAGEMENT
BATCH DEFINITION
public 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);
             	
               	
}
BATCH MANAGEMENT
BATCH 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);
  	
}
BATCH MANAGEMENT
BATCH PARAMETER NAME




§    Batch 기본 정보 등록 시 Batch Task Class가 사용할 Parameter를 등록하는 Entity.
§    Name : Batch Task Class가 사용할 Parameter Name
§    Type : Parameter의 Data Type
§    Default Value : Parameter의 Default Value
BATCH MANAGEMENT
BATCH INSTANCE




§    Batch Definition으로 부터 Runtime에 실재 실행될 Batch를 등록하는 Entity
§    Fixed Delay : Batch start 후 최초 실행을 결정하는 Delay time
§    Fixed Rate : Batch 실행 주기
BATCH MANAGEMENT
BATCH INSTANCE
§    Cron Expression : Batch 실행 Schedule 정보
§    Batch Server : Batch가 실행될 서버를 구분하는 정보로 설정안된 경우 모든 서버에서 실행됨.
      서버 실행 시 –Dapp.server 로 설정한 값과 비교하여 Batch를 실행함
§    Active : True인 Batch Instance만 실행하고, 동적으로 값을 변경하여 Batch를 start/stop할 수
      있음.
BATCH MANAGEMENT
BATCH PARAMETER VALUE




§    Batch 기본정보에 설정한 Parameter에 대한 값을 설정하는 Entity
§    JBatchParamName : Parameter Name을 정의한 JBatchParamName Entity
§    Value : Parameter Value
BATCH MANAGEMENT
BATCH HISTORY
WIDGET MANAGEMENT
DATABASE MODEL
WIDGET MANAGEMENT
WIDGET DEFINITION




§    Widget Definition 정보를 등록하는 화면
WIDGET MANAGEMENT
WIDGET PARAMETER NAME




§    Widget에서 사용하는 Parameter Name 정보를 등록하는 화면
WIDGET MANAGEMENT
WIDGET INSTANCE




§    Widget Instance 정보를 등록하는 화면
WIDGET MANAGEMENT
WIDGET PARAMETER VALUE




§    Widget Instance에서 사용할 Parameter Value를 정의하는 화면
Jlook open api platform-appdevguide
COMMON MANAGEMENT
MENU
COMMON MANAGEMENT
MENU
§    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를 정의하는
             속성
COMMON MANAGEMENT
PREFERENCE




§    Preference를 정의하는 Entity
§    Type : Preference type (System, Domain, User)
COMMON MANAGEMENT
PREFERENCE DETAIL




§    Preference의 값을 정의하는 Entity
§    Target : Domain, User Preference일 경우 Preference 대상 Domain 및 User object Id
§    Value : Preference Value
COMMON MANAGEMENT
ANNOUNCE MESSAGE




§    공지사항 메시지에 대한 Entity
§    System Administrator와 Domain Admin만 공지사항 메시지를 등록할 수 있다.
COMMON MANAGEMENT
ANNOUNCE DETAIL




§    공지사항 메시지를 전달할 대상을 설정하는 Entity
§    공지사항 메시지 대상 : JDomain, JGroup, JUser
WRAP-UP




          Q&A

More Related Content

What's hot

파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기Yong Joon Moon
 
영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA경원 이
 
파이썬 객체 클래스 이해하기
파이썬  객체 클래스 이해하기파이썬  객체 클래스 이해하기
파이썬 객체 클래스 이해하기Yong Joon Moon
 
[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로NHN FORWARD
 
SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프Younghan Kim
 
제13장 사용자 권한
제13장 사용자 권한제13장 사용자 권한
제13장 사용자 권한sang doc Lee
 
파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403Yong Joon Moon
 
Jquery javascript_ed10
Jquery javascript_ed10Jquery javascript_ed10
Jquery javascript_ed10hungrok
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13hungrok
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Hyosang Hong
 
MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제정완 전
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)beom kyun choi
 
Effective c++(chapter3,4)
Effective c++(chapter3,4)Effective c++(chapter3,4)
Effective c++(chapter3,4)문익 장
 
파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기Yong Joon Moon
 
[WELC] 22. I Need to Change a Monster Method and I Can’t Write Tests for It
[WELC] 22. I Need to Change a Monster Method and I Can’t Write Tests for It[WELC] 22. I Need to Change a Monster Method and I Can’t Write Tests for It
[WELC] 22. I Need to Change a Monster Method and I Can’t Write Tests for It종빈 오
 
파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기Yong Joon Moon
 
Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리Younghan Kim
 

What's hot (20)

파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기
 
영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA영속성 컨텍스트로 보는 JPA
영속성 컨텍스트로 보는 JPA
 
파이썬 객체 클래스 이해하기
파이썬  객체 클래스 이해하기파이썬  객체 클래스 이해하기
파이썬 객체 클래스 이해하기
 
[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로
 
SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프
 
제13장 사용자 권한
제13장 사용자 권한제13장 사용자 권한
제13장 사용자 권한
 
파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403
 
Jquery javascript_ed10
Jquery javascript_ed10Jquery javascript_ed10
Jquery javascript_ed10
 
Game ai.fsm.02
Game ai.fsm.02Game ai.fsm.02
Game ai.fsm.02
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료
 
MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제MyBatis 개요와 Java+MyBatis+MySQL 예제
MyBatis 개요와 Java+MyBatis+MySQL 예제
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
 
javascript03
javascript03javascript03
javascript03
 
Effective c++(chapter3,4)
Effective c++(chapter3,4)Effective c++(chapter3,4)
Effective c++(chapter3,4)
 
파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기
 
Java start01 in 2hours
Java start01 in 2hoursJava start01 in 2hours
Java start01 in 2hours
 
[WELC] 22. I Need to Change a Monster Method and I Can’t Write Tests for It
[WELC] 22. I Need to Change a Monster Method and I Can’t Write Tests for It[WELC] 22. I Need to Change a Monster Method and I Can’t Write Tests for It
[WELC] 22. I Need to Change a Monster Method and I Can’t Write Tests for It
 
파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기
 
Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리Ksug2015 jpa4 객체지향쿼리
Ksug2015 jpa4 객체지향쿼리
 

Viewers also liked

CrowdKeys Survey customers data
CrowdKeys Survey customers dataCrowdKeys Survey customers data
CrowdKeys Survey customers dataMassimo Riera
 
Dando la vuelta a la manzana!!!
Dando la vuelta a la manzana!!!Dando la vuelta a la manzana!!!
Dando la vuelta a la manzana!!!sdelmau
 
Presentaciondejeunesseenfocadoenelproducto
PresentaciondejeunesseenfocadoenelproductoPresentaciondejeunesseenfocadoenelproducto
PresentaciondejeunesseenfocadoenelproductoJeunesse Global
 
Netラボ2012年7月勉強会
Netラボ2012年7月勉強会Netラボ2012年7月勉強会
Netラボ2012年7月勉強会david9142
 
Opening songs final
Opening songs  finalOpening songs  final
Opening songs finalmraizkp
 
Clase 2,clima latinoamericano, pág. 137 139
Clase 2,clima latinoamericano, pág. 137 139Clase 2,clima latinoamericano, pág. 137 139
Clase 2,clima latinoamericano, pág. 137 139Isabel Pinto
 
Hist ac-2012-1-1619638-1532012 1221
Hist ac-2012-1-1619638-1532012 1221Hist ac-2012-1-1619638-1532012 1221
Hist ac-2012-1-1619638-1532012 1221SabinaChambi
 
Cuba cuba yo quiero bailar la salsa vu
Cuba cuba yo quiero bailar la salsa   vuCuba cuba yo quiero bailar la salsa   vu
Cuba cuba yo quiero bailar la salsa vuRafael Guerra
 
Zaman Dahulu - Dinosaur
Zaman Dahulu - DinosaurZaman Dahulu - Dinosaur
Zaman Dahulu - Dinosaurkaskhat
 
2012居家智慧day3-1(脈絡研究整理)
2012居家智慧day3-1(脈絡研究整理)2012居家智慧day3-1(脈絡研究整理)
2012居家智慧day3-1(脈絡研究整理)Ian Jang
 

Viewers also liked (19)

John henao
John  henaoJohn  henao
John henao
 
Portafolio
PortafolioPortafolio
Portafolio
 
CrowdKeys Survey customers data
CrowdKeys Survey customers dataCrowdKeys Survey customers data
CrowdKeys Survey customers data
 
Horário ii semestre 2012
Horário ii semestre 2012Horário ii semestre 2012
Horário ii semestre 2012
 
Dando la vuelta a la manzana!!!
Dando la vuelta a la manzana!!!Dando la vuelta a la manzana!!!
Dando la vuelta a la manzana!!!
 
Presentaciondejeunesseenfocadoenelproducto
PresentaciondejeunesseenfocadoenelproductoPresentaciondejeunesseenfocadoenelproducto
Presentaciondejeunesseenfocadoenelproducto
 
Netラボ2012年7月勉強会
Netラボ2012年7月勉強会Netラボ2012年7月勉強会
Netラボ2012年7月勉強会
 
ข้อสอบ
ข้อสอบข้อสอบ
ข้อสอบ
 
Opening songs final
Opening songs  finalOpening songs  final
Opening songs final
 
"Phil"
"Phil""Phil"
"Phil"
 
Ippeis
IppeisIppeis
Ippeis
 
Clase 2,clima latinoamericano, pág. 137 139
Clase 2,clima latinoamericano, pág. 137 139Clase 2,clima latinoamericano, pág. 137 139
Clase 2,clima latinoamericano, pág. 137 139
 
Guia 10
Guia 10Guia 10
Guia 10
 
Hist ac-2012-1-1619638-1532012 1221
Hist ac-2012-1-1619638-1532012 1221Hist ac-2012-1-1619638-1532012 1221
Hist ac-2012-1-1619638-1532012 1221
 
ข้อสอบ
ข้อสอบข้อสอบ
ข้อสอบ
 
Cuba cuba yo quiero bailar la salsa vu
Cuba cuba yo quiero bailar la salsa   vuCuba cuba yo quiero bailar la salsa   vu
Cuba cuba yo quiero bailar la salsa vu
 
John henao
John  henaoJohn  henao
John henao
 
Zaman Dahulu - Dinosaur
Zaman Dahulu - DinosaurZaman Dahulu - Dinosaur
Zaman Dahulu - Dinosaur
 
2012居家智慧day3-1(脈絡研究整理)
2012居家智慧day3-1(脈絡研究整理)2012居家智慧day3-1(脈絡研究整理)
2012居家智慧day3-1(脈絡研究整理)
 

Similar to Jlook open api platform-appdevguide

MyBatis에서 JPA로
MyBatis에서 JPA로MyBatis에서 JPA로
MyBatis에서 JPA로Dongmin Shin
 
5-3. html5 device access
5-3. html5 device access5-3. html5 device access
5-3. html5 device accessJinKyoungHeo
 
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)DK Lee
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Hyosang Hong
 
Dependency Injection 소개
Dependency Injection 소개Dependency Injection 소개
Dependency Injection 소개beom kyun choi
 
Ksug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpaKsug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpaYounghan Kim
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Kim Hunmin
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술NAVER D2
 
Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Choonghyun Yang
 
자바 웹 개발 시작하기 (4주차 : MVC)
자바 웹 개발 시작하기 (4주차 : MVC)자바 웹 개발 시작하기 (4주차 : MVC)
자바 웹 개발 시작하기 (4주차 : MVC)DK Lee
 
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)DK Lee
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GDG Korea
 
overview of spring4
overview of spring4overview of spring4
overview of spring4Arawn Park
 
Cappuccino fundamental
Cappuccino fundamentalCappuccino fundamental
Cappuccino fundamentalJeongHun Byeon
 
Node.js + Express + MongoDB
Node.js + Express + MongoDBNode.js + Express + MongoDB
Node.js + Express + MongoDBVincent Park
 
E government framework
E government frameworkE government framework
E government frameworkHyungKuIm
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기Jeado Ko
 
ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는Taegon Kim
 

Similar to Jlook open api platform-appdevguide (20)

MyBatis에서 JPA로
MyBatis에서 JPA로MyBatis에서 JPA로
MyBatis에서 JPA로
 
Swt J Face 2/3
Swt J Face 2/3Swt J Face 2/3
Swt J Face 2/3
 
5-3. html5 device access
5-3. html5 device access5-3. html5 device access
5-3. html5 device access
 
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료
 
Dependency Injection 소개
Dependency Injection 소개Dependency Injection 소개
Dependency Injection 소개
 
Ksug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpaKsug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpa
 
[Codelab 2017] ReactJS 기초
[Codelab 2017] ReactJS 기초[Codelab 2017] ReactJS 기초
[Codelab 2017] ReactJS 기초
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술[162] jpa와 모던 자바 데이터 저장 기술
[162] jpa와 모던 자바 데이터 저장 기술
 
Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)
 
자바 웹 개발 시작하기 (4주차 : MVC)
자바 웹 개발 시작하기 (4주차 : MVC)자바 웹 개발 시작하기 (4주차 : MVC)
자바 웹 개발 시작하기 (4주차 : MVC)
 
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
 
overview of spring4
overview of spring4overview of spring4
overview of spring4
 
Cappuccino fundamental
Cappuccino fundamentalCappuccino fundamental
Cappuccino fundamental
 
Node.js + Express + MongoDB
Node.js + Express + MongoDBNode.js + Express + MongoDB
Node.js + Express + MongoDB
 
E government framework
E government frameworkE government framework
E government framework
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기
 
ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는
 

Jlook open api platform-appdevguide

  • 1. OPEN API PLATFORM APPLICATION DEVELOPMENT GUIDE METADATA DRIVEN SERVICE PLATFORM HongSeong Jeon hsjeon70@gmail.com jlook consulting
  • 3. ACCOUNT MANAGEMENT DOMAIN REGISTRATION §  Domain 관리자 및 Domain 정보를 입력하여 Domain 생성 요청을 한다. §  E-Mail이 로그인 User ID로 사용되고, Domain Name도 로그인 시 입력하는 정보이다.
  • 4. ACCOUNT MANAGEMENT DOMAIN §  Domain 관리자는 Domain Registration에 의해 생성되어 System Administrator 만 정보를 변 경할 수 있고, System Administrator가 Active를 TRUE로 변경해야 Registration이 Approval 된다.
  • 5. ACCOUNT MANAGEMENT GROUP §  User를 Grouping하는 Entity로 계층 구조로 정의될 수 있다. §  Announcement Detail에서 target 정보로 이용된다.
  • 6. ACCOUNT MANAGEMENT USER §  사용자 정보 Entity §  Picture는 Attachment type으로 Profile image를 등록한다.
  • 7. METADATA MANAGEMENT DATABASE MODEL §  objectId – 모든 Table의 primary key로 Object를 식별하는 ID. insert시 자동 생성됨 §  classId – Table을 식별하는 ID로 JClass Table의 object Id가 각 Table의 classId가 됨 §  domainId – User의 Domain을 식별하는 ID로 JDomain Table의 objectId
  • 9. METADATA MANAGEMENT CLASS §  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. METADATA MANAGEMENT CLASS §  Map Action : Virtual attribute로 Entity의 Table 생성 및 삭제 처리를 위해 사용 •  mapping – Entity의 상태가 NONE일 경우 Table을 생성하기 위한 값 •  unmapping – Entity의 Table이 생성된 후 Table을 삭제하기 위한 값 •  remapping – Unmapping Entity를 다시 mapping 하기 위해 임시 상태로 표시하기 위한 값 §  Status : Derived attribute로 Entity 상태 정보
  • 11. METADATA MANAGEMENT CLASS 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. METADATA MANAGEMENT JOBJECT ACTION §  Create, Update, Delete 전/후로 Custom business logic을 실행하고자 한다면, Custom JObjectAction를 정의한 후 JClass action class 항목에 설정한다. JObjectAction setJActionContext(JActionContext context) doPreExecute(JActionType type, JObject jObject) doPostExecute(JActionType type, JObject jObject) JObjectActionSupport setJActionContext(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. METADATA MANAGEMENT JOBJECT ACTION public 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. METADATA MANAGEMENT SUMMARY 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. METADATA MANAGEMENT SUMMARY 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. METADATA MANAGEMENT JOBJECT 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. METADATA MANAGEMENT JOBJECT RULE §  jaction – “create”, “update” §  jObject – 현재 처리하고 있는 Entity Jobject §  JObject Rule의 예시 if(jaction==‘create’ && jobject.description==null) { jobject.description = jobject.category+”.”+jobject.name }
  • 19. METADATA MANAGEMENT ATTRIBUTE §  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. METADATA MANAGEMENT TYPE §  JType의 Access Rule은 ‘PRIVATE’으로 모든 사용자가 JType을 Read Only로 접금한다. §  Data Type을 표현하는 Entity로 Data Type은 Primitive와 Reference Type을 지원한다. §  JClass 가 Mapping될 때 생성되고, Unmapping될 때 삭제된다.
  • 21. METADATA MANAGEMENT VIEW §  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. METADATA MANAGEMENT VIEW DETAIL §  View 에 대한 Attribute Mapping 정보에 대한 Entity
  • 23. METADATA MANAGEMENT CLASS ACTION §  JClass에 관련된 UI에 보여줄 Custom Action button을 정의하는 Entity
  • 24. METADATA MANAGEMENT CLASS 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. METADATA MANAGEMENT ENUM VALIDATION §  Enumeration validation을 정의하는 Entity로 상세 정보를 Enum Detail에 등록해야 한다. §  Type : UI 컴포넌트 유형 (SELECT, RADIO, CHECKBOX, COMBO)
  • 26. METADATA MANAGEMENT ENUM DETAIL §  Enumeration validation의 detail 정보에 대한 Entity §  Sequence : UI에 나타날 순서
  • 27. METADATA MANAGEMENT PATTERN VALIDATION §  Pattern Validation 에 대한 Entity §  RegExpression : Pattern validation을 적용한 regular expression을 설정하는 attribute
  • 28. METADATA MANAGEMENT RANGE VALIDATION §  Range Validation에 대한 Entity §  Inclusive attribute는 Min. / Max value가 표함되는지에 대한 속성
  • 30. SECURITY MANAGEMENT ROLE §  Security Role에 대한 Entity §  System Domain에서는 3 가지 Reserved Role 제공 •  User – 일반 사용자 Role, 모든 사용자는 User Role을 갖는다. •  Admin - Domain 관리자 Role •  Administrator – System 관리자 Role
  • 31. SECURITY MANAGEMENT DATA ACCESS RULE §  Role에 대한 Table의 접근 제어(create, read, update, delete)를 설정하는 Entity
  • 32. SECURITY MANAGEMENT MENU ACCESS RULE §  Role에 대한 메뉴의 접근 제어를 설정하는 Entity §  Enabled 속성이 True인 메뉴만 접근 가능함.
  • 33. SECURITY MANAGEMENT WIDGET ACCESS RULE §  Role과 WidgetInstance 간의 Standard Buttons에 대한 접근 제어를 설정한다. WidgetAccessRule이 설정되어 있지 않으면, DataAccessRule을 따른다.
  • 35. BATCH MANAGEMENT BATCH DEFINITION §  Batch 기본 정보를 등록하는 Entity §  Task Class : Batch에 대한 Java Logic을 구현한 Class로 JBatchTask로 부터 상속을 받아 정의 한다.
  • 36. BATCH MANAGEMENT BATCH 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. BATCH MANAGEMENT BATCH DEFINITION public 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. BATCH MANAGEMENT BATCH 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. BATCH MANAGEMENT BATCH PARAMETER NAME §  Batch 기본 정보 등록 시 Batch Task Class가 사용할 Parameter를 등록하는 Entity. §  Name : Batch Task Class가 사용할 Parameter Name §  Type : Parameter의 Data Type §  Default Value : Parameter의 Default Value
  • 40. BATCH MANAGEMENT BATCH INSTANCE §  Batch Definition으로 부터 Runtime에 실재 실행될 Batch를 등록하는 Entity §  Fixed Delay : Batch start 후 최초 실행을 결정하는 Delay time §  Fixed Rate : Batch 실행 주기
  • 41. BATCH MANAGEMENT BATCH INSTANCE §  Cron Expression : Batch 실행 Schedule 정보 §  Batch Server : Batch가 실행될 서버를 구분하는 정보로 설정안된 경우 모든 서버에서 실행됨. 서버 실행 시 –Dapp.server 로 설정한 값과 비교하여 Batch를 실행함 §  Active : True인 Batch Instance만 실행하고, 동적으로 값을 변경하여 Batch를 start/stop할 수 있음.
  • 42. BATCH MANAGEMENT BATCH PARAMETER VALUE §  Batch 기본정보에 설정한 Parameter에 대한 값을 설정하는 Entity §  JBatchParamName : Parameter Name을 정의한 JBatchParamName Entity §  Value : Parameter Value
  • 45. WIDGET MANAGEMENT WIDGET DEFINITION §  Widget Definition 정보를 등록하는 화면
  • 46. WIDGET MANAGEMENT WIDGET PARAMETER NAME §  Widget에서 사용하는 Parameter Name 정보를 등록하는 화면
  • 47. WIDGET MANAGEMENT WIDGET INSTANCE §  Widget Instance 정보를 등록하는 화면
  • 48. WIDGET MANAGEMENT WIDGET PARAMETER VALUE §  Widget Instance에서 사용할 Parameter Value를 정의하는 화면
  • 51. COMMON MANAGEMENT MENU §  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를 정의하는 속성
  • 52. COMMON MANAGEMENT PREFERENCE §  Preference를 정의하는 Entity §  Type : Preference type (System, Domain, User)
  • 53. COMMON MANAGEMENT PREFERENCE DETAIL §  Preference의 값을 정의하는 Entity §  Target : Domain, User Preference일 경우 Preference 대상 Domain 및 User object Id §  Value : Preference Value
  • 54. COMMON MANAGEMENT ANNOUNCE MESSAGE §  공지사항 메시지에 대한 Entity §  System Administrator와 Domain Admin만 공지사항 메시지를 등록할 수 있다.
  • 55. COMMON MANAGEMENT ANNOUNCE DETAIL §  공지사항 메시지를 전달할 대상을 설정하는 Entity §  공지사항 메시지 대상 : JDomain, JGroup, JUser
  • 56. WRAP-UP Q&A