4.6. 애플리케이션에서 자카르타 엔터프라이즈 빈 및 MDB 속성 대체 활성화
Red Hat JBoss Enterprise Application Platform을 사용하면 @ActivationConfigProperty 및 @
Resource
주석을 사용하여 Jakarta Enterprise Beans 및 MDB에서 속성 대체를 활성화할 수 있습니다. 속성 대체에는 다음과 같은 구성 및 코드 변경이 필요합니다.
- JBoss EAP 서버 구성 파일에서 속성 대체를 활성화해야 합니다.
- 서버 구성 파일에서 시스템 속성을 정의하거나 JBoss EAP 서버를 시작할 때 인수로 전달해야 합니다.
- 대체 변수를 사용하려면 애플리케이션 코드를 수정해야 합니다.
다음 예제에서는 속성 대체를 사용하기 위해 JBoss EAP와 함께 제공되는 helloworld-mdb
빠른 시작을 수정하는 방법을 보여줍니다. 완료된 작업 예는 helloworld-mdb-propertysubstitution
빠른 시작을 참조하십시오.
4.6.1. 속성 대체를 사용하도록 서버 설정
JBoss EAP 서버에서 속성 대체를 활성화하려면 서버 구성의 하위 시스템에서
annotation-property-replacement
속성을 true
로 설정해야 합니다.
서버 구성 파일을 백업합니다.
helloworld-mdb-propertysubstitution
빠른 시작 예제에서는 독립 실행형 서버에 대한 전체 프로필이 필요하므로 이 예제는EAP_HOME/standalone/configuration/standalone-full.xml
파일입니다. 관리형 도메인에서 서버를 실행하는 경우EAP_HOME/domain/configuration/domain.xml 파일입니다
.JBoss EAP 설치 디렉터리로 이동하고 full 프로필로 서버를 시작합니다.
$ EAP_HOME/bin/standalone.sh -c standalone-full.xml
참고Windows Server의 경우
EAP_HOME\bin\standalone.bat
스크립트를 사용합니다.관리 CLI를 시작합니다.
$ EAP_HOME/bin/jboss-cli.sh --connect
참고Windows Server의 경우
EAP_HOME\bin\jboss-cli.bat
스크립트를 사용합니다.다음 명령을 입력하여 주석 속성 대체를 활성화합니다.
/subsystem=ee:write-attribute(name=annotation-property-replacement,value=true)
다음 결과가 표시됩니다.
{"outcome" => "success"}
JBoss EAP 서버 구성 파일의 변경 사항을 검토합니다. 이제 The
ee
하위 시스템에 다음 XML이 포함되어야 합니다.예제
하위
시스템 구성<subsystem xmlns="urn:jboss:domain:ee:4.0"> ... <annotation-property-replacement>true</annotation-property-replacement> ... </subsystem>
4.6.2. 시스템 속성 정의
서버 구성 파일에서 시스템 속성을 지정하거나 JBoss EAP 서버를 시작할 때 명령줄 인수로 전달할 수 있습니다. 서버 구성 파일에 정의된 시스템 속성이 서버를 시작할 때 명령줄에서 전달된 값보다 우선합니다.
4.6.2.1. 서버 구성에서 시스템 속성 정의
- 관리 CLI를 시작합니다.
다음 명령 구문을 사용하여 JBoss EAP 서버에서 시스템 속성을 구성합니다.
시스템 속성 추가 구문
/system-property=PROPERTY_NAME:add(value=PROPERTY_VALUE)
다음 시스템 속성은
helloworld-mdb-propertysubstitution
빠른 시작에 대해 구성됩니다.시스템 속성을 추가하는 명령 예
/system-property=property.helloworldmdb.queue:add(value=java:/queue/HELLOWORLDMDBPropQueue) /system-property=property.helloworldmdb.topic:add(value=java:/topic/HELLOWORLDMDBPropTopic) /system-property=property.connection.factory:add(value=java:/ConnectionFactory)
JBoss EAP 서버 구성 파일의 변경 사항을 검토합니다. 이제
<extensions>
뒤에 다음 시스템 속성이 표시되어야 합니다.시스템 속성 구성 예
<system-properties> <property name="property.helloworldmdb.queue" value="java:/queue/HELLOWORLDMDBPropQueue"/> <property name="property.helloworldmdb.topic" value="java:/topic/HELLOWORLDMDBPropTopic"/> <property name="property.connection.factory" value="java:/ConnectionFactory"/> </system-properties>
4.6.2.2. 서버 시작 시 시스템 속성을 인수로 전달
원하는 경우 -DPROPERTY_NAME =PROPERTY_VALUE
형식으로 JBoss EAP 서버를 시작할 때 명령줄에서 인수를 전달할 수 있습니다. 다음은 이전 섹션에서 정의한 시스템 속성에 대한 인수를 전달하는 방법의 예입니다.
시스템 속성을 통과하는 서버 시작 명령 예
$ EAP_HOME/bin/standalone.sh -c standalone-full.xml -Dproperty.helloworldmdb.queue=java:/queue/HELLOWORLDMDBPropQueue -Dproperty.helloworldmdb.topic=java:/topic/HELLOWORLDMDBPropTopic -Dproperty.connection.factory=java:/ConnectionFactory
4.6.3. 시스템 속성 대체를 사용하도록 애플리케이션 코드 수정
하드 코딩된 @ActivationConfigProperty
및 @Resource
주석 값을 새로 정의된 시스템 속성의 대체로 바꿉니다. 다음은 새로 정의된 시스템 속성 대체를 사용하도록 helloworld-mdb
빠른 시작을 변경하는 방법의 예입니다.
시스템 속성에 대체를 사용하도록
HelloWorldQueueMDB
클래스에서@ActivationConfigProperty
대상
속성 값을 변경합니다. 이제@MessageDriven
주석이 다음과 같이 표시됩니다.HelloWorldQueueMDB 코드 예
@MessageDriven(name = "HelloWorldQueueMDB", activationConfig = { @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "${property.helloworldmdb.queue}"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
시스템 속성에 대체를 사용하도록
HelloWorldTopicMDB
클래스에서@ActivationConfigProperty
대상
속성 값을 변경합니다. 이제@MessageDriven
주석이 다음과 같이 표시됩니다.HelloWorldTopicMDB Code Example
@MessageDriven(name = "HelloWorldQTopicMDB", activationConfig = { @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "${property.helloworldmdb.topic}"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"), @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
시스템 속성 대체를 사용하도록
HelloWorldMDBServletClient
클래스에서@Resource
주석을 변경합니다. 이제 코드는 다음과 같아야 합니다.HelloWorldMDBServletClient 코드 예
/** * Definition of the two Jakarta Messaging Service destinations used by the quickstart * (one queue and one topic). */ @JMSDestinationDefinitions( value = { @JMSDestinationDefinition( name = "java:/${property.helloworldmdb.queue}", interfaceName = "javax.jms.Queue", destinationName = "HelloWorldMDBQueue" ), @JMSDestinationDefinition( name = "java:/${property.helloworldmdb.topic}", interfaceName = "javax.jms.Topic", destinationName = "HelloWorldMDBTopic" ) }) /** * <p> * A simple servlet 3 as client that sends several messages to a queue or a topic. * </p> * * <p> * The servlet is registered and mapped to /HelloWorldMDBServletClient using the {@linkplain WebServlet * @HttpServlet}. * </p> * * @author Serge Pagop (spagop@redhat.com) * */ @WebServlet("/HelloWorldMDBServletClient") public class HelloWorldMDBServletClient extends HttpServlet { private static final long serialVersionUID = -8314035702649252239L; private static final int MSG_COUNT = 5; @Inject private JMSContext context; @Resource(lookup = "${property.helloworldmdb.queue}") private Queue queue; @Resource(lookup = "${property.helloworldmdb.topic}") private Topic topic; <!-- Remainder of code can be found in the `helloworld-mdb-propertysubstitution` quickstart. -->
시스템 속성 대체 값을 사용하도록 the
activemq-jms.xml
파일을 수정합니다.예: .activemq-jms.xml 파일
<?xml version="1.0" encoding="UTF-8"?> <messaging-deployment xmlns="urn:jboss:messaging-activemq-deployment:1.0"> <server> <jms-destinations> <jms-queue name="HELLOWORLDMDBQueue"> <entry name="${property.helloworldmdb.queue}"/> </jms-queue> <jms-topic name="HELLOWORLDMDBTopic"> <entry name="${property.helloworldmdb.topic}"/> </jms-topic> </jms-destinations> </server> </messaging-deployment>
-
애플리케이션을 배포합니다. 애플리케이션에서
@Resource 및 @
ActivationConfigProperty
속성 값에 대해 시스템 속성에 지정된 값을 사용합니다.