<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">

<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>

                                <td>

                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="http://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
                                                                </td>

                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px;  -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
    Re: Remote JMS server and XA transaction
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="http://community.jboss.org/people/Thunder.Farmer">Thunder Lei</a> in <i>JBoss Messaging</i> - <a href="http://community.jboss.org/message/623078#623078">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>oooh, I have to say sorry for confusing.</p><p>We can do that.</p><p>To so that, simply you just need to,</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>In jms-ds.xml</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>1. define a External jndi Context, which is NOT necessary, just to simply your code, with this external jndi context, you don't need to have local jndi context and remote jndi context if you need to look up ojbects accross servers.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p> &lt;mbean code="org.jboss.naming.ExternalContext" name="jboss.jndi:service=ExternalContext,jndiName=remote"&gt;</p><p>&#160;&#160;&#160;&#160; &lt;attribute name="JndiName"&gt;remote&lt;/attribute&gt;</p><p>&#160;&#160;&#160;&#160; &lt;attribute name="Properties"&gt;</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; java.naming.factory.url.pkgs=org.jnp.interfaces</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;jnp.partitionName=jms_remote</p><p>&#160;&#160;&#160;&#160; &lt;!-- java.naming.provider.url=jnp://serverB:1099 --&gt;</p><p>&#160;&#160;&#160;&#160; &lt;/attribute&gt;</p><p>&#160; &lt;/mbean&gt;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>2. using external jndi, define a remote JMS Provider pointing the remote server, in abouve case, server B.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>&#160;&#160; &lt;mbean code="org.jboss.jms.jndi.JMSProviderLoader"</p><p>&#160;&#160;&#160;&#160;&#160; name="jboss.mq:service=JMSProviderLoader,name=RemoteJMSProvider,server=remotehost"&gt;</p><p>&#160;&#160;&#160; &lt;attribute name="ProviderName"&gt;RemoteJMSProvider&lt;/attribute&gt;</p><p>&#160;&#160;&#160; &lt;attribute name="ProviderAdapterClass"&gt;org.jboss.jms.jndi.JNDIProviderAdapter&lt;/attribute&gt;</p><p>&#160;&#160;&#160; &lt;attribute name="FactoryRef"&gt;remote/ClusteredXAConnectionFactory&lt;/attribute&gt;</p><p>&#160;&#160;&#160; &lt;attribute name="QueueFactoryRef"&gt;remote/ClusteredXAConnectionFactory&lt;/attribute&gt;</p><p>&#160;&#160;&#160; &lt;attribute name="TopicFactoryRef"&gt;remote/ClusteredXAConnectionFactory&lt;/attribute&gt;</p><p>&#160;&#160;&#160; &lt;depends&gt;jboss.jndi:service=ExternalContext,jndiName=remote&lt;/depends&gt;</p><p>&#160; &lt;/mbean&gt;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>3. define a connection factory using the JMS Privider, and apply the jms JCA adapter to the connection factory.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><table><tbody><tr><td style=";">&lt;tx-connection-factory&gt;</td></tr></tbody></table><p>&#160;&#160;&#160; &lt;jndi-name&gt;RemoteJmsXA&lt;/jndi-name&gt;</p><p>&#160;&#160;&#160; &lt;xa-transaction/&gt;</p><p>&#160;&#160;&#160; &lt;rar-name&gt;jms-ra.rar&lt;/rar-name&gt;</p><p>&#160;&#160;&#160; &lt;connection-definition&gt;org.jboss.resource.adapter.jms.JmsConnectionFactory&lt;/connection-definition&gt;</p><p>&#160;&#160;&#160; &lt;adapter-display-name&gt;JMS Adapter&lt;/adapter-display-name&gt;</p><p>&#160;&#160;&#160; &lt;config-property name="JmsProviderAdapterJNDI" type="java.lang.String"&gt;java:/RemoteJMSProvider&lt;/config-property&gt;</p><p>&#160;&#160;&#160; &lt;config-property name="SessionDefaultType" type="java.lang.String"&gt;javax.jms.Topic&lt;/config-property&gt; </p><p> &lt;/tx-connection-factory&gt;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>4. In the EJB code like,</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Context ctx = getInitialContext();</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ConnectionFactory cf = (ConnectionFactory)ctx.lookup("java:/RemoteJmsXA");</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Destination remoteQueue = (Destination)ctx.lookup("remote/javax.jms.RemoteQueue");</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;connection = cf.createConnection();</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sessionProducer = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;producer = sessionProducer.createProducer(remoteQueue);</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ObjectMessage om = sessionProducer.createObjectMessage("StringObjectMessage");</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;producer.send(om);</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.out.println("============Message Sent========================");</p><p>&#160;&#160;&#160;&#160; // some db update</p><p>&#160;&#160; Thread.currentThread().sleep(1000 * 15); // verify xa tx</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>OK, enjoy your remote JMS xa tx......</p></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Reply to this message by <a href="http://community.jboss.org/message/623078#623078">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in JBoss Messaging at <a href="http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2042">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


                </td>
            </tr>
        </tbody>
    </table>

</div>

</body>
</html>