2009-09-21 7 views
0

Я пытаюсь понять, какой код EJB 3 работает в JBoss 4.3.JBoss EJB3 Конфигурация MDB

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

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

Загружается ли JBoss при запуске файла ejb3-interceptors-aop.xml, а затем найдите класс с аннотацией AspectDomain, равной «GatewayMDB» и «привяжите» к очереди MQ при запуске?


XML в EJB3-перехватчиков-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) { 
     ... 
    } 

} 

ответ

0

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


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

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

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

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

0

Для четкого понимания этого процесса лучше всего будет прочитать спецификацию 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().

Смежные вопросы