4.7. 활성화 구성 속성

4.7.1. 주석을 사용하여 MDB 구성

@ ActivationConfigProperty 주석에 해당하는 @MessageDriven 요소 및 하위 항목을 사용하여 활성화 속성을 구성할 수 있습니다. @ActivationConfigProperty 는 MDB의 활성화 구성 속성 배열입니다. @ActivationConfigProperty 주석 사양은 다음과 같습니다.

@Target(value={})
@Retention(value=RUNTIME)
public @interface ActivationConfigProperty
{
	String propertyName();
	String propertyValue();
}

@ActivationConfigProperty표시 예

@MessageDriven(name="MyMDBName",
activationConfig =
{
    @ActivationConfigProperty(propertyName="destinationLookup",propertyValue="queueA"),
    @ActivationConfigProperty(propertyName = "destinationType",propertyValue = "javax.jms.Queue"),
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
})

4.7.2. 배포 설명자를 사용하여 MDB 구성

ejb -jar.xml의 <message- driven> 요소는 빈을 MDB로 정의합니다. <activation-config> 및 요소에는 activation-config-property 요소를 통해 MDB 구성이 포함됩니다.

ejb-jar.xml

<?xml version="1.1" encoding="UTF-8"?>
<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
               xmlns="http://java.sun.com/xml/ns/javaee"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
               version="3.1">
    <enterprise-beans>
        <message-driven>
            <ejb-name>MyMDBName</ejb-name>
            <ejb-class>org.jboss.tutorial.mdb_deployment_descriptor.bean.MyMDBName</ejb-class>
            <activation-config>
                <activation-config-property>
                    <activation-config-property-name>destinationLookup</activation-config-property-name>
                    <activation-config-property-value>queueA</activation-config-property-value>
                </activation-config-property>
                <activation-config-property>
                    <activation-config-property-name>destinationType</activation-config-property-name>
                    <activation-config-property-value>javax.jms.Queue</activation-config-property-value>
                </activation-config-property>
                <activation-config-property>
                    <activation-config-property-name>acknowledgeMode</activation-config-property-name>
                    <activation-config-property-value>Auto-acknowledge</activation-config-property-value>
                </activation-config-property>
            </activation-config>
        </message-driven>
    <enterprise-beans>
</jboss:ejb-jar>

표 4.1. 자카르타 메시징 서비스 사양에 정의된 활성화 구성 속성

이름설명

destinationLookup

대기열 또는 항목의 Java 네이밍 및 디렉터리 인터페이스 이름입니다. 필수 값입니다.

connectionFactoryLookup

엔드포인트에서 메시지를 수신하는 데 사용되는 관리적으로 정의된 javax.jms.ConnectionFactory, javax.jms.Queue ConnectionFactory 또는 javax.jms.TopicConnectionFactory 오브젝트의 조회 이름입니다.

명시적으로 정의되지 않은 경우 name activemq-ra 를 사용하여 풀링된 연결 팩토리가 사용됩니다.

destinationType

대상 유효한 값은 javax.jms.Queue 또는 javax.jms.Topic 입니다. 필수 값입니다.

messageSelector

messageSelector 속성의 값은 사용 가능한 메시지의 하위 집합을 선택하는 데 사용되는 문자열입니다. 구문은 SQL 92 조건부 표현식 구문의 하위 집합을 기반으로 하며 Jakarta Messaging 사양에 자세히 설명되어 있습니다. ActivationSpec JavaBean에서 messageSelector 속성의 값을 지정하는 것은 선택 사항입니다.

acknowledgeMode

트랜잭션된 자카르타 메시징을 사용하지 않는 경우 승인 유형입니다. 유효한 값은 Auto-acknowledge 또는 Dups-ok-acknowledge 입니다. 필수 값이 아닙니다.

기본값은 Auto-acknowledge 입니다.

clientID

연결의 클라이언트 ID입니다. 필수 값이 아닙니다.

subscriptionDurability

토픽 서브스크립션이 지속적인지 여부. 유효한 값은 Durable 또는 NonDurable 입니다. 필수 값이 아닙니다.

기본값은 NonDurable 입니다.

subscriptionName

서브스크립션 항목의 서브스크립션 이름입니다. 필수 값이 아닙니다.

표 4.2. JBoss EAP에서 정의한 활성화 구성 속성

이름설명

대상

useJNDI=true 와 함께 이 속성을 사용하는 것은 destinationLookup 과 동일합니다. useJNDI=false 와 함께 사용하면 대상이 조회되지 않지만 인스턴스화됩니다. destinationLookup 대신 이 속성을 사용할 수 있습니다. 필수 값이 아닙니다.

shareSubscriptions

서브스크립션을 공유하도록 연결이 구성되었는지 여부.

기본값은 False 입니다.

user

자카르타 메시징 연결 사용자입니다. 필수 값이 아닙니다.

password

Jakarta Messaging 연결의 암호입니다. 필수 값이 아닙니다.

maxSession

사용할 최대 동시 세션 수입니다. 필수 값이 아닙니다.

기본값은 15 입니다.

transactionTimeout

세션의 트랜잭션 시간 초과(밀리초)입니다. 필수 값이 아닙니다.

지정하지 않으면 속성이 무시되고 transactionTimeout 이 재정의되지 않고 트랜잭션 관리자에 정의된 기본 transactionTimeout 이 사용됩니다.

useJNDI

Java 네이밍 및 디렉터리 인터페이스를 사용하여 대상을 조회하는지 여부.

기본값은 True 입니다.

jndiParams

연결에 사용할 Java Naming 및 Directory Interface 매개변수입니다. 매개변수는 다음과 같이 구분된 name=value 쌍으로 정의됩니다 .

localTx

XA 대신 로컬 트랜잭션을 사용합니다.

기본값은 False 입니다.

setupAttempts

자카르타 메시징 연결을 설정하려는 시도 수입니다. 자카르타 메시징 리소스를 사용하기 전에 MDB를 배포할 수 있습니다. 이 경우 리소스 어댑터는 리소스를 사용할 수 있을 때까지 여러 번 설정하려고 합니다. 이는 인바운드 연결에만 적용됩니다.

기본값은 -1 입니다.

setupInterval

자카르타 메시징 연결을 설정하기 위한 연속 시도 사이의 간격(밀리초)입니다. 이는 인바운드 연결에만 적용됩니다.

기본값은 2000 입니다.

rebalanceConnections

인바운드 커넥션 리밸런싱이 활성화되었는지 여부입니다. 이 매개변수를 사용하면 기본 클러스터 토폴로지가 변경될 때 인바운드 연결을 재조정할 수 있습니다.

아웃바운드 연결에 대한 리밸런싱이 없습니다.

기본값은 False 입니다.

deserializationWhiteList

신뢰할 수 있는 클래스 및 패키지 목록인 화이트 목록에 대한 쉼표로 구분된 항목 목록입니다. 이 속성은 목록의 개체를 역직렬화하기 위해 Jakarta Messaging 리소스 어댑터에서 사용합니다.

자세한 내용은 Configuring Messaging ObjectMessage Deserialization in Configuring Messaging for JBoss EAP에서 Controlling Jakarta Messaging ObjectMessage Deserialization을 참조하십시오.

deserializationBlackList

블랙 목록에 대한 쉼표로 구분된 항목 목록입니다. 이는 신뢰할 수 없는 클래스 및 패키지 목록입니다. 이 속성은 목록의 개체가 역직렬화되지 않도록 Jakarta Messaging 리소스 어댑터에서 사용합니다.

자세한 내용은 Configuring Messaging ObjectMessage Deserialization in Configuring Messaging for JBoss EAP에서 Controlling Jakarta Messaging ObjectMessage Deserialization을 참조하십시오.

4.7.3. MDB 구성을 위한 몇 가지 예제 사용 사례

  • 메시지를 수신하는 MDB 사용 사례

    MDB에서 메시지를 수신할 때 기본 시나리오는 JBoss EAP와 함께 제공되는 helloworld-mdb 빠른 시작을 참조하십시오.

  • MDB에서 메시지를 전송하는 사용 사례

    메시지를 처리한 후 다른 비즈니스 시스템에 문의하거나 메시지에 회신해야 할 수도 있습니다. 이 경우 아래 코드 조각과 같이 MDB에서 메시지를 전송할 수 있습니다.

    package org.jboss.as.quickstarts.mdb;
    
    import javax.annotation.Resource;
    import javax.ejb.ActivationConfigProperty;
    import javax.ejb.MessageDriven;
    import javax.inject.Inject;
    import javax.jms.JMSContext;
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.Queue;
    
    @MessageDriven(name = "MyMDB", activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "queue/MyMDBRequest"),
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })
    public class MyMDB implements MessageListener {
    
        @Inject
        private JMSContext jmsContext;
    
        @Resource(lookup = "java:/queue/ResponseDefault")
        private Queue defaultDestination;
    
        /**
         * @see MessageListener#onMessage(Message)
         */
        public void onMessage(Message rcvMessage) {
            try {
                Message response = jmsContext.createTextMessage("Response for message " + rcvMessage.getJMSMessageID());
                if (rcvMessage.getJMSReplyTo() != null) {
                    jmsContext.createProducer().send(rcvMessage.getJMSReplyTo(), response);
                } else {
                    jmsContext.createProducer().send(defaultDestination, response);
                }
            } catch (JMSException e) {
                throw new RuntimeException(e);
            }
        }
    }

    위의 예에서 MDB는 메시지를 수신한 후 JMSReplyTo 에 지정된 대상 또는 Java Naming 및 Directory Interface name java:/queue/ResponseDefault 에 바인딩된 대상에 응답합니다.

  • 인바운드 연결 재조정을 구성하는 MDB 사용 사례

    @MessageDriven(name="MyMDBName",
        activationConfig =
        {
            @ActivationConfigProperty(propertyName = "destinationType",propertyValue = "javax.jms.Queue"),
            @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "queueA"),
            @ActivationConfigProperty(propertyName = "rebalanceConnections", propertyValue = "true")
        }
    )