4.6. 애플리케이션에서 자카르타 엔터프라이즈 빈 및 MDB 속성 대체 활성화

Red Hat JBoss Enterprise Application Platform을 사용하면 @ActivationConfigProperty 및 @ Resource 주석을 사용하여 Jakarta Enterprise Beans 및 MDB에서 속성 대체를 활성화할 수 있습니다. 속성 대체에는 다음과 같은 구성 및 코드 변경이 필요합니다.

다음 예제에서는 속성 대체를 사용하기 위해 JBoss EAP와 함께 제공되는 helloworld-mdb 빠른 시작을 수정하는 방법을 보여줍니다. 완료된 작업 예는 helloworld-mdb-propertysubstitution 빠른 시작을 참조하십시오.

4.6.1. 속성 대체를 사용하도록 서버 설정

JBoss EAP 서버에서 속성 대체를 활성화하려면 서버 구성의 하위 시스템에서 annotation-property-replacement 속성을 true 로 설정해야 합니다.

  1. 서버 구성 파일을 백업합니다.

    helloworld-mdb-propertysubstitution 빠른 시작 예제에서는 독립 실행형 서버에 대한 전체 프로필이 필요하므로 이 예제는 EAP_HOME/standalone/configuration/standalone-full.xml 파일입니다. 관리형 도메인에서 서버를 실행하는 경우 EAP_HOME/domain/configuration/domain.xml 파일입니다.

  2. JBoss EAP 설치 디렉터리로 이동하고 full 프로필로 서버를 시작합니다.

    $ EAP_HOME/bin/standalone.sh -c standalone-full.xml
    참고

    Windows Server의 경우 EAP_HOME\bin\standalone.bat 스크립트를 사용합니다.

  3. 관리 CLI를 시작합니다.

    $ EAP_HOME/bin/jboss-cli.sh --connect
    참고

    Windows Server의 경우 EAP_HOME\bin\jboss-cli.bat 스크립트를 사용합니다.

  4. 다음 명령을 입력하여 주석 속성 대체를 활성화합니다.

    /subsystem=ee:write-attribute(name=annotation-property-replacement,value=true)

    다음 결과가 표시됩니다.

    {"outcome" => "success"}
  5. 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. 서버 구성에서 시스템 속성 정의

  1. 관리 CLI를 시작합니다.
  2. 다음 명령 구문을 사용하여 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)

  3. 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 빠른 시작을 변경하는 방법의 예입니다.

  1. 시스템 속성에 대체를 사용하도록 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") })

  2. 시스템 속성에 대체를 사용하도록 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") })

  3. 시스템 속성 대체를 사용하도록 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. -->

  4. 시스템 속성 대체 값을 사용하도록 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>

  5. 애플리케이션을 배포합니다. 애플리케이션에서 @Resource 및 @ ActivationConfigProperty 속성 값에 대해 시스템 속성에 지정된 값을 사용합니다.