[
http://jira.jboss.com/jira/browse/JBESB-1460?page=all ]
Kevin Conner closed JBESB-1460.
-------------------------------
Resolution: Done
This issue has now been fixed.
Part of the activation spec for the JMS provider allows you to specify a provider adapter,
this can be used to refer to a remote provider.
To configure this you need to define an MBean representing the provider adapter.
<mbean code="org.jboss.jms.jndi.JMSProviderLoader"
name="jboss.esb:service=JMSProviderLoader,name=RemoteJMSProvider,server=remote">
<attribute name="ProviderName">remoteProvider</attribute>
<attribute
name="ProviderAdapterClass">org.jboss.jms.jndi.JNDIProviderAdapter</attribute>
<!-- The queue connection factory -->
<attribute
name="QueueFactoryRef">XAConnectionFactory</attribute>
<!-- The topic factory -->
<attribute
name="TopicFactoryRef">XAConnectionFactory</attribute>
<!-- Connect to JNDI on the host "remote" port 1099 -->
<attribute name="Properties">
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jnp.interfaces
java.naming.provider.url=remote:1099
</attribute>
</mbean>
Then, in the definition of the jms-jca-provider you need to add a providerAdapterJNDI
attribute, e.g.
providerAdapterJNDI="java:/remoteProvider"
The JCA adapter will use the provider adapter from JNDI to create the JNDI context.
Fixed in revision 18397.
jms-jca-provider doesn't read from queues on different node
-----------------------------------------------------------
Key: JBESB-1460
URL:
http://jira.jboss.com/jira/browse/JBESB-1460
Project: JBoss ESB
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: Rosetta, Adapters
Affects Versions: 4.2.1
Environment: 2x RHEL5, SOA-P 4.2.0 beta 1, Oracle 10g
Reporter: Martin Vecera
Assigned To: Kevin Conner
Priority: Blocker
Fix For: 4.2.1 CP1
While I was trying ESB load balancing and failover I found out the following issue...
Scenario:
1. Two nodes (hostnames: jawa02, jawa04), sharing the same DB, different ServerPeerIDs
but no JMS clustering.
2. I generated a message backlog on jawa02 queue/A (10,000 messages).
3. See my simple service configuration:
<providers>
<jms-jca-provider name="JBossMessaging"
connection-factory="XAConnectionFactory"
jndi-URL="jnp://jawa02:1099"
jndi-context-factory="org.jnp.interfaces.NamingContextFactory"
jndi-pkg-prefix="org.jboss.naming:org.jnp.interfaces"
transacted="false">
<jms-bus busid="quickstartGwChannel">
<jms-message-filter dest-type="QUEUE" dest-name="queue/A"
/>
</jms-bus>
</jms-jca-provider>
<jms-jca-provider name="JBossMessaging"
connection-factory="XAConnectionFactory"
jndi-URL="jnp://jawa04:1099"
jndi-context-factory="org.jnp.interfaces.NamingContextFactory"
jndi-pkg-prefix="org.jboss.naming:org.jnp.interfaces"
transacted="false">
<jms-bus busid="quickstartEsbChannel">
<jms-message-filter dest-type="QUEUE" dest-name="queue/C"
/>
</jms-bus>
</jms-jca-provider>
</providers>
<services>
<service category="FirstServiceESB" name="SimpleListener"
description="Hello World">
<listeners>
<jms-listener name="ESB-Gateway"
busidref="quickstartGwChannel" maxThreads="4"
is-gateway="true" />
<jms-listener name="helloWorld"
busidref="quickstartEsbChannel" maxThreads="4" />
</listeners>
<actions mep="OneWay">
<action name="notificationAction"
class="org.jboss.soa.esb.actions.Notifier">
<property name="okMethod" value="notifyOK" />
<property name="notification-details">
<NotificationList type="OK">
<target class="NotifyConsole" />
</NotificationList>
</property>
</action>
</actions>
</service>
</services>
4. I deployed the described service to jawa04 and expected it to start processing the
messages from jawa02 queue/A but this didn't happen.
5. When I changed the GW provider from jms-jca-provider to jms-provider:
<jms-provider name="JBossMessaging"
connection-factory="XAConnectionFactory"
jndi-URL="jnp://jawa02:1099"
jndi-context-factory="org.jnp.interfaces.NamingContextFactory"
jndi-pkg-prefix="org.jboss.naming:org.jnp.interfaces">
It worked as expected.
Unfortunatelly jms-provider doesn't use ServiceInvoker and thus no load
balancing/failover is possible.
This makes the ESB failover impossible using JMS.
Solution:
1) make jms-jca-provider read the messages from different nodes in the way jms-provider
does it.
or 2) make jms-provider use ServiceInvoker
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira