Sun Java System Application Server Enterprise Edition 8.1 2005Q2 고가용성 관리 설명서

8장 고가용성 세션 지속성 및 페일오버 구성

이 장에서는 고가용성 세션 지속성을 활성화 및 구성하는 방법을 설명합니다.

세션 지속성 및 페일오버 개요

Application Server에서는 HTTP 세션 데이터 및 Stateful Session Bean(SFSB) 세션 데이터의 페일오버를 통해 고가용성 세션 지속성을 제공합니다. 페일오버는 서버 인스턴스 또는 하드웨어 오류가 발생했을 때 또 다른 서버 인스턴스가 분산된 세션을 인계 받음을 의미합니다.

요구 사항

다음 경우에 분산 세션이 여러 Sun Java System Application Server 인스턴스에서 실행될 수 있습니다.

제한 사항

세션이 페일오버되면 열린 파일 또는 네트워크 연결에 대한 모든 참조가 손실됩니다. 이러한 제한 사항을 고려하면서 응용 프로그램을 코딩해야 합니다.

페일오버를 지원하는 분산 세션에만 특정 객체를 바인딩할 수 있습니다. Servlet 2.4 사양과는 반대로, 페일오버에 대해 지원되지 않는 객체 유형이 분산 세션에 바인딩되면 Sun Java System Application Server에서는 IllegalArgumentException을 발생시킵니다.

페일오버를 지원하는 분산 세션으로 다음 객체를 바인딩할 수 있습니다.

다음 객체 유형은 페일오버를 지원하는 세션에 바인딩할 수 없습니다.

일반적으로 이러한 객체의 경우 페일오버가 작동되지 않습니다. 그러나 객체가 일련화 가능한 경우 등 일부 경우에 페일오버가 작동될 수 있습니다.

샘플 응용 프로그램

다음 디렉토리에는 세션 지속성을 설명하는 샘플 응용 프로그램이 포함되어 있습니다.

install_dir/samples/ee-samples/highavailability
install_dir/samples/ee-samples/failover

다음 예제 응용 프로그램은 SFSB 세션 지속성을 보여 줍니다.

install_dir/samples/ee-samples/failover/apps/sfsbfailover

고가용성 세션 지속성 설정

이 절에서는 고가용성 세션 지속성을 설정하는 방법을 설명하며 다음 내용으로 구성되어 있습니다.

Procedure고가용성 세션 지속성 설정

시작하기 전에

고가용성 세션 지속성은 동적 배포, 동적 다시 로드 및 자동 배포와 호환되지 않습니다. 이러한 기능은 프로덕션 환경이 아닌 개발용이므로 HA 세션 지속성을 활성화하기 전에 이러한 기능을 비활성화해야 합니다. 이러한 기능을 비활성화하는 방법에 대한 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 관리 설명서의 2 장, 응용 프로그램 배포를 참조하십시오.

  1. Application Server 클러스터를 만듭니다.

    자세한 내용은 클러스터 만들기를 참조하십시오.

  2. 클러스터용 HADB 데이터베이스를 만듭니다.

    자세한 내용은 configure-ha-cluster(1)를 참조하십시오.

  3. 클러스터에 대한 HTTP 로드 균형 조정을 설정합니다.

    자세한 내용은 HTTP 로드 균형 조정 설정을 참조하십시오.

  4. 원하는 응용 프로그램 서버 인스턴스 및 웹 또는 EJB 컨테이너에 대한 가용성을 활성화합니다.

    그런 후 세션 지속성 설정을 구성합니다. 다음 중 하나를 선택하십시오.

  5. 클러스터의 모든 서버 인스턴스를 다시 시작합니다.

    인스턴스에서 현재 요청을 처리할 경우 인스턴스가 처리 중인 요청을 처리할 수 있는 충분한 시간을 가질 수 있도록 인스턴스를 다시 시작하기 전에 인스턴스를 중지합니다. 자세한 내용은 서버 인스턴스 또는 클러스터 비활성화(정지)를 참조하십시오.

  6. 가용성이 필요한 모든 특정 SFSB에 대해 가용성을 활성화합니다.

    세션 상태에 필요한 검사점 지정 방법을 선택합니다. 개별 Bean에 대한 가용성 구성을 참조하십시오.

  7. 각 웹 모듈의 고가용성을 유지하려면 웹 모듈을 분산 가능 상태로 만듭니다.

  8. 배포 중에 개별 응용 프로그램, 웹 모듈 또는 EJB 모듈에 대한 가용성을 활성화합니다.

    개별 응용 프로그램 또는 EJB 모듈에 대한 가용성 구성을 참조하십시오.

    관리 콘솔에서 가용성 사용 가능 확인란을 선택하거나 --availabilityenabled 옵션을 true로 설정하여 asadmin deploy 명령을 사용합니다.

세션 가용성 활성화

다음과 같은 5가지 범위(최고 수준에서 최저 수준까지)로 세션 가용성을 활성화할 수 있습니다.

  1. 기본적으로 활성화된 서버 인스턴스. 자세한 내용은 다음 섹션 서버 인스턴스에 대한 가용성 활성화를 참조하십시오.

  2. 기본적으로 활성화된 컨테이너(웹 또는 EJB). 컨테이너 수준에서 가용성을 활성화하는 방법에 대한 자세한 내용은 다음을 참조하십시오.

  3. 기본적으로 비활성화된 응용 프로그램

  4. 기본적으로 비활성화된 독립 실행형 웹 또는 EJB 모듈

  5. 기본적으로 비활성화된 개별 SFSB

지정된 범위에서 가용성을 활성화하려면 모든 상위 수준에서 가용성을 활성화해야 합니다. 예를 들어, 응용 프로그램 수준에서 가용성을 활성화하려면 서버 인스턴스 및 컨테이너 수준에서도 활성화해야 합니다.

지정한 수준의 기본값은 다음으로 높은 수준의 설정값입니다. 예를 들어, 컨테이너 수준에서 가용성을 활성화한 경우 기본적으로 응용 프로그램 수준에서도 가용성이 활성화됩니다.

서버 인스턴스 수준에서 가용성을 비활성화한 경우 다른 수준에서 활성화해도 적용되지 않습니다. 서버 인스턴스 수준에서 가용성을 활성화한 경우 명시적으로 비활성화하지 않으면 모든 수준에서 가용성이 활성화됩니다.

서버 인스턴스에 대한 가용성 활성화

서버 인스턴스에 대한 가용성을 활성화하려면 asadmin set 명령을 사용하여 구성의 availability-service.availability-enabled 등록 정보를 true로 설정합니다.

예를 들어, config1이 구성 이름이면 다음 명령을 사용합니다.


asadmin set --user admin --passwordfile password.txt 
--host localhost 
--port 4849 
config1.availability-service.availability-enabled="true"

Procedure관리 콘솔을 사용하여 서버 인스턴스에 대한 가용성 활성화

  1. 트리 구성 요소에서 구성 노드를 확장합니다.

  2. 편집할 구성의 노드를 확장합니다.

  3. 가용성 서비스 노드를 선택합니다.

  4. 가용성 서비스 페이지에서 가용성 서비스 확인란을 선택하여 인스턴스 수준의 가용성을 활성화합니다.

    비활성화하려면 확인란을 선택 해제합니다.

    또는 세션 지속성을 위해 HADB 연결에 사용한 JDBC 자원을 변경한 경우 저장소 풀 이름을 변경할 수 있습니다. 자세한 내용은 configure-ha-cluster(1)를 참조하십시오.

  5. 저장 버튼을 누릅니다.

  6. 서버 인스턴스를 중지했다가 다시 시작합니다.

HTTP 세션 페일오버

J2EE 응용 프로그램은 일반적으로 많은 양의 세션 상태 데이터를 포함하게 됩니다. 웹 장바구니가 세션 상태의 일반적인 예에 해당합니다. 또한 응용 프로그램은 자주 필요한 데이터를 세션 객체에 캐시할 수 있습니다. 실제로 사용자 상호 작용이 자주 발생하는 거의 모든 응용 프로그램에서는 세션 상태가 유지되어야 합니다.

웹 컨테이너에 대한 가용성 구성

asadmin을 사용하여 웹 컨테이너 가용성을 활성화 및 구성하려면 configure-ha-persistence(1)를 참조하십시오.

또는 asadmin set 명령을 사용하여 구성의 availability-service.web-container-availability.availability-enabled 등록 정보를 true로 설정한 후 configure-ha-persistence를 사용하여 해당 등록 정보를 설정합니다.

예를 들어, 다음과 같이 set 명령을 사용합니다. 여기서 config1은 구성 이름입니다.


asadmin set --user admin --passwordfile password.txt 
--host localhost --port 4849 
config1.availability-service.web-container-availability.availability-enabled="true"
asadmin configure-ha-persistence --user admin --passwordfile secret.txt 
--type ha 
--frequency web-method 
--scope modified-session 
--store jdbc/hastore 
--property maxSessions=1000:reapIntervalSeconds=60 cluster1

Procedure관리 콘솔을 사용하여 웹 컨테이너에 대한 가용성 활성화

  1. 트리 구성 요소에서 원하는 구성을 선택합니다.

  2. 가용성 서비스를 누릅니다.

  3. 웹 컨테이너 가용성 탭을 선택합니다.

    가용성 서비스 확인란을 선택하여 가용성을 활성화합니다. 비활성화하려면 확인란을 선택 해제합니다.

  4. 다음의 가용성 설정 절에 설명된 대로 다른 설정을 변경합니다.

  5. 서버 인스턴스를 다시 시작합니다.

가용성 설정

가용성 서비스의 웹 컨테이너 가용성 탭을 사용하여 다음과 같은 가용성 설정을 변경할 수 있습니다.

지속성 유형: 가용성이 활성화된 웹 응용 프로그램에 대한 세션 지속성 메커니즘을 지정합니다. 허용되는 값은 memory(지속성 없음), file(파일 시스템) 및 ha(HADB)입니다.

ha 세션 지속성을 사용하려면 먼저 HADB를 구성하고 활성화해야 합니다. 구성에 대한 자세한 내용은 configure-ha-cluster(1)를 참조하십시오.

웹 컨테이너 가용성이 활성화되면 기본값은 ha입니다. 그렇지 않은 경우 기본값은 memory입니다. 세션 지속성이 필요한 프로덕션 환경의 경우 ha를 사용합니다. 두 유형, memory 및 file 지속성은 고가용성 세션 지속성을 제공하지 않습니다.

지속성 빈도: 세션 상태가 저장되는 빈도를 지정합니다. 지속성 유형이 ha일 경우에만 적용됩니다. 허용되는 값은 다음과 같습니다.

지속성 범위: 저장되는 세션 객체의 양과 세션 상태가 저장되는 빈도를 지정합니다. 지속성 유형이 ha일 경우에만 적용됩니다. 허용되는 값은 다음과 같습니다.

단일 사인 온 상태: 단일 사인 온 상태의 지속성을 활성화하려면 이 확인란을 선택합니다. 비활성화하려면 확인란을 선택 해제합니다. 자세한 내용은 세션 페일오버와 함께 단일 사인 온 사용을 참조하십시오.

HTTP 세션 저장소: 세션 지속성을 위해 HADB 연결에 사용한 JDBC 자원을 변경한 경우 HTTP 세션 저장소를 변경할 수 있습니다. 자세한 내용은 configure-ha-cluster(1)를 참조하십시오.

개별 웹 응용 프로그램에 대한 가용성 구성

개별 웹 응용 프로그램에 대한 가용성을 활성화하고 구성하려면 응용 프로그램 배포 설명자 파일 sun-web.xml을 편집합니다. 응용 프로그램 배포 설명자의 설정은 웹 컨테이너의 가용성 설정을 대체합니다.

session-manager 요소의 persistence-type 속성은 응용 프로그램이 사용하는 세션 지속성 유형을 결정합니다. 고가용성 세션 지속성을 활성화하려면 이 속성을 ha로 설정해야 합니다.

sun-web.xml 파일에 대한 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s GuideThe sun-web.xml File을 참조하십시오.

<sun-web-app> ... 
  <session-config> 
    <session-manager persistence-type=ha> 
      <manager-properties> 
        <property name=persistenceFrequency value=web-method /> 
      </manager-properties> 
      <store-properties> 
        <property name=persistenceScope value=session /> 
      </store-properties> 
    </session-manager> ... 
</session-config> ...

세션 페일오버와 함께 단일 사인 온 사용

단일 응용 프로그램 서버 인스턴스에서 응용 프로그램에 의해 인증된 사용자는 동일한 인터페이스에서 실행되는 다른 응용 프로그램에서 개별적으로 다시 인증을 받을 필요가 없습니다. 이를 단일 사인 온이라고 합니다. 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s GuideUser Authentication for Single Sign-on을 참조하십시오.

클러스터의 다른 인스턴스에 HTTP 세션이 페일오버되더라도 이 기능이 계속 작동하려면 단일 사인 온 정보가 HADB에 지속되어야 합니다. 단일 사인 온 정보를 지속하려면 먼저 서버 인스턴스 및 웹 컨테이너의 가용성을 활성화한 후 단일 사인 온 상태 페일오버를 활성화합니다.

관리 콘솔을 사용하면 웹 컨테이너에 대한 가용성 구성에 설명된 대로 가용성 서비스의 웹 컨테이너 가용성 탭에서 단일 사인 온 상태 페일오버를 활성화할 수 있습니다. 또한 asadmin set 명령을 사용하여 구성의 availability-service.web-container-availability.sso-failover-enabled 등록 정보를 true로 설정합니다.

예를 들어, 다음과 같이 set 명령을 사용합니다. 여기서 config1은 구성 이름입니다.

asadmin set --user admin --passwordfile password.txt 
--host localhost --port 4849 
config1.availability-service.web-container-availability.
sso-failover-enabled="true"

단일 사인 온 그룹

단일 사인 온 그룹은 단일 이름 및 비밀번호 조합을 통해 액세스할 수 있는 응용 프로그램으로 구성됩니다. 단일 사인 온 그룹의 일부인 응용 프로그램에 해당하는 HTTP 세션의 경우 세션 중 하나가 시간 초과되더라도 다른 세션은 무효화되지 않고 계속 사용할 수 있습니다. 이는 한 세션의 시간 초과가 다른 세션의 가용성에 영향을 미치지 않기 때문입니다.

이 동작의 결과, 세션이 시간 초과되고 세션을 실행 중인 동일한 브라우저 창에서 해당하는 응용 프로그램에 액세스할 경우 다시 인증할 필요가 없습니다. 그러나 새로운 세션이 만들어집니다.

두 개의 다른 응용 프로그램을 사용하는 단일 사인 온 그룹의 일부인 장바구니 응용 프로그램을 예로 듭니다. 다른 두 응용 프로그램의 세션 시간 초과 값이 장바구니 응용 프로그램의 세션 초과 값보다 더 높은 것으로 가정합니다. 장바구니 응용 프로그램의 세션이 시간 초과되고 세션을 실행 중인 동일한 브라우저 창에서 장바구니 응용 프로그램을 실행할 경우 다시 인증할 필요가 없습니다. 그러나 이전 장바구니는 손실되고 새로운 장바구니를 만들어야 합니다. 장바구니 응용 프로그램을 실행하는 세션이 시간 초과되더라도 다른 두 응용 프로그램은 평소대로 계속 실행됩니다.

마찬가지로 다른 두 응용 프로그램에 해당하는 세션이 시간 초과되는 것으로 가정합니다. 세션을 실행 중인 동일한 브라우저 창에서 응용 프로그램에 연결하고 있는 동안에는 다시 인증할 필요가 없습니다.


주 –

세션이 시간 초과된 경우에만 이 동작이 적용됩니다. 단일 사인 온이 활성화되고 HttpSession.invalidate()를 사용하여 세션 중 하나를 무효화한 경우 단일 사인 온 그룹에 속하는 모든 응용 프로그램의 세션이 무효화됩니다. 단일 사인 온 그룹에 속하는 응용 프로그램에 액세스할 경우 다시 인증을 받아야 하고 응용 프로그램에 액세스하는 클라이언트에 대해 새로운 세션이 만들어집니다.


Stateful Session Bean 페일오버

SFSB(Stateful Session Bean)에는 클라이언트 특정 상태가 포함됩니다. 클라이언트와 Stateful Session Bean 간에는 일대일 관계가 있습니다. SFSB 작성 시 EJB 컨테이너는 SFSB를 클라이언트에 바인딩하는 고유한 세션 ID를 각 SFSB에 지정합니다.

서버 인스턴스에 장애가 발생할 경우 SFSB의 상태는 지속형 저장소에 저장될 수 있습니다. SFSB의 상태는 수명 주기 중 미리 정의된 시점에 지속형 저장소에 저장됩니다. 이것을 검사점 지정이라고 합니다. 검사점을 활성화하면 트랜잭션이 롤백된 경우에도 일반적으로 Bean이 트랜잭션을 완료한 후에 검사점이 지정됩니다.

그러나 SFSB가 Bean 관리 트랜잭션에 참여할 경우 Bean 메소드 실행 중간에 트랜잭션이 완결될 수 있습니다. 메소드 호출의 결과로 Bean의 상태가 전이 중일 수 있으므로 Bean의 상태에 검사점을 지정할 적절한 시간이 없습니다. Bean이 메소드가 끝날 때 EJB 컨테이너가 다른 트랜잭션의 범위에 있지 않는다고 가정할 경우, 해당 메소드 끝에 Bean의 상태에 검사점을 지정합니다. Bean 관리 트랜잭션이 여러 메소드에 걸쳐 있는 경우 후속 메소드 끝에 활성 트랜잭션이 나오지 않을 때까지 검사점 지정이 지연됩니다.

SFSB의 상태가 반드시 트랜잭션인 것은 아니며 비트랜잭션 비즈니스 메소드의 결과로 크게 바뀔 수 있습니다. 이 경우 검사점을 지정할 메소드 지정에 설명된 대로 검사점이 지정된 메소드 목록을 지정할 수 있습니다.

분산 가능 웹 응용 프로그램이 SFSB를 참조하고 웹 응용 프로그램의 세션이 페일오버되면 EJB 참조 또한 페일오버됩니다.

Application Server 인스턴스가 중지된 동안 세션 지속성을 사용하는 SFSB의 배포가 해제되면 지속성 저장소의 세션 데이터가 지워지지 않을 수 있습니다. 이를 방지하려면 Application Server 인스턴스가 실행 중인 동안 SFSB의 배포를 해제합니다.

EJB 컨테이너에 대한 가용성 구성

ProcedureEJB 컨테이너에 대한 가용성 활성화

  1. EJB 컨테이너 가용성 탭을 선택합니다.

  2. 가용성 서비스 상자를 선택합니다.

    가용성을 비활성화하려면 이 상자를 선택하지 마십시오.

  3. 가용성 설정에 설명된 대로 다른 설정을 변경합니다.

  4. 저장 버튼을 누릅니다.

  5. 서버 인스턴스를 다시 시작합니다.

해당 asadmin 명령

EJB 컨테이너에 대한 가용성을 활성화하려면 asadmin set 명령을 사용하여 구성에 대해 다음의 세 가지 등록 정보를 설정합니다.

예를 들어, config1이 구성 이름이면 다음 명령을 사용합니다.

asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability.availability-enabled="true"

asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability.sfsb-persistence-type="file"

asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability.sfsb-ha-persistence-type="ha"

가용성 설정

가용성 서비스에 대한 EJB 컨테이너 가용성 탭을 사용하여 다음 설정을 변경할 수 있습니다.

HA 지속성 유형: 가용성이 설정된 SFSB에 대해 세션 지속성 및 비활성화 메커니즘을 지정합니다. 허용되는 값은 file(파일 시스템) 및 ha(HADB)입니다. 세션 지속성이 필요한 프로덕션 환경의 경우 기본값인 ha를 사용합니다.

SFSB 지속성 유형: 가용성이 활성화되지 않은 SFSB에 대해 비활성화 메커니즘을 지정합니다. 허용되는 값은 file(파일 시스템) 및 ha입니다.

지속성 유형을 file로 설정한 경우 EJB 컨테이너는 비활성화된 Session Bean 상태가 저장되는 파일 시스템 위치를 지정합니다. 파일 시스템에 검사점을 지정하는 것은 테스트에는 유용하지만 프로덕션 환경에는 도움이 되지 않습니다. 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 관리 설명서저장소 등록 정보를 구성하는 방법을 참조하십시오.

HA 지속성을 사용하면 서버 인스턴스에 장애가 발생할 경우 서버 인스턴스 클러스터가 SFSB 상태를 복구할 수 있습니다. HADB는 비활성 및 활성 저장소로 사용되기도 합니다. 이 옵션은 SFSB 상태 지속성이 필요한 프로덕션 환경에서 사용하십시오. 자세한 내용은 configure-ha-cluster(1)를 참조하십시오.

SFSB 저장소 풀 이름: 세션 지속성을 위해 HADB 연결에 사용한 JDBC 자원을 변경한 경우 SFSB 저장소 풀 이름을 변경할 수 있습니다. 자세한 내용은 configure-ha-cluster(1)를 참조하십시오.

가용성이 비활성화된 경우 SFSB 세션 저장소 구성

가용성이 비활성화되면 로컬 파일 시스템은 SFSB 지속성이 아닌 상태 비활성화에 사용됩니다. SFSB 상태가 저장되는 장소를 변경하려면 EJB 컨테이너의 세션 저장소 위치 설정을 변경합니다. 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 관리 설명서저장소 등록 정보를 구성하는 방법을 참조하십시오.

개별 응용 프로그램 또는 EJB 모듈에 대한 가용성 구성

배포 중에 개별 응용 프로그램 또는 EJB 모듈에 대한 SFSB 가용성을 활성화할 수 있습니다.

개별 Bean에 대한 가용성 구성

개별 SFSB에 대해 가용성을 활성화하고 검사점을 지정할 메소드를 선택하려면 sun-ejb-jar.xml 배포 설명자 파일을 사용합니다. .

고가용성 세션 지속성을 활성화하려면 ejb 요소에서 availability-enabled="true"를 설정합니다. SFSB 캐시의 크기 및 동작을 제어하려면 다음 요소를 사용합니다.

sun-ejb-jar.xml에 대한 자세한 내용은 Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s GuideThe sun-ejb-jar.xml File을 참조하십시오.


예 8–1 가용성이 활성화된 EJB 배포 설명자의 예

<sun-ejb-jar>
    ...
    <enterprise-beans>
        ...
        <ejb availability-enabled="true">
            <ejb-name>MySFSB</ejb-name>
        </ejb>
        ...
    </enterprise-beans>
</sun-ejb-jar>

검사점을 지정할 메소드 지정

검사점을 활성화하면 트랜잭션이 롤백된 경우에도 일반적으로 Bean이 트랜잭션을 완료한 후에 검사점이 지정됩니다. Bean의 상태를 크게 바꾸는 비트랜잭션 비즈니스 메소드의 끝에 SFSB의 선택적 검사점을 지정하려면 sun-ejb-jar.xml 배포 설명자 파일의 ejb 요소에 있는 checkpoint-at-end-of-method 요소를 사용합니다.

checkpoint-at-end-of-method 요소의 비트랜잭션 메소드는 다음과 같을 수 있습니다.


주 –

SFSB가 트랜잭션에 참여하지 않고 어떠한 메소드도 checkpoint-at-end-of-method 요소에 명시적으로 지정되지 않았다면 이 Bean에 대해 availability-enabled="true"인 경우에도 Bean의 상태는 검사되지 않습니다.

더 나은 성능을 위해 적은 수의 메소드를 지정하십시오. 이러한 메소드는 많은 양의 작업을 수행하거나 Bean의 상태를 크게 바꿉니다.



예 8–2 메소드 검사점을 지정하는 EJB 배포 설명자의 예

<sun-ejb-jar>
    ...
    <enterprise-beans>
        ...
        <ejb availability-enabled="true">
            <ejb-name>ShoppingCartEJB</ejb-name>
            <checkpoint-at-end-of-method>
                <method>
                    <method-name>addToCart</method-name>
                </method>
            </checkpoint-at-end-of-method>
        </ejb>
        ...
    </enterprise-beans>
</sun-ejb-jar>