Java EE 애플리케이션 자원 선언
외부 자원 및 구성 매개변수를 선언하도록 Java™ Enterprise Edition(Java EE) 애플리케이션을 구성할 수 있습니다. 이러한 자원은 애플리케이션 코드에 삽입하거나 JNDI(Java Naming and Directory Interface)를 통해 애플리케이션에서 액세스할 수 있습니다.
자원 참조를 사용하면 애플리케이션이 배치될 때 자원에 바인딩할 수 있는 논리 이름을 애플리케이션에서 정의하고 사용할 수 있습니다.
Java EE 애플리케이션에서 선언할 수 있는 자원 유형으로는 단순 환경 항목, EJB(Enterprise JavaBeans) 참조, 웹 서비스 참조, 자원 관리자 연결 팩토리 참조, 자원 환경 참조, 메시지 대상 참조, 지속 단위 참조, 지속 컨텍스트 참조가 있습니다.
단순 환경 항목
Java EE 애플리케이션에서 구성 매개변수를 정의하여 단순 환경 항목을 통해 비즈니스 로직을 사용자 정의할 수 있습니다. Java EE 6 애플리케이션에 설명된 바와 같이, 단순 환경 항목 값은 Java 유형 즉, String, Character, Bye, Short, Integer, Long, Boolean, Double, Float, Class 및 Enum의 서브클래스 중 하나입니다.
애플리케이션 제공자는 애플리케이션 코드에서 액세스하는 모든 단순 환경 항목을 선언해야 합니다. 단순 환경 항목은 애플리케이션 코드의 어노테이션(javax.annotation.Resource)을 사용하거나 XML 배치 디스크립터의 env-entry 요소를 사용하여 선언됩니다.
다음 애플리케이션 어노테이션 예제는 환경 항목을 선언합니다.
// Retry interval in milliseconds
@Resource long retryInterval = 3000;
위 예제에서 필드 기본값은 3000입니다. XML 배치 디스크립터에 정의하는 env-entry-value를 사용하여 이 값을 변경할 수 있습니다.
다음 예제에서, 애플리케이션이 Class 유형의 단순 환경 항목을 선언하고 XML 배치 디스크립터의 환경 항목 값 요소를 사용하여 삽입할 Class를 정의합니다.
@Resource(name=TraceFormatter) Class<?> traceFormatter;
<env-entry>
<env-entry-name>TraceFormatter</env-entry-name>
<env-entry-value>com.sample.trace.StdOutTraceFormatter</env-entry-value>
</env-entry>
위 예제에서 필드 값은 com.sample.trace.StdOutTraceFormatter 클래스 오브젝트로 설정됩니다.
다음 예제에서 애플리케이션이 단순 환경 항목인 validationMode를 com.sample.Order 클래스에 있는 Enum의 서브클래스로 선언하고, XML 배치 디스크립터의 요소를 사용하여 삽입할 CALLBACK의 Enum 값을 구성합니다.
<env-entry>
<env-entry-name>JPAValidation</env-entry-name>
<env-entry-type>javax.persistence.ValidationMode</env-entry-type>
<env-entry-value>CALLBACK</env-entry-value>
<injection-target>
<injection-target-class>com.sample.Order</injection-target-class>
<injection-target-name>validationMode</injection-target-name>
</injection-target>
</env-entry>
위 예제에서 validationMode 필드는 CALLBACK Enum 값으로 설정됩니다. 어노테이션 및 XML 코드를 사용하여 단순 환경 항목을 선언할 때 동일한 방법을 사용하십시오. 예를 들면 다음과 같습니다.
@Resource (name=JPAValidation)
javax.persistence.ValidationMode validationMode;
<env-entry>
<env-entry-name>JPAValidation</env-entry-name>
<env-entry-value>CALLBACK</env-entry-value>
</env-entry>
EJB(Enterprise JavaBean) 참조
Java EE 6 스펙에 설명된 대로, EJB 참조라고 하는 논리 이름을 사용하여 엔터프라이즈 Bean 홈 또는 엔터프라이즈 Bean 인스턴스에 대한 참조를 선언하는 Java EE 애플리케이션을 개발할 수 있습니다.
애플리케이션이 EJB에 대한 참조를 선언하면, 사용자가 참조하는 EJB는 다음 기술 중 하나로 해석됩니다.
- ibm-ejb-jar-bnd.xml 파일 또는 ibm-web-bnd.xml 파일에 EJB 바인딩을 지정합니다.
- ejb-jar.xml 파일 또는 web.xml 파일에 <ejb-link> 요소를 지정합니다.
- javax.ejb.EJB 어노테이션에 beanName 속성을 지정합니다.
- ejb-jar.xml 파일 또는 web.xml 파일에 <lookup-name> 요소를 지정합니다.
- javax.ejb.EJB 어노테이션에 lookup 속성을 지정합니다.
- EJB 참조 유형(AutoLink로 참조됨)으로 선언된 인터페이스를 구현하는 엔터프라이즈 Bean을 찾습니다.
EJB 컨테이너는 나열된 순서대로 이전 기술을 사용하여 EJB 참조를 해석합니다.
다음 예제에서, 애플리케이션은 어노테이션을 사용하여 EJB 참조를 선언하고 해석에 사용되는 바인딩을 제공합니다.
@EJB(name="Cart")
Cart shoppingCart;
<ejb-ref name="Cart" binding-name="java:app/SampleEJB/SampleCart"/>
다음 예제에서, 애플리케이션은 어노테이션을 사용하여 EJB 참조를 선언하고 해석에 사용되는 ejb-link 요소를 제공합니다.
@EJB(name="Cart")
Cart shoppingCart;
<ejb-local-ref>
<ejb-ref-name>Cart</ejb-ref-name>
<ejb-link>SampleEJB/SampleCart</ejb-link>
</ejb-local-ref>
다음 예제에서, 애플리케이션은 어노테이션을 사용하여 EJB 참조를 선언하고 소스 Bean com.sample.SourceBean에서 해석에 사용되는 lookup 속성을 제공합니다.
@EJB(name="Cart" lookup="java:app/SampleEJB/SampleCart")
Cart shoppingCart;
다음 예제에서와 같이 애플리케이션은 XML 배치 디스크립터의 <lookup-name> 요소를 사용하여 EJB 참조를 선언할 수도 있습니다.
<ejb-local-ref>
<ejb-ref-name>Cart</ejb-ref-name>
<lookup-name>java:app/SampleEJB/SampleCart</lookup-name>
<injection-target>
<injection-target-class>com.sample.SourceBean</injection-target-class>
<injection-target-name>ShoppingCart</injection-target-name>
</injection-target>
</ejb-local-ref>
다음 예제에서, 애플리케이션은 어노테이션을 사용하여 EJB 참조를 선언하고 해석에 사용되는 beanName 속성을 제공합니다.
@EJB(name="Cart" beanName="SampleEJB/SampleCart")
Cart shoppingCart;
자원 환경 참조
Java EE 6 스펙에 설명된 대로, javax.transaction.UserTransaction, javax.ejb.EJBContext, javax.ejb.TimerServcie, org.omg.CORBA.ORB, javax.validation.Validator, javax.validation.ValidatorFactory 또는 javax.enterprise.inject.spi.BeanManager를 비롯하여 자원과 연관된 관리 오브젝트(예: 커넥터 CCI InteractionSpec 인스턴스) 또는 EJB 컨테이너가 관리하는 기타 오브젝트 유형에 대한 참조를 선언하는 애플리케이션을 개발할 수 있습니다.
애플리케이션이 관리 오브젝트에 대한 참조를 선언하면, 애플리케이션이 배치될 때 관리 오브젝트에 대한 바인딩을 제공해야 합니다. 애플리케이션을 배치할 때 관리 콘솔을 사용하여 바인딩을 제공하거나, WebSphere® 바인딩 XML 파일 ibm-ejb-jar-bnd.xml 또는 ibm-web-bnd.xml에 바인딩을 추가할 수 있습니다.
다음 예제에서, 애플리케이션은 자원 환경 참조를 선언하고 자원에 대한 바인딩을 제공합니다.
@Resource(name="jms/ResponseQueue")
Queue responseQueue;
<session name="StatelessSampleBean">
<resource-env-ref name="jms/ResponseQueue" binding-name="Jetstream/jms/ResponseQueue"/>
</session>
다음 예제에서와 같이 애플리케이션은 바인딩 없이 lookup 속성을 사용하여 자원 환경 참조를 선언할 수도 있습니다.
@Resource(name="jms/ResponseQueue", lookup="Jetstream/jms/ResponseQueue")
Queue responseQueue;
<resource-env-ref>
<resource-env-ref-name>jms/ResponseBean</resource-env-ref-name>
<resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
</resource-env-ref>
애플리케이션이 컨테이너 관리 오브젝트 유형에 대한 참조를 선언하면 바인딩이 사용되지 않습니다. 컨테이너가 참조 오브젝트의 올바른 인스턴스를 제공합니다. 다음 예제에서, 애플리케이션은 컨테이너 관리 오브젝트에 대한 자원 환경 참조를 선언합니다.
@Resource
javax.validation.Validator validator;
자원 참조에 자원 참조 추가
@Resource(name="java:global/env/jdbc/ds1ref",
lookup="java:global/env/jdbc/ds1",
authenticationType=Resource.AuthenticationType.APPLICATION,
shareable=false)
DataSource ds1ref;
@Resource(name="java:global/env/jdbc/ds1refref",
lookup="java:global/env/jdbc/ds1ref",
authenticationType=Resource.AuthenticationType.APPLICATION,
shareable=true)
DataSource ds1refref;
이 검색에서는 가장 안쪽에 있는
중첩 참조(여기에서는 "java:global/env/jdbc/ds1ref")를 사용합니다.