EJB 3.0 및 EJB 3.1 배치 개요
JIT(Just-In-Time) 배치를 포함하여 EJB(Enterprise JavaBeans) 3.0 및 3.1 배치 모델에 대해 학습합니다.
모든 Java™ Enterprise Edition(Java EE) 애플리케이션 서버 제품은 애플리케이션 서버의 해당 특정 구현에서 실행되도록 애플리케이션이 사용자 정의되는 EJB 배치 단계를 위한 몇 개의 양식을 포함합니다. 일반적으로 이는 애플리케이션 서버에 고유한 배치 도구로 수행되고 EJB 인터페이스와 구현 코드를 EJB 컨테이너에 대한 애플리케이션 서버의 구현에 브릿지하는 코드를 생성합니다. 일부 애플리케이션 서버 제품의 배치 도구는 코드를 생성하지 않고 애플리케이션 클래스의 바이트코드를 수정하지만 결과는 유사합니다.
애플리케이션 서버는 EJB 구현 클래스를 캡슐화하는 코드를 생성하고 이를 애플리케이션 서버의 EJB 컨테이너에 연결하여 해당 구현과 EJB 인터페이스를 브릿지합니다. 이를 사용하여 EJB 컨테이너는 엔터프라이즈 Bean을 호스트하고 이에 대한 서비스를 제공합니다. 하나 이상의 엔터프라이즈 Bean에 원격 인터페이스가 정의된 경우, 애플리케이션 서버는 추가 코드를 생성하여 원격 함수를 제공합니다.
EJB 모듈 패키지에 대한 자세한 정보는 EJB 3.x 모듈 패키징 개요를 포함하는 주제를 참조하십시오.
EJBDeploy 도구
지금까지 애플리케이션 서버 제품에서 EJB 배치는 WebSphere® Application Server에 포함되어 WebSphere 제품에 대한 개발 도구와 패키지되는 EJBDeploy 도구로 수행되었습니다.
EJBDeploy 도구는 엔터프라이즈 Bean에 대한 외부 인터페이스를 내성하고 .java 파일로 랩퍼 코드를 생성하며 javac 컴파일러를 사용하여 코드를 컴파일하여 애플리케이션 코드와 같이 EJB 모듈로 패키지하는 .class 파일을 작성합니다. EJBDeploy 도구는 애플리케이션에서 원격 EJB 인터페이스에 대해 rmic 도구도 실행하여 원격 오브젝트 지원을 제공하는 인터넷 RMI-IIOP(Inter-ORB Protocol) 및 ORB(Object Request Broker)를 통해 원격 메소드 호출과 상호작용하는 추가 스텁 및 타이 클래스 파일을 작성합니다.
EJB 3.0 이전의 모듈의 경우 애플리케이션 서버에 애플리케이션을 설치할 때 또는 명령행 도구 또는 개발 도구에서 애플리케이션을 설치하기 전에 EJBDeploy 도구를 실행했습니다.
JIT(Just-In-Time) 배치
애플리케이션 서버의 EJB 3.0 지원은 JIT 배치라고 하는 새 기능을 소개했습니다.
JIT 배치를 사용하여 EJB 컨테이너는 동적으로 랩퍼, 스텁, 타이(tie) 클래스 인메모리를 애플리케이션 실행 시에 동적으로 생성합니다. 또한, 웹 컨테이너와 애플리케이션 클라이언트 컨테이너는 원격 EJB 호출에 필요한 스텁 클래스를 동적으로 생성합니다.
실제로 이는 EJB 3.0 또는 3.1 모듈, EJB 3.0 또는 3.1 Bean을 호출하는 웹 모듈 또는 애플리케이션 서버에서 EJB 3.0 또는 3.1 모듈을 실행하기 전에 EJBDeploy 도구를 사용하여 EJB 3.0 또는 3.1 모듈을 호출하는 클라이언트 모듈을 처리할 필요가 없음을 나타냅니다.
createEJBStubs 도구
대부분의 경우에서 JIT(Just-In-Time) 배치 기능은 원격 EJB 인터페이스 호출에 필요한 RMI-IIOP 스텁 클래스를 동적으로 생성할 수 있습니다. 이 스텁 클래스가 동적으로 생성되지 않는 일부 인스턴스도 있습니다. EJB 3.x 사용 웹 컨테이너에서 실행되지 않는 EJB 3.0 또는 3.1 클라이언트, EJB 컨테이너 또는 클라이언트 컨테이너의 경우, createEJBStubs 도구를 사용하여 스텁 클래스를 생성하고 생성된 스텁이 클라이언트 환경의 클래스 경로에서 사용 가능한지 확인해야 합니다. 일반적으로 이는 생성된 스텁을 클라이언트 비즈니스 인터페이스 클래스가 있는 위치로 복사하여 수행합니다.
- Java SE Java Virtual Machine(JVM)이 클라이언트 환경인 "기본적인" Java Standard Edition(SE) 클라이언트.
- Feature Pack for EJB 3.0이 적용되지 않은 버전 7 이전의 애플리케이션 서버 환경의 컨테이너
- WebSphere Application Server 환경이 아닌 환경.
상호 운용성
EJB 3.0 또는 3.1을 지원하지 않는 애플리케이션 서버 버전에서 실행되는 WebSphere 스택 제품 또는 다른 제품이 EJB 3.0 또는 3.1을 지원하는 버전의 애플리케이션 서버를 실행하는 별도의 서버에서 EJB 3.x 준수 엔터프라이즈 Bean의 메소드를 원격으로 호출하려고 시도하면 예기치 못한 결과가 초래됩니다. 이 제품이 엔터프라이즈 Bean의 EJB 3.x 원격 비즈니스 인터페이스를 통해 메소드 호출을 시도하면 EJB 3.x를 준수하지 않는 환경으로 다시 푸시되는 EJB 3.0에서 소개된 예외가 발생할 수 있습니다.
이 시나리오는 애플리케이션 서버의 EJB 3.x 준수 및 비준수 인스턴스가 혼합되어 있는 스택 제품의 조합이 있는 환경의 관리자에게도 문제가 될 수 있습니다.
- javax.ejb.ConcurrentAccessException
- javax.ejb.EJBAccessException
- javax.ejb.EJBTransactionRequiredException
- javax.ejb.EJBTransactionRolledbackException
- javax.ejb.NoSuchEJBException
잠재적 상호 운용성 문제 처리에 대한 EJB 모듈 배치 단계를 참조하십시오.
EJB 2.x 모듈
EJB 3.0 또는 EJB 3.1 모듈로 변환된 EJB 2.x 모듈은 모든 WebSphere Application Server에서 생성된 파일(스텁 및 타이 클래스 포함)은 애플리케이션 서버 제품에서 EJB 배치 전에 제거되어야 합니다.