I am trying to invoke remote ejb on each node of a cluster with nodes node1 & node2, but i am always getting node1. Deployed EJB & client code as EAR file in both nodes. Application is running on Wildfly 9 ApplicationServer. Invoked client code from node1.
EJB code:
@Remote
public interface SLSBRemote {
public void test();
}
@Stateless(mappedName="SLSBEJB")
public class SLSBEJB implements SLSBRemote {
@Override
public void test()
{
try {
String nodeName = System.getProperty("jboss.node.name");
if(nodeName == null) {
nodeName = InetAddress.getLocalHost().getHostName();
}
log.debug("nodename: "+nodeName);
} catch (Exception e) {
log.error("Error",e);
}
}
}
client code:
public class testEjb
{
//invoking this method from other class. Able to pass node address
public void testBean(List<String> nodes)
{
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
Context context;
for (String node : nodes) {
properties.put(Context.PROVIDER_URL,"http-remoting://" + node);
try {
context = new InitialContext(properties);
SLSBRemote slsbRemote=(SLSBRemote)context.lookup(getLookupName());
log.debug("node:"+node+"slsbejbobject:"+slsbRemote.hashCode());
slsbRemote.test();
} catch (NamingException e) {
log.error("Error ", e);
}
}
}
}
In the logs,
node: "node1", binddbejb object: 1276422461
node: "node2", binddbejb object: 1276422461
nodename: "node1_address"
nodename: "node1_address" (instead of node2_address)
Please suggest
In order to use a clustered EJB wild fly needs to be configured for clustering and as far as I have found:
import org.jboss.ejb3.annotation.Clustered; import javax.ejb.Stateful; @Stateful @Clustered public class MyStatefulBean { ... }
Examples are given from this page of the documentation, which describes what has to be done in detail. https://docs.jboss.org/author/display/WFLY8/EJB+Services
If you apply this configuration EJBs from all nodes of the cluster could serve the client.
However do note that a client should normally be completely unaware of the clustering. A clients needs to call the ejb and it should be up to the cluster to decide which instance serves the client.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With