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

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

0 голосов
/ 21 сентября 2009

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

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

Что я хотел бы понять, так это когда и как 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 ]

0 голосов
/ 15 февраля 2015

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

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

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

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

0 голосов
/ 03 ноября 2009

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


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

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

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

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

...