Конфигурация JBoss EJB3 MDB

Я пытаюсь понять некоторый код EJB 3, работающий в JBoss 4.3.

У нас есть файл ejb3-interceptors-aop.xml, настроенный в JBoss с некоторой конфигурацией MDB, а затем мы получили класс Java MDB.

Я хотел бы понять, когда и как MDB "привязывается" к MQ? То есть когда / как MDB начинает прослушивать очередь MQ?

Читает ли JBoss при запуске чтение файла ejb3-interceptors-aop.xml, а затем находит класс с аннотацией AspectDomain, равной "GatewayMDB" и "связывается" с очередью MQ при запуске?


XML в ejb3-interceptors-aop.xml:

   <domain name="GatewayMDB">
      <bind pointcut="execution(public * @javax.annotation.security.RunAs->*(..))">
         <interceptor-ref name="org.jboss.ejb3.security.RunAsSecurityInterceptorFactory"/>
      </bind>
      <bind pointcut="execution(public * *->*(..))">
         <interceptor-ref name="org.jboss.ejb3.stateless.StatelessInstanceInterceptor"/>
         <interceptor-ref name="org.jboss.ejb3.tx.TxInterceptorFactory"/>
         <interceptor-ref name="org.jboss.ejb3.AllowedOperationsInterceptor"/>
         <interceptor-ref name="org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor"/>
         <interceptor-ref name="org.jboss.ejb3.interceptor.EJB3InterceptorsFactory"/>
      </bind>
      <annotation expr="!class(@org.jboss.annotation.ejb.PoolClass)">
         @org.jboss.annotation.ejb.PoolClass (value=org.jboss.ejb3.StrictMaxPool.class, maxSize=30, timeout=10000)
      </annotation>
      <annotation expr="!class(@org.jboss.annotation.ejb.DefaultActivationSpecs)">
         @org.jboss.annotation.ejb.DefaultActivationSpecs ({@javax.ejb.ActivationConfigProperty(propertyName = "channel", propertyValue = "SYSTEM.DEF.SVRCONN"), @javax.ejb.ActivationConfigProperty(propertyName = "hostName", propertyValue = "10.10.10.10"), @javax.ejb.ActivationConfigProperty(propertyName = "queueManager", propertyValue = "QM"), @javax.ejb.ActivationConfigProperty(propertyName = "port", propertyValue = "1419"),@javax.ejb.ActivationConfigProperty(propertyName = "transportType", propertyValue = "CLIENT")})
      </annotation>
   </domain>

Класс MDB:

@MessageDriven(name = "BridgeMDB", activationConfig = {
        @ActivationConfigProperty(propertyName = "useJNDI", propertyValue = "true"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "TO.WLS.LQUEUE.BG"),
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "maxPoolDepth", propertyValue = "1") })
@ResourceAdapter("wmq.jmsra.rar")
@AspectDomain("GatewayMDB") 
@Interceptors(SpringBeanAutowiringInterceptor.class)
@TransactionManagement(TransactionManagementType.CONTAINER)
public class BridgeMDB implements MessageListener {
    private static Logger logger = Logger.getLogger(BridgeMDB.class);


    @Autowired
    private MessageProcessor messageProcessor;
    @Autowired
    private MessageTranslator messageTranslator;

    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public void onMessage(Message message) {
        ...
    }

}

2 ответа

Отказ от ответственности: это предположение, так как я не знаю код jboss.


Обычный способ обработки файлов классов в java - их чтение по пути к классам (в данном случае это происходит во время загрузки) и создание метаданных определенного типа для каждого класса.

Затем, когда приложение загрузится, контейнер будет читать метаданные класса, чтобы связать / внедрить / настроить соответствующие атрибуты, которые были определены в классе.

Что касается xml, большая часть конфигурации jboss является статической AFAIK, т. Е. Вам нужно перезапустить сервер приложений, чтобы изменения вступили в силу.

В общем, я бы сказал, что ваши наблюдения верны.

Для ясного понимания этого процесса лучше всего прочитать спецификацию JCA. Это ясно и легко понятно спецификация.

IBM предоставляет свой адаптер JCA, который развернут на JBoss. Когда JBoss развертывает ваш MDB, "спецификация активации" передается в IBM JCA. Затем IBM JCA создает фабрику управляемых соединений для экземпляров MDB. Обратите внимание, что это отдельно и отличается от любых фабрик соединений, настроенных в конфигурации сервера JBoss.

Частью спецификации активации является количество сеансов JMS. IBM JCA создает и управляет этими сеансами. IBM JCA также создает прослушиватели сообщений JMS на этих сеансах.

При получении сообщения IBM JCA создает контекст, управляемый сообщениями, запрашивает экземпляр MDB из пула управляемых экземпляров JBoss, предоставляет контекст, управляемый сообщениями, экземпляру MDB и вызывает метод MDB onMessage().

Другие вопросы по тегам