Forums Register Login

jndi lookup, returns only local ejb in clustered environment

+Pie Number of slices to send: Send
hi
i have 3 nodes in a cluster, when i have the EJB in all 3 nodes (including the one with the webservice) and then clustering doesnt happen. all requests are routed to the ejb present in the same node as the webservice ???

node 1 - web service(wsr) & ejb
node 2 - ejb
node 3 - ejb

all requests sent to ejb in node1 itself, nothing sent to node 2 and 3

there shud be some configuration i shud add in jboss.xml or somewhere to forbid this??? i have around 6 services like this and it wud require lot of machines if webservice and ejb cant be deployed in the same node..

the 3 nodes are 10.1.30.57,10.1.30.61,10.1.30.62..

lookup code:

Hashtable _jndiProperties = new hashtable();
_jndiProperties.put( Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory" );

_jndiProperties.put( Context.PROVIDER_URL, "10.1.30.57:7070" );
_jndiProperties.put( Context.URL_PKG_PREFIXES,"org.jboss.naming rg.jnp.interfaces" );
Context context = new InitialContext( _jndiProperties );
Object objref = context.lookup( "UserObjectsEJB" );
NBUserObjectServiceHome userObjectHome = ( NBUserObjectServiceHome )PortableRemoteObject.narrow( objref, NBUserObjectServiceHome.class );
NBUserObjectServiceRemote userObjectRemoteInterface = userObjectHome.create();
_responseString = userObjectRemoteInterface.serviceRequest( userId_, requestString_ );

System.out.println ( "NBWUserObjectService.serviceRequestEJB() The Response is :: " + _responseString );

return _responseString;

jboss.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS//EN" "http://www.jboss.org/j2ee/dtd/jboss.dtd">

<enterprise-beans>

<ejb-name>UserObjectServiceEJB</ejb-name>
<jndi-name>UserObjectsEJB</jndi-name>
true

</enterprise-beans>
+Pie Number of slices to send: Send
I don't have JBoss experience but from the lookup code

_jndiProperties.put( Context.PROVIDER_URL, "10.1.30.57:7070" );

you are trying to do the lookup from a particular node rather than from the cluster. Check jboss doc for clusterwide lookup.

In case of WebLogic you can give multiple ip's in the PROVIDER_URL parameter and again lot of other factor decides the load balancing (eg:- server affinity).
+Pie Number of slices to send: Send
case 1:
node 1: webservive
node2 : ejb
node3 : ejb
when i send in a stream of requests (say 100) even though the context url is pointing to node 2 , the requests are clustered between node 2 and 3 and responses are recd from both nodes.

case 2:
node 1: webservive and ejb
node2 : ejb
node3 : ejb
in this case is where the problem arises.all requests ares sent to the ejb in node 1 itself..dunno why this is happening ???
+Pie Number of slices to send: Send
Do check the document for server affinity. Application server can decide to use the EJB's in node1 to avoid RMI calls and other performance issue. Though I am not sure if this is applicable to JBoss.
That feels good. Thanks. Here's a tiny ad:
a bit of art, as a gift, the permaculture playing cards
https://gardener-gift.com


reply
reply
This thread has been viewed 937 times.
Similar Threads
Hi, why am I getting this exception on console
problem in the stand alone client
Failed to resolve ejb-link
Assigning JNDI names
JBoss and Head First EJB
More...

All times above are in ranch (not your local) time.
The current ranch time is
Mar 28, 2024 17:16:16.