0

JBoss4.3で実行されているEJB3コードを理解しようとしています。

JBossでいくつかのMDB構成を使用してejb3-interceptors-aop.xmlファイルを構成し、次にMDBJavaクラスを取得します。

私が理解したいのは、MDBがいつどのようにMQに「バインド」されるのかということです。つまり、MDBはいつ/どのようにMQキューのリッスンを開始しますか?

起動時にJBossはejb3-interceptors-aop.xmlファイルを読み取り、起動時に「GatewayMDB」および「bind」に等しいAspectDomainアノテーションを持つクラスを見つけますか?


ejb3-interceptors-aop.xmlの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) {
        ...
    }

}
4

2 に答える 2

0

免責事項: jboss コードを知らないため、これは仮定です。


Java でクラス ファイルを処理する一般的な方法は、クラス パスを介してそれらを読み取り (この場合はロード時)、各クラスの何らかのメタデータを構築することです。

次に、アプリケーションがブートストラップすると、コンテナーはクラスのメタデータを読み取り、クラス内で定義された適切な属性を配線/注入/構成します。

xml に関しては、jboss 設定のほとんどは静的な AFAIK です。つまり、変更を有効にするにはアプリ サーバーを再起動する必要があります。

全体として、あなたの観察は正しいと言えます。

于 2009-11-03T12:15:26.423 に答える