엔터프라이즈 Bean 개발
두 가지 엔터프라이즈 Bean 개발 시나리오 중 하나에 일반적으로 제품이 사용됩니다. 첫 번째 시나리오는 Ant, Make, Maven 또는 유사한 도구를 사용하는 명령행이고 두 번째 시나리오는 IDE 기반 개발 및 빌드 환경입니다. 이 기사의 단계에서는 IDE를 사용하지 않는 개발에 대해 설명합니다.
시작하기 전에
- CMP(Container-Managed Persistence)가 있는 엔티티 Bean을 개발하기 전에 동시성 제어 주제를 읽어보십시오.
- CMP가 있는 엔티티 Bean을 개발하기 전에 "동시성 제어" 주제를 읽어 보십시오. EJB 3.x 모듈은 엔티티 Bean을 지원하지 않습니다. EJB 2.x 레벨 모듈에는 계속 엔티티 Bean이 필요합니다.
이 태스크 정보
- 엔터프라이즈 Bean 코드의 상당 부분을 자동으로 생성하고
엔터프라이즈 Bean 패키징 및 테스트를 위한 통합 도구를 포함하는
사용 가능한 IDE 도구 중 하나를 사용할 수 있습니다. Rational® Application Developer 제품은
권장되는 IDE입니다.
IDE 프로젝트 빌드 경로에 install_root/dev/JavaEE/j2ee.jar을 추가하여 새 EJB 3.x API 클래스에 대한 컴파일 종속성을 해결하십시오. 코드 지원은 이 JAR 파일이 프로젝트 빌드 경로에 추가될 때 작동합니다. 서버를 정의하는 경우(J2EE Perspective 참조), 서버를 제품 설치 디렉토리로 연결하십시오. Rational Application Developer에서 Java EE 관련 프로젝트를 작성하는 경우 프로젝트가 install_root/dev/JavaEE/j2ee.jar을 프로젝트 빌드 경로에 자동으로 추가합니다.
- IDE 없이 엔터프라이즈 Bean을 개발하기로 결정한 경우, 적어도
ASCII 텍스트 편집기가 필요합니다. 엔터프라이즈 Bean 개발을 지원하지 않는 Java
개발 도구를 사용할 수도 있습니다. 그런 다음, 이 제품 및
Java SDK(Software Development Kit)에서 제공하는 도구를 사용하여
Bean을 어셈블, 테스트 및 배치할 수 있습니다.
어셈블리 도구와 마찬가지로, 표준 Java EE 명령행 빌드 환경에는 EJB 3.x 모듈을 사용하기 위한 몇 가지 변경 작업이 필요합니다. 이전 Java EE 애플리케이션 개발 패턴의 경우와 같이, 컴파일러 클래스 경로에 install_root/dev/JavaEE 디렉토리에 있는 j2ee.jar 파일을 포함시켜야 합니다. Ant를 사용하는 명령행 빌드 환경 예제는 install_root/samples/src/TechSamp 디렉토리에 있습니다.
다음 단계는 IDE를 사용하지 않는 개발인 두 번째 접근 방법을 주로 지원합니다.
프로시저
예제: 읽기 전용 엔티티 Bean 사용
이 사용법 시나리오 및 예제에서는 읽기 전용 엔티티 Bean을 사용하는 Enterprise JavaBeans(EJB)를 작성하는 방법을 보여줍니다.
- 사용법 시나리오
고객은 오후 10:00 로컬 시간(24시간 형식으로 22:00)보다 이전에 매일 업데이트되는 카탈로그 가격 및 출하 비율 정보의 데이터베이스를 보유합니다. 고객은 읽기 전용으로 이 데이터에 액세스하는 EJB 애플리케이션을 작성하고자 합니다. 즉, 이 애플리케이션은 가격 데이터베이스를 업데이트하지 않습니다. 업데이트는 일부 기타 애플리케이션을 통해 수행됩니다.
- 예제
고객의 엔티티 Bean 로컬 인터페이스는 다음과 같습니다.
public interface ItemCatalogData extends EJBLocalObject { public int getItemPrice(); public int getShippingCost(int destinationCode); }
출하를 포함한 전체 가격을 파악하기 위해 이 EntityBean을 호출하는 Stateless 세션 Bean 메소드(TxRequired라고 가정함)의 코드는 다음과 같습니다.
..... // Some transactional steps occur prior to this point, such as removing the item from // inventory, etc. // Now obtain the price of this item and start to calculate the total cost to the purchaser ItemCatalogData theItemData = (ItemCatalogData) ItemCatalogDataHome.findByPrimaryKey(theCatalogNumber); int totalcost = theItemData.getItemPrice(); // ... some other processing, etc. in the interim // ... // ... // Add the shipping costs totalcost = totalcost + theItemData.getShippingCost(theDestinationPostalCode);
애플리케이션 어셈블리 시간에 고객은 다음과 같이 이 Bean에 대한 EJB 캐싱 매개변수를 설정합니다.- ActivateAt = ONCE
- LoadAt = DAILY
- ReloadInterval = 2200
제거된 기능: WAR 파일 확장(WEB-INF/ibm-web-ext.xmi) 및 애플리케이션 확장(META-INF/ibm-application-ext.xmi)을 포함하여 IBM 배치 디스크립터 확장의 reloadInterval 및 reloadingEnabled 속성은 더 이상 사용되지 않습니다.depfeat
매일 밤 22:00 이후에 getItemPrice() 메소드에 대한 첫 번째 호출에서 EJB 컨테이너는 데이터베이스에서 가격 정보를 다시 로드합니다. getItemPrice() 및 getShippingCost()에 대한 호출 사이에 시계가 22:00시를 치면, getShippingCost() 메소드는 22:00에 발생했을 수 있는 데이터베이스에 대한 변경사항 이전에 보유한 값을 계속 리턴합니다. 이 트랜잭션의 첫 번째 메소드 호출이 22:00시 이전에 발생했기 때문입니다. 따라서 사용된 항목 가격 및 출하 비용은 서로가 동기화된 상태를 유지합니다.
다음에 수행할 작업
하나 이상의 EJB 모듈에서 Bean을 어셈블하십시오. EJB 3.x Bean을 사용하는 경우, EJB 모듈 어셈블 또는 EJB 3.x 모듈 어셈블 주제를 참조하십시오.