You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by cosjav <co...@gmail.com> on 2006/07/28 10:22:43 UTC

Integrating ActiveMQ with Jboss4

Hi,

I am relatively new to JMS and have been looking to migrate our current
JBossMQ implementation of JMS to ActiveMQ and at the same time move from
using JBoss 3.2.3 to JBoss 4.0.4.

Our product is deployed over two servers whereby MDBs deployed on server1
will write to queues located on server2 which server2 will then read from.
Server2 also writes to queues located on itself that server1 will read from.
Finally server1 also has some local queues that it writes to and reads from
(accessed by server1 only).

This above-mentioned setup is working perfectly fine with the JBossMQ
implementation of JMS and the only reason why we are migrating to ActiveMQ
is because JBossMQ doesnt support indexing on message selectors (i.e. when a
queue that has multiple receivers, which receive messages based on a msg
selector, grows large with messages that dont match a particular receiver,
performance degrades significantly).

Now the question I'm asking is a newbie one in relation to MDBs reading from
remote JMS queues. It was my understanding that to achieve this one would
have to follow something similar to:
http://wiki.jboss.org/wiki/Wiki.jsp?page=HowDoIConfigureAnMDBToTalkToARemoteQueue
Which is pretty much identical to the way we have set up with JBossMQ. But
when it comes to ActiveMQ I couldnt find any samples that show me how to do
this (the ActiveMQ Jboss Integration Guide seems to take a different
approach thats not for remote queue access). Does this mean there is another
way to do it? (btw, I have also posted this on the ActiveMQ forums but
wanted to get an idea from the ActiveMQ community as to how to achieve my
migration goal)

I will appreciate any guidance (even RTFM advice but with references
please). Like what should I read first, and what comes next, etc... because
at the moment there seems to be loads of information that I cant make much
sense of in terms what links with what.

Thanks,
cosjav

P.S the attempts I have made so far are shown below:

I changed the server1 JMSProviderLoader (contained in a file named
jms-providers-service.xml in deploy/jms) details from:

<server>
    <!--
    JMS Providers to access server2 queues
    -->
    <mbean code="org.jboss.jms.jndi.JMSProviderLoader"
       
name="jboss.mq:service=JMSProviderLoader,name=RemoteJBossMQProvider_server2">
        <attribute name="ProviderName">RemoteJMSProvider_server2</attribute>
        <attribute name="ProviderUrl">jnp://server2:1099</attribute>
        <attribute
name="ProviderAdapterClass">org.jboss.jms.jndi.JBossMQProvider</attribute>
        <attribute
name="QueueFactoryRef">UIL2XAConnectionFactory</attribute>
        <attribute
name="TopicFactoryRef">UIL2XAConnectionFactory</attribute>
    </mbean>

</server>	

to

<server>
    <!--
    JMS Providers to access server2 queues
    -->
    <mbean code="org.jboss.jms.jndi.JMSProviderLoader"
       
name="jboss.mq:service=JMSProviderLoader,name=RemoteActiveMQProvider_server2,server=server2">
        <attribute name="ProviderName">RemoteJMSProvider_indium</attribute>
        <attribute
name="ProviderAdapterClass">org.jboss.jms.jndi.JNDIProviderAdapter</attribute>
        <!--<attribute
name="QueueFactoryRef">ConnectionFactory</attribute>-->
        <attribute
name="QueueFactoryRef">ActiveMQConnectionFactory</attribute>
        <attribute
name="TopicFactoryRef">ActiveMQConnectionFactory</attribute>
        <attribute name="Properties">
         
java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
          java.naming.factory.url.pkgs=org.jnp.interfaces
          java.naming.provider.url=server2:1099
        </attribute>
    </mbean>
</server>

(I think I have set the connection factory incorrectly above because I'm
getting exceptions saying "javax.naming.NameNotFoundException:
ActiveMQConnectionFactory")

Then I changed jms-ds.xml (in deploy/jms) on server1 from:

 <tx-connection-factory>
    <jndi-name>RemoteJmsXA_server2</jndi-name>
    <xa-transaction/>
    <track-connection-by-tx>true</track-connection-by-tx>
    <adapter-display-name>JMS Adapter</adapter-display-name>
    <config-property name="JmsProviderAdapterJNDI"
type="java.lang.String">java:/RemoteJMSProvider_server2</config-property>
    <config-property name="SessionDefaultType"
type="java.lang.String">javax.jms.Queue</config-property>
   
<security-domain-and-application>RemoteJmsXA_server2_Realm</security-domain-and-application>
    <max-pool-size>100</max-pool-size>
 </tx-connection-factory>
	
to

   <tx-connection-factory>
      <jndi-name>RemoteJmsXA_server2</jndi-name>
      <xa-transaction/>
      <track-connection-by-tx/>
      <adapter-display-name>JMS Adapter</adapter-display-name>
      <config-property name="JmsProviderAdapterJNDI"
type="java.lang.String">java:/RemoteJMSProvider_server2</config-property>
      <config-property name="SessionDefaultType"
type="java.lang.String">javax.jms.Queue</config-property>
     
<security-domain-and-application>RemoteJmsXA_server2_Realm</security-domain-and-application>
      <max-pool-size>100</max-pool-size>
      <rar-name>activemq-ra-4.0.1.rar</rar-name>
     
<connection-definition>javax.jms.QueueConnectionFactory</connection-definition>
   </tx-connection-factory>

(this was changed based on the ActiveMQ sample)

Finally I changed the queue definitons from:

   <mbean code="org.jboss.mq.server.jmx.Queue"
        name="jboss.mq.destination:service=Queue,name=queue1">
        <depends
optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
    </mbean>	

to

   <mbean code="org.jboss.resource.deployment.AdminObject"
name="activemq.queue:name=queue1">
      <attribute name="JNDIName">queue/queue1</attribute>

      <depends
optional-attribute-name="RARName">jboss.jca:service=RARDeployment,name='activemq-ra-4.0.1.rar'</depends>
      <attribute name="Type">javax.jms.Queue</attribute>
      <attribute name="Properties">PhysicalName=queue.queue1</attribute>
   </mbean>
	
I fiddled around with some other configs too but it'll make my post too long
if I show all those...

I'm clearly missing a link somewhere because after all these changes I am
getting:

java.lang.ClassCastException
        at org.jboss.mq.SpyQueueReceiver.<init>(SpyQueueReceiver.java:42)
        at org.jboss.mq.SpySession.createReceiver(SpySession.java:689)

whenever I try to create a receiver (and I think its the same for creating a
sender too)

Thanks again...
-- 
View this message in context: http://www.nabble.com/Integrating-ActiveMQ-with-Jboss4-tf2014134.html#a5535547
Sent from the ActiveMQ - User forum at Nabble.com.


Re: Integrating ActiveMQ with Jboss4

Posted by James Strachan <ja...@gmail.com>.
I'd ignore the JBossMQ way to do it and just get the RAR to connect to
whatever ActiveMQ broker you wish using the brokerURL - then you're
all set. That URL is all you need to connect to local/remote brokers.

So start by just using the RAR for ActiveMQ
http://incubator.apache.org/activemq/jboss-integration.html

On 7/28/06, cosjav <co...@gmail.com> wrote:
>
> Hi,
>
> I am relatively new to JMS and have been looking to migrate our current
> JBossMQ implementation of JMS to ActiveMQ and at the same time move from
> using JBoss 3.2.3 to JBoss 4.0.4.
>
> Our product is deployed over two servers whereby MDBs deployed on server1
> will write to queues located on server2 which server2 will then read from.
> Server2 also writes to queues located on itself that server1 will read from.
> Finally server1 also has some local queues that it writes to and reads from
> (accessed by server1 only).
>
> This above-mentioned setup is working perfectly fine with the JBossMQ
> implementation of JMS and the only reason why we are migrating to ActiveMQ
> is because JBossMQ doesnt support indexing on message selectors (i.e. when a
> queue that has multiple receivers, which receive messages based on a msg
> selector, grows large with messages that dont match a particular receiver,
> performance degrades significantly).
>
> Now the question I'm asking is a newbie one in relation to MDBs reading from
> remote JMS queues. It was my understanding that to achieve this one would
> have to follow something similar to:
> http://wiki.jboss.org/wiki/Wiki.jsp?page=HowDoIConfigureAnMDBToTalkToARemoteQueue
> Which is pretty much identical to the way we have set up with JBossMQ. But
> when it comes to ActiveMQ I couldnt find any samples that show me how to do
> this (the ActiveMQ Jboss Integration Guide seems to take a different
> approach thats not for remote queue access). Does this mean there is another
> way to do it? (btw, I have also posted this on the ActiveMQ forums but
> wanted to get an idea from the ActiveMQ community as to how to achieve my
> migration goal)
>
> I will appreciate any guidance (even RTFM advice but with references
> please). Like what should I read first, and what comes next, etc... because
> at the moment there seems to be loads of information that I cant make much
> sense of in terms what links with what.
>
> Thanks,
> cosjav
>
> P.S the attempts I have made so far are shown below:
>
> I changed the server1 JMSProviderLoader (contained in a file named
> jms-providers-service.xml in deploy/jms) details from:
>
> <server>
>     <!--
>     JMS Providers to access server2 queues
>     -->
>     <mbean code="org.jboss.jms.jndi.JMSProviderLoader"
>
> name="jboss.mq:service=JMSProviderLoader,name=RemoteJBossMQProvider_server2">
>         <attribute name="ProviderName">RemoteJMSProvider_server2</attribute>
>         <attribute name="ProviderUrl">jnp://server2:1099</attribute>
>         <attribute
> name="ProviderAdapterClass">org.jboss.jms.jndi.JBossMQProvider</attribute>
>         <attribute
> name="QueueFactoryRef">UIL2XAConnectionFactory</attribute>
>         <attribute
> name="TopicFactoryRef">UIL2XAConnectionFactory</attribute>
>     </mbean>
>
> </server>
>
> to
>
> <server>
>     <!--
>     JMS Providers to access server2 queues
>     -->
>     <mbean code="org.jboss.jms.jndi.JMSProviderLoader"
>
> name="jboss.mq:service=JMSProviderLoader,name=RemoteActiveMQProvider_server2,server=server2">
>         <attribute name="ProviderName">RemoteJMSProvider_indium</attribute>
>         <attribute
> name="ProviderAdapterClass">org.jboss.jms.jndi.JNDIProviderAdapter</attribute>
>         <!--<attribute
> name="QueueFactoryRef">ConnectionFactory</attribute>-->
>         <attribute
> name="QueueFactoryRef">ActiveMQConnectionFactory</attribute>
>         <attribute
> name="TopicFactoryRef">ActiveMQConnectionFactory</attribute>
>         <attribute name="Properties">
>
> java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
>           java.naming.factory.url.pkgs=org.jnp.interfaces
>           java.naming.provider.url=server2:1099
>         </attribute>
>     </mbean>
> </server>
>
> (I think I have set the connection factory incorrectly above because I'm
> getting exceptions saying "javax.naming.NameNotFoundException:
> ActiveMQConnectionFactory")
>
> Then I changed jms-ds.xml (in deploy/jms) on server1 from:
>
>  <tx-connection-factory>
>     <jndi-name>RemoteJmsXA_server2</jndi-name>
>     <xa-transaction/>
>     <track-connection-by-tx>true</track-connection-by-tx>
>     <adapter-display-name>JMS Adapter</adapter-display-name>
>     <config-property name="JmsProviderAdapterJNDI"
> type="java.lang.String">java:/RemoteJMSProvider_server2</config-property>
>     <config-property name="SessionDefaultType"
> type="java.lang.String">javax.jms.Queue</config-property>
>
> <security-domain-and-application>RemoteJmsXA_server2_Realm</security-domain-and-application>
>     <max-pool-size>100</max-pool-size>
>  </tx-connection-factory>
>
> to
>
>    <tx-connection-factory>
>       <jndi-name>RemoteJmsXA_server2</jndi-name>
>       <xa-transaction/>
>       <track-connection-by-tx/>
>       <adapter-display-name>JMS Adapter</adapter-display-name>
>       <config-property name="JmsProviderAdapterJNDI"
> type="java.lang.String">java:/RemoteJMSProvider_server2</config-property>
>       <config-property name="SessionDefaultType"
> type="java.lang.String">javax.jms.Queue</config-property>
>
> <security-domain-and-application>RemoteJmsXA_server2_Realm</security-domain-and-application>
>       <max-pool-size>100</max-pool-size>
>       <rar-name>activemq-ra-4.0.1.rar</rar-name>
>
> <connection-definition>javax.jms.QueueConnectionFactory</connection-definition>
>    </tx-connection-factory>
>
> (this was changed based on the ActiveMQ sample)
>
> Finally I changed the queue definitons from:
>
>    <mbean code="org.jboss.mq.server.jmx.Queue"
>         name="jboss.mq.destination:service=Queue,name=queue1">
>         <depends
> optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
>     </mbean>
>
> to
>
>    <mbean code="org.jboss.resource.deployment.AdminObject"
> name="activemq.queue:name=queue1">
>       <attribute name="JNDIName">queue/queue1</attribute>
>
>       <depends
> optional-attribute-name="RARName">jboss.jca:service=RARDeployment,name='activemq-ra-4.0.1.rar'</depends>
>       <attribute name="Type">javax.jms.Queue</attribute>
>       <attribute name="Properties">PhysicalName=queue.queue1</attribute>
>    </mbean>
>
> I fiddled around with some other configs too but it'll make my post too long
> if I show all those...
>
> I'm clearly missing a link somewhere because after all these changes I am
> getting:
>
> java.lang.ClassCastException
>         at org.jboss.mq.SpyQueueReceiver.<init>(SpyQueueReceiver.java:42)
>         at org.jboss.mq.SpySession.createReceiver(SpySession.java:689)
>
> whenever I try to create a receiver (and I think its the same for creating a
> sender too)
>
> Thanks again...
> --
> View this message in context: http://www.nabble.com/Integrating-ActiveMQ-with-Jboss4-tf2014134.html#a5535547
> Sent from the ActiveMQ - User forum at Nabble.com.
>
>


-- 

James
-------
http://radio.weblogs.com/0112098/