Hi there,

I searched the forums, the wiki and the web and found no solution, so I post my 
question.

Configuration: JBoss: 4.0.3SP1, OS: Redhat Enterprise (AMD64), single machine, 
one JBoss installation. The cluster has two nodes (represented by two servers), 
bound to different IP-addresses via -b parameter.

Both servers have the HANaming, HAJNDI and HASingleton service installed and 
contain both a deploy-hasingleton directory holding our JMS-Deployments 
(Destinations) which was taken from the ALL-configuration and modified. 

The aim: We are using HAJMS Topics to send replication messages to all cluster 
members.

Configuration steps (same on both nodes):

deploy/jms/hajndi-jms-ds.xml:
  | <connection-factories>
  |  
  |   <!-- ==================================================================== 
-->
  |   <!-- JMS Stuff                                                            
-->
  |   <!-- ==================================================================== 
-->
  | 
  |   <!-- The JMS provider loader -->
  |   <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">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=${jboss.bind.address}:1100
  |        jnp.disableDiscovery=false
  |        jnp.partitionName=${jboss.partition.name:StagePartition}
  |        jnp.discoveryGroup=${jboss.partition.udpGroup:230.0.0.4}
  |        jnp.discoveryPort=1102
  |        jnp.discoveryTTL=16
  |        jnp.discoveryTimeout=5000
  |        jnp.maxRetries=1
  |     </attribute>
  |   </mbean>
  | 
  |   <!-- The server session pool for Message Driven Beans -->
  |   <mbean code="org.jboss.jms.asf.ServerSessionPoolLoader"
  |      name="jboss.mq:service=ServerSessionPoolMBean,name=StdJMSPool">
  |     <depends 
optional-attribute-name="XidFactory">jboss:service=XidFactory</depends>
  |     <attribute name="PoolName">StdJMSPool</attribute>
  |     <attribute name="PoolFactoryClass">
  |       org.jboss.jms.asf.StdServerSessionPoolFactory
  |     </attribute>
  |   </mbean>
  | 
  |   <!-- JMS XA Resource adapter, use this to get transacted JMS in beans -->
  |   <tx-connection-factory>
  |     <jndi-name>JmsXA</jndi-name>
  |     <xa-transaction/>
  |     <rar-name>jms-ra.rar</rar-name>
  |     
<connection-definition>org.jboss.resource.adapter.jms.JmsConnectionFactory</connection-definition>
  |     <config-property name="SessionDefaultType" 
type="java.lang.String">javax.jms.Topic</config-property>
  |     <config-property name="JmsProviderAdapterJNDI" 
type="java.lang.String">java:/DefaultJMSProvider</config-property>
  |     <max-pool-size>20</max-pool-size>
  |     
<security-domain-and-application>JmsXARealm</security-domain-and-application>
  |   </tx-connection-factory>
  | 
  | </connection-factories>
  | 
deploy/cluster-service.xml:
  | <server>
  | 
  |    <!-- 
==================================================================== -->
  |    <!-- Cluster Partition: defines cluster                                  
 -->
  |    <!-- 
==================================================================== -->
  | 
  |    <mbean code="org.jboss.ha.framework.server.ClusterPartition"
  |       name="jboss:service=${jboss.partition.name:StagePartition}">
  |          
  |       <!-- Name of the partition being built -->
  |       <attribute 
name="PartitionName">${jboss.partition.name:StagePartition}</attribute>
  | 
  |       <!-- The address used to determine the node name -->
  |       <attribute name="NodeAddress">${jboss.bind.address}</attribute>
  | 
  |       <!-- Determine if deadlock detection is enabled -->
  |       <attribute name="DeadlockDetection">False</attribute>
  |      
  |       <!-- Max time (in ms) to wait for state transfer to complete. 
Increase for large states -->
  |       <attribute name="StateTransferTimeout">30000</attribute>
  | 
  |       <!-- The JGroups protocol configuration -->
  |       <attribute name="PartitionConfig">
  |          <!--
  |          The default UDP stack:
  |          - If you have a multihomed machine, set the UDP protocol's 
bind_addr attribute to the
  |          appropriate NIC IP address, e.g bind_addr="192.168.0.2".
  |          - On Windows machines, because of the media sense feature being 
broken with multicast
  |          (even after disabling media sense) set the UDP protocol's loopback 
attribute to true
  |          -->
  |          <Config>
  |             <UDP mcast_addr="${jboss.partition.udpGroup:230.0.0.4}" 
bind_addr="${jboss.bind.address}" mcast_port="45566"
  |                ip_ttl="8" 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"/>
  |             <PING timeout="2000" num_initial_members="3"
  |                up_thread="true" down_thread="true"/>
  |             <MERGE2 min_interval="10000" max_interval="20000"/>
  |             <FD shun="true" up_thread="true" down_thread="true"
  |                timeout="2500" max_tries="5"/>
  |             <VERIFY_SUSPECT timeout="3000" num_msgs="3"
  |                up_thread="true" down_thread="true"/>
  |             <pbcast.NAKACK gc_lag="50" 
retransmit_timeout="300,600,1200,2400,4800"
  |                max_xmit_size="8192"
  |                up_thread="true" down_thread="true"/>
  |             <UNICAST timeout="300,600,1200,2400,4800" window_size="100" 
min_threshold="10"
  |                down_thread="true"/>
  |             <pbcast.STABLE desired_avg_gossip="20000"
  |                up_thread="true" down_thread="true"/>
  |             <FRAG frag_size="8192"
  |                down_thread="true" up_thread="true"/>
  |             <pbcast.GMS join_timeout="5000" join_retry_timeout="2000"
  |                shun="true" print_local_addr="true"/>
  |             <pbcast.STATE_TRANSFER up_thread="true" down_thread="true"/>
  |          </Config>
  | 
  |       </attribute>
  |       <depends>jboss:service=Naming</depends>
  |    </mbean>
  | 
  |    <!-- 
==================================================================== -->
  |    <!-- HA Session State Service for SFSB                                   
 -->
  |    <!-- 
==================================================================== -->
  | 
  |    <mbean code="org.jboss.ha.hasessionstate.server.HASessionStateService"
  |       name="jboss:service=HASessionState">
  |       <!-- Name of the partition to which the service is linked -->
  |       <attribute 
name="PartitionName">${jboss.partition.name:StagePartition}</attribute>
  |       <!-- JNDI name under which the service is bound -->
  |       <attribute name="JndiName">/HASessionState/Default</attribute>
  |       <!-- Max delay before cleaning unreclaimed state.
  |            Defaults to 30*60*1000 => 30 minutes -->
  |       <attribute name="BeanCleaningDelay">0</attribute>
  |       <depends>jboss:service=Naming</depends>
  |       
<depends>jboss:service=${jboss.partition.name:StagePartition}</depends>
  |    </mbean>
  | 
  |    <!-- 
==================================================================== -->
  |    <!-- HA JNDI                                                             
 -->
  |    <!-- 
==================================================================== -->
  | 
  |    <mbean code="org.jboss.ha.jndi.HANamingService"
  |       name="jboss:service=HAJNDI">
  |       
<depends>jboss:service=${jboss.partition.name:StagePartition}</depends>
  |       <!-- Name of the partition to which the service is linked -->
  |       <attribute 
name="PartitionName">${jboss.partition.name:StagePartition}</attribute>
  |       <!-- Bind address of bootstrap and HA-JNDI RMI endpoints -->
  |       <attribute name="BindAddress">${jboss.bind.address}</attribute>
  |       <!-- Port on which the HA-JNDI stub is made available -->
  |       <attribute name="Port">1100</attribute>
  |       <!-- RmiPort to be used by the HA-JNDI service once bound. 0 => auto. 
-->
  |       <attribute name="RmiPort">1101</attribute>
  |       <!-- Accept backlog of the bootstrap socket -->
  |       <attribute name="Backlog">50</attribute>
  |       <!-- The thread pool service used to control the bootstrap and
  |       auto discovery lookups -->
  |       <depends optional-attribute-name="LookupPool"
  |          proxy-type="attribute">jboss.system:service=ThreadPool</depends>
  | 
  |       <!-- A flag to disable the auto discovery via multicast -->
  |       <attribute name="DiscoveryDisabled">false</attribute>
  |       <!-- Set the auto-discovery bootstrap multicast bind address. If not 
  |       specified and a BindAddress is specified, the BindAddress will be 
used. -->
  |       <attribute 
name="AutoDiscoveryBindAddress">${jboss.bind.address}</attribute>
  |       <!-- Multicast Address and group port used for auto-discovery -->
  |       <attribute 
name="AutoDiscoveryAddress">${jboss.partition.udpGroup:230.0.0.4}</attribute>
  |       <attribute name="AutoDiscoveryGroup">1102</attribute>
  |       <!-- The TTL (time-to-live) for autodiscovery IP multicast packets -->
  |       <attribute name="AutoDiscoveryTTL">16</attribute>
  | 
  |       <!-- Client socket factory to be used for client-server
  |            RMI invocations during JNDI queries
  |       <attribute name="ClientSocketFactory">custom</attribute>
  |       -->
  |       <!-- Server socket factory to be used for client-server
  |            RMI invocations during JNDI queries
  |       <attribute name="ServerSocketFactory">custom</attribute>
  |       -->
  |    </mbean>
  | 
  |    <mbean code="org.jboss.invocation.jrmp.server.JRMPInvokerHA"
  |       name="jboss:service=invoker,type=jrmpha">
  |       <attribute name="ServerAddress">${jboss.bind.address}</attribute>
  |       <attribute name="RMIObjectPort">4447</attribute>
  |       <!--
  |       <attribute name="RMIClientSocketFactory">custom</attribute>
  |       <attribute name="RMIServerSocketFactory">custom</attribute>
  |       -->
  |       <depends>jboss:service=Naming</depends>
  |    </mbean>
  | 
  |    <!-- the JRMPInvokerHA creates a thread per request.  This 
implementation uses a pool of threads -->
  |    <mbean code="org.jboss.invocation.pooled.server.PooledInvokerHA"
  |       name="jboss:service=invoker,type=pooledha">
  |       <attribute name="NumAcceptThreads">1</attribute>
  |       <attribute name="MaxPoolSize">300</attribute>
  |       <attribute name="ClientMaxPoolSize">300</attribute>
  |       <attribute name="SocketTimeout">60000</attribute>
  |       <attribute name="ServerBindAddress">${jboss.bind.address}</attribute>
  |       <attribute name="ServerBindPort">4446</attribute>
  |       <attribute 
name="ClientConnectAddress">${jboss.bind.address}</attribute>
  |       <attribute name="ClientConnectPort">0</attribute>
  |       <attribute name="EnableTcpNoDelay">false</attribute>
  |       <depends 
optional-attribute-name="TransactionManagerService">jboss:service=TransactionManager</depends>
  |       <depends>jboss:service=Naming</depends>
  |    </mbean>
  | 
  |    <!-- 
==================================================================== -->
  | 
  |    <!-- 
==================================================================== -->
  |    <!-- Distributed cache invalidation                                      
 -->
  |    <!-- 
==================================================================== -->
  | 
  |    <mbean 
code="org.jboss.cache.invalidation.bridges.JGCacheInvalidationBridge"
  |       name="jboss.cache:service=InvalidationBridge,type=JavaGroups">
  |       <attribute 
name="InvalidationManager">jboss.cache:service=InvalidationManager</attribute>
  |       <attribute 
name="PartitionName">${jboss.partition.name:StagePartition}</attribute>
  |       <attribute name="BridgeName">DefaultJGBridge</attribute>
  |       
<depends>jboss:service=${jboss.partition.name:StagePartition}</depends>
  |       <depends>jboss.cache:service=InvalidationManager</depends>
  |    </mbean>
  | 
deploy/deploy-hasingleton-service.xml:
  | <server>
  | 
  |    <mbean code="org.jboss.ha.singleton.HASingletonController" 
  |           name="jboss.ha:service=HASingletonDeployer">
  |       
<depends>jboss:service=${jboss.partition.name:StagePartition}</depends>   
  |       <depends 
optional-attribute-name="TargetName">jboss.system:service=MainDeployer</depends>
  |       <attribute 
name="PartitionName">${jboss.partition.name:StagePartition}</attribute>
  |       <attribute name="TargetStartMethod">deploy</attribute>
  |       <attribute 
name="TargetStartMethodArgument">${jboss.server.home.url}/deploy-hasingleton</attribute>
  |       <attribute name="TargetStopMethod">undeploy</attribute>
  |       <attribute 
name="TargetStopMethodArgument">${jboss.server.home.url}/deploy-hasingleton</attribute>
  |    </mbean>
  | </server>
  | 
The Problem: When starting one node, everything seems fine, the 
ConnectionFactories get bound and the Global Namespace can be used to look up 
Topics and ConnectionFactories. However, when running a second node, the Global 
Namespace does not get replicated.

The log says(Node 1):
  | 23:02:15,071 INFO  [StagePartition] Initializing
  | 23:02:17,121 INFO  [StagePartition] Number of cluster members: 1
  | 23:02:17,121 INFO  [StagePartition] Other members: 0
  | 23:02:17,121 INFO  [StagePartition] Fetching state (will wait for 30000 
milliseconds):
  | 23:02:17,123 INFO  [StagePartition] New cluster view for partition 
StagePartition (id: 0, delta: 0) : [192.168.100.211:1099]
  | 23:02:17,128 INFO  [StagePartition] I am (192.168.100.211:1099) received 
membershipChanged event:
  | 23:02:17,128 INFO  [StagePartition] Dead members: 0 ([])
  | 23:02:17,128 INFO  [StagePartition] New Members : 0 ([])
  | 23:02:17,128 INFO  [StagePartition] All Members : 1 ([192.168.100.211:1099])
  | 23:02:17,157 INFO  [HANamingService] Started ha-jndi bootstrap 
jnpPort=1100, backlog=50, bindAddress=/192.168.100.211
  | 23:02:17,163 INFO  [DetachedHANamingService$AutomaticDiscovery] Listening 
on /192.168.100.211:1102, group=230.0.0.4, HA-JNDI address=192.168.100.211:1100
  | 
The log says(Node 2):
  | 22:33:20,340 INFO  [StagePartition] Initializing
  | 22:33:22,417 INFO  [StagePartition] Number of cluster members: 2
  | 22:33:22,417 INFO  [StagePartition] Other members: 1
  | 22:33:22,417 INFO  [StagePartition] Fetching state (will wait for 30000 
milliseconds):
  | 22:33:22,417 INFO  [StagePartition] New cluster view for partition 
StagePartition: 1 ([192.168.100.211:1099, 192.168.100.212:1099] delta: 0)
  | 22:33:22,420 INFO  [StagePartition] I am (null) received membershipChanged 
event:
  | 22:33:22,420 INFO  [StagePartition] Dead members: 0 ([])
  | 22:33:22,420 INFO  [StagePartition] New Members : 0 ([])
  | 22:33:22,421 INFO  [StagePartition] All Members : 2 ([192.168.100.211:1099, 
192.168.100.212:1099])
  | 22:33:22,518 INFO  [HANamingService] Started ha-jndi bootstrap 
jnpPort=1100, backlog=50, bindAddress=/192.168.100.212
  | 22:33:22,524 INFO  [DetachedHANamingService$AutomaticDiscovery] Listening 
on /192.168.100.212:1102, group=230.0.0.4, HA-JNDI address=192.168.100.212:1100
  | 

But only the node started first can obtain ConnectionFactories or Topics. The 
other node always says:
  | javax.naming.NameNotFoundException: XAConnectionFactory not bound
  |         at org.jnp.server.NamingServer.getBinding(NamingServer.java:514)
  |         at org.jnp.server.NamingServer.getBinding(NamingServer.java:522)
  |         at org.jnp.server.NamingServer.getObject(NamingServer.java:528)
  |         at org.jnp.server.NamingServer.lookup(NamingServer.java:281)
  |         at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:610)
  |         at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:572)
  |         at javax.naming.InitialContext.lookup(InitialContext.java:351)
  | 
No matter if we use port 1099 or the Global Namespace at port 1100, or wether 
we use "ConnectionFactory" as lookup name. Also the "Global Namespace" listed 
by the JNDIView-MBean does not contain anything from the deploy-hasingleton 
directory on the second node.

I'm quite sure it's a HAJNDI-Problem, because we only run into trouble when 
trying to get things from HAJNDI, our ejb3-MDBs seem to have no problem to 
resolve their Topics (configured via Annotations),.

I have no idea what else to try, the config seems fine to me.

Any help would be appriciated.

Thanks in advance,
Martin

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

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


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
JBoss-user mailing list
JBoss-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to