4 Replies Latest reply on Mar 17, 2009 2:57 PM by lloydb

    MDB with Oracle AQ via Sun Adapter

    ryandavid

      I have integrated Oracle AQ with JBoss 4.0.2 using the rar of Sun Adapter. I can send messages to a queue but I have some problems in using an MDB that reads from a queue.

      The MDB is BMT because the adapater doesn't support XA connections.

      I used this ejb-jar.xml

      <ejb-jar>
      <enterprise-beans>
      
       <message-driven>
       <ejb-name>TestJMSBean</ejb-name>
       <ejb-class>it.senato.testjms.TestJMSBean</ejb-class>
       <messaging-type>javax.jms.MessageListener</messaging-type>
       <transaction-type>Bean</transaction-type>
      
       <activation-config>
       <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>destinationProperties</activation-config-property-name>
       <activation-config-property-value>owner=senaprod,name=FROM_QUEUE</activation-config-property-value>
       </activation-config-property>
       <activation-config-property>
       <activation-config-property-name>connectionFactoryProperties</activation-config-property-name>
       <activation-config-property-value>jdbc_connect_string=jdbc:oracle:thin:scott/mypass@myhost:1521:svil,host=senadbmssvil,user=scott,password=mypass,port=1521,sid=svil,driver=thin</activation-config-property-value>
       </activation-config-property>
      
       <activation-config-property>
       <activation-config-property-name>userName</activation-config-property-name>
       <activation-config-property-value>scott</activation-config-property-value>
       </activation-config-property>
       <activation-config-property>
       <activation-config-property-name>mypass</activation-config-property-name>
       <activation-config-property-value>svil</activation-config-property-value>
       </activation-config-property>
      
       </activation-config>
      
       </message-driven>
      
       </enterprise-beans>
      
       <assembly-descriptor>
       </assembly-descriptor>
      
      </ejb-jar>


      this jboss.xml

      <jboss>
       <enterprise-beans>
      
       <message-driven>
       <ejb-name>TestJMSBean</ejb-name>
      
       <invoker-bindings>
       <invoker>
       <invoker-proxy-binding-name>message-inflow-driven-bean</invoker-proxy-binding-name>
       </invoker>
       </invoker-bindings>
      
       <resource-adapter-name>oracleaq.rar</resource-adapter-name>
      
       </message-driven>
       </enterprise-beans>
      </jboss>
      


      and finally this is the onMessage() method

       public void onMessage(Message msg) {
       try {
       ctx.getUserTransaction().begin();
      
       logger.debug("onMessage...");
       // extract message
       TextMessage textMessage = null;
       try {
       textMessage = (TextMessage) msg;
      
       } catch (ClassCastException ce) {
       logger.warn("Received a non TextMessage");
       ctx.getUserTransaction().commit();
       return;
       }
      
       logger.info("Received a text message: " + textMessage.getText());
       msg.acknowledge();
       ctx.getUserTransaction().commit();
      
       } catch (NotSupportedException e) {
       logger.error(e.getMessage(),e);
       } catch (SystemException e) {
       logger.error(e.getMessage(),e);
       } catch (JMSException e) {
       logger.error(e.getMessage(),e);
       } catch (RollbackException e) {
       logger.error(e.getMessage(),e);
       } catch (HeuristicMixedException e) {
       logger.error(e.getMessage(),e);
       } catch (HeuristicRollbackException e) {
       logger.error(e.getMessage(),e);
       }
      
       }