BXM 표준
1. Service, Bean, DBIO 사용 공통
1.1. 필수 작성 사항
Service, Bean, DBIO 사용시 공통적인 필수 작성 사항에 대해 설명한다.
(1) @BxmCategory
Service, Bean 의 클래스와 각 클래스의 메소드는 @BxmCategory 어노테이션을 포함 해야 한다(DBIO는 소스생성 방식이므로 개발자가 직접 작성하지 않음).
-
Class에 정의된 @BxmCategory 어노테이션
@BxmService("SSMP1001A")
@BxmCategory(logicalName = "단건 처리")
public class SSMP1001A {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private MSmpEmpInfMng01 mSmpEmpInfMng01;
... ...
}
-
메소드에 정의된 @BxmCategory 어노테이션
@BxmServiceOperation("ssmp1001a001")
@BxmCategory(logicalName = "샘플직원정보관리 단건 조회")
public SSMP1001A001OutDto ssmp1001a001(SSMP1001A001InDto input) throws DefaultApplicationException {
logger.debug("============== SERVICE START ==============");
logger.debug("input = {}", input);
... ...
}
(2) Application Exception
Service 오퍼레이션과 Bean 메소드는 반드시 bxm.dft.app.DefaultApplicationException을 throws 해야 한다.
@BxmServiceOperation("ssmp1001a001")
@BxmCategory(logicalName = "샘플직원정보관리 단건 조회")
public SSMP1001A001OutDto ssmp1001a001(SSMP1001A001InDto input) throws DefaultApplicationException /* Exception */ {
logger.debug("============== SERVICE START ==============");
logger.debug("input = {}", input);
... ...
}
1.2. 금지 항목
Service, Bean, DBIO 사용 시 사용하지 말아야 하는 항목에 대해 설명한다.
(1) 객체 직접 생성 금지
Service, Bean, DBIO는 프레임워크에서 관리하는 객체이므로 개발자가 new를 통해 직접 객체를 생성하지 않는다.
/* 직접 New 연산자를 통해서 생성하면 안된다 */
private MSmpEduCustomerMng mSmpEduCustomerMng = new MSmpEduCustomerMng();
객체의 생성은 Service 오퍼레이션 또는 Bean 메소드에서 getBean 방식을 이용한다.
/* getBean 방식을 사용한 Bean 생성 */
if(mSmpEduCustomerMng == null){
mSmpEduCustomerMng = DefaultApplicationContext.getBean(MSmpEduCustomerMng.class);
}
(2) 데이터 객체를 멤버변수로 포함 금지
Service, Bean, DBIO는 싱글톤 객체로 해당 클래스의 인스턴스는 프래임워크 내에 1개만 생성 된다. 따라서, 멤버변수로 데이터를 저장하는 일반객체(원시타입 포함) 및 IO 객체를 갖게 되면 객체의 데이터가 공유되는 형태가 되므로 멤버변수에 포함하지 않아야 한다(버그발생가능)
(3) 자신의 타입을 멤버 변수에 포함 금지
Bean의 경우 자신을 멤버 변수로 갖는 구조는 허용되지 않는다.
@BxmBean
@BxmCategory(logicalName = "샘플직원정보관리")
public class MSmpEmpInfMng {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
/* MSmpEmpInfMng Bean이 자기 자신(MSmpEmpInfMng)을 맴버변수로 가지고 있으면 안된다 */
private MSmpEmpInfMng mSmpEmpInfMng;
... ...
}
(4) 멤버변수의 get/set 메소드 작성 금지
@BxmService("SSMP1001A")
@BxmCategory(logicalName = "단건 처리")
public class SSMP1001A {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private MSmpEmpInfMng mSmpEmpInfMng; /* 샘플직원정보관리 */
/* 멤버변수의 get 메소드가 있으면 안된다 */
public MSmpEmpInfMng getmSmpEmpInfMng() {
return mSmpEmpInfMng;
}
/* 멤버변수의 set 메소드가 있으면 안된다 */
public void setmSmpEmpInfMng(MSmpEmpInfMng mSmpEmpInfMng) {
this.mSmpEmpInfMng = mSmpEmpInfMng;
}
... ...
}
2. Service
3. Bean
3.1. 필수 작성 사항
Bean 작성 시 필수로 작성해야 하는 항목에 대해 설명한다.
(1) @BxmBean
Bean은 @BxmBean 어노테이션을 클래스 정의부에 포함한다.
/* Bean 작성 시 필수 어노테이션 */
@BxmBean
@BxmCategory(logicalName = "샘플직원정보관리")
public class MSmpEmpInfMng {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
... ...
}
배치 Bean(ItemReader, ItemProcessor, ItemWriter, Tasklet Interface로 구현)일 경우에는 Bean 명을 명시한다.
/* Bean 작성 시 필수 어노테이션 */
@BxmBean("MSmpTaskletBtch")
@Scope("step")
@BxmCategory(logicalName = "Tasklet 샘플")
public class MSmpTaskletBtch implements Tasklet{
private final Logger logger = LoggerFactory.getLogger(this.getClass());
... ...
}
3.2. 금지 항목
Bean 작성시 금지 항목에 대해 설명한다.
(1) Service 오퍼레이션 직접 호출 금지
Bean 에서 Service의 오퍼레이션을 호출 할 수 없다.
@BxmBean
@BxmCategory(logicalName = "샘플직원정보관리")
public class MSmpEmpInfMng {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
/* BxmService */
private SSMP1001A ssmp1001a;
@BxmCategory(logicalName = "단건 조회")
public DSmpEmpTst000Dto getEmpInf(DSmpEmpTst000Dto input) throws DefaultApplicationException {
if(ssmp1001a == null){
ssmp1001a = DefaultApplicationException.getBean(SSMP1001A.class);
}
/* Bean에서 Service의 오퍼레이션을 호출하면 안된다 */
ssmp1001a.getmSmpEmpInfMng();
return new DSmpEmpTst000Dto();
}
}
4. DBIO
4.1. 금지 항목
다음은 DBIO를 사용시 주의 사항에 대한 설명이다.
(1) DBIO 인터페이스 구현 금지
프래임워크에서 DI(Dependency Injection)을 통해 구현클래스를 주입하므로 DBIO 인터페이스를 구현하는 구현클래스를 개발자가 직접 작성하지 않는다.
(2) 인터페이스 파일 직접 편집 금지
DBIO는 .dbio 파일과 .java(interface로 정의됨)이 한 쌍으로 생성되며 .java 파일은 개발자가 직접 작성/편집하지 않는다.
(3) DBIO 에 생성하는 SQL 의 개수는 10개 미만으로 권장한다.
SQL의 개수가 너무 많으면 DBIO 에디터 동작 및 커밋 동작이 느려질 수 있다.
6. @BxmCategory
7. 어노테이션 요약
어노테이션은 JAVA 메타 언어로 소스 상에 표기하는 것만으로 런타임에 어떤 기능을 수행하거나, 클래스로부터 어떤 정보를 추출 할 수 있도록 한다.
구분 | 설명 | 표기위치 |
---|---|---|
@BxmService |
Service 클래스로 기능함 |
Service 클래스 선언부 |
@BxmServiceOperation |
Service 오퍼레이션으로 기능함 |
Service 클래스 |
@BxmBean |
Bean 클래스로 기능함 |
Bean 클래스 선언부 |
@BxmCategory |
논리명 입력 |
Service 클래스 선언부 Service 클래스 public 메소드 선언부 Bean 클래스 선언부 Bean 클래스 public 메소드 선언부 DBIO 인터페이스 선언부(자동생성) DBIO 인터페이스 메소드 선언부(자동생성) |
@TransactionalOperation |
트랜잭션을 처리할 때 사용 (트랜잭션 분리 시 사용) |
트랜잭션을 처리할 메소드 선언부 |