Hi,
For test purposes, I've to get knowledge on JBoss Clustering, fail-over, 
replication...

I've been turning around the following issue for some days now,
reading JBoss Clustering (Edition 7), Wiki, forum and bug reports. I
just hope it's something stupid I cannot pinpoint.

Setting : JBoss 4.0.1 ; 2 Linux servers (Suse) in the Cluster.

Beans are :
- HelloMDB : basic message driven bean listening on 'queue/hello'
- HelloServletJMS : servlet to send messages to 'queue/hello'

Note :
- both servers are multihomed
- Oracle is the common Database used (runs on Server1) ( deployed using 
ConfigJBossMQDB wiki page )
- use of DefaultPartition with default ports.

Server2 is started prior to Server1 (thus Server2 is the HA-JNDI server.)

Inside HelloServletJMS's, the code to send the message to HelloMDB (all 
try/catch and close removed):   InitialContext context = new InitialContext();
  |   Queue queue = (Queue) context.lookup("queue/hello");
  |   QueueConnectionFactory queueFactory = (QueueConnectionFactory) 
context.lookup("XAConnectionFactory");
  |   QueueConnection queueConnection = queueFactory.createQueueConnection();
  |   QueueSession queueSession = queueConnection.createQueueSession(false, 
javax.jms.Session.AUTO_ACKNOWLEDGE);
  |   QueueSender queueSender = queueSession.createSender(queue);
  |   TextMessage message = queueSession.createTextMessage();
  |   message.setText(text);
  |   queueSender.send(message);

When doing an http request (from a third machine on another LAN) on 
HelloServletJMS :
on Server2 => OK : message treated by HelloMDB ( on Server1 or Server2 )
on Server1 => KO

Error on server1 is :javax.naming.NameNotFoundException: queue not bound
  |         at org.jnp.server.NamingServer.getBinding(NamingServer.java:491)
  |         at org.jnp.server.NamingServer.getBinding(NamingServer.java:499)
  |         at org.jnp.server.NamingServer.getObject(NamingServer.java:505)
  |         at org.jnp.server.NamingServer.lookup(NamingServer.java:249)
  |         at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:544)
  |         at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:520)
  |         at javax.naming.InitialContext.lookup(InitialContext.java:347)
  |         at hello.web.HelloServletJMS.doGet(HelloServletJMS.java:135)
  |         ...

META-INF/jboss.xml of the jar is ( message-driven part only ) :     
<message-driven>
  |       <ejb-name>HelloMDB</ejb-name>
  |       <destination-jndi-name>queue/hello</destination-jndi-name>
  |     </message-driven>
  | 

/opt/jboss/server/all/deploy/jms/hajndi-jms-ds.xml (JMS part) :   <mbean 
code="org.jboss.jms.jndi.JMSProviderLoader"
  |          name="jboss.mq:service=JMSProviderLoader,name=HAJNDIJMSProvider">
  |     <attribute name="ProviderName">DefaultJMSProvider</attribute>
  |     <attribute name="ProviderAdapterClass">
  |       org.jboss.jms.jndi.JNDIProviderAdapter
  |     </attribute>
  |     <!-- The combined connection factory -->
  |     <attribute name="FactoryRef">java:/XAConnectionFactory</attribute>
  |     <!-- The queue connection factory -->
  |     <attribute name="QueueFactoryRef">XAConnectionFactory</attribute>
  |     <!-- The topic factory -->
  |     <attribute name="TopicFactoryRef">XAConnectionFactory</attribute>
  |     <!-- Access JMS via HAJNDI -->
  |     <attribute name="Properties">
  |        java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
  |        java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
  |        java.naming.provider.url=[Local IP of Server2]:1100,[Local IP of 
Server1]:1100
  |     </attribute>
  |   </mbean>

JGroup uses UDP ; from /opt/jboss/server/all/deploy/cluster-service.xml :<UDP 
mcast_addr="228.1.2.3" mcast_port="45566"
  |              ip_ttl="32" ip_mcast="true"
  |              mcast_send_buf_size="800000" mcast_recv_buf_size="150000"
  |              ucast_send_buf_size="800000" ucast_recv_buf_size="150000"
  |              loopback="false" bind_addr="[LocalIP Due To Multi Homed 
Server]" />

Where local IP is correctly set to the ethernet card in use on the LAN.

Things verified :
- /etc/hosts : 
  "127.0.0.1 localhost" and local IPs are on 2 different lines.

- /etc/modules.conf (just in case since IPv6 is not used) :
  "alias net-pf-10           off"

- multicast route is fine :
  "netstat -nr | grep 224" gives the correct multicast route on both devices ( 
and on the correct ethernet card device )
224.0.0.0       0.0.0.0         240.0.0.0       U        40 0          0 eth0

- I do start with "-c all" and the --host=[LocalIP] options

I tried different combinations with  "jnp://..." and "localhost:1100" for  
java.naming.provider.url  ( even if loopbackIP:1100 was not opened )

I checked traffic on Server2:1100 . Port is used by Server1 at startup ( first 
in  java.naming.provider.url ), but no traffic afterward ( neither on the 
autodiscovery port 1102 ).

I checked traffic on 230.1.2.3 : ok (heartbeat packets go through)

I checked traffic on autodiscovery multicast ip 230.0.0.4 : ok (membership 
packets go through)

If Server1 becomes HA-JNDI server, lookup on 'queue/hello' from Server1 are ok, 
not lookup from Server2. (only difference in config files is the bind_addr due 
to multi-homed servers)

What did I miss here ?
If more src/config files are needed to solve this, i'll be more than happy to 
send them.

Regards,
Alex

View the original post : 
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3866232#3866232

Reply to the post : 
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3866232


-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
JBoss-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to