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