EJB lookup fails during startup but is fine when the call is made after the server is started.
HI All
I am using Jboss EAP 7.1. And i managed to deploy a stateless EJBbean successfully.
And i am also able to access the deploy EJB after the server is started successfully. using the below piece of code.
final Hashtable jndiProperties = new Hashtable();
jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
jndiProperties.put("jboss.naming.client.ejb.context", true);
Context context;
try {
context = new InitialContext(jndiProperties);
String appName = "";
if ("FlowControllerBean/remote".equalsIgnoreCase(jndiName)) {
appName = "";
} else {
appName = "upm-0.1";
}
final String distinctName = "";
String beanName = "";
final String viewClassName = FlowController.class.getName();
System.out.println(
"ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName);
if ("".equalsIgnoreCase(interfacename)) {
context = new InitialContext();
return context.lookup(jndiName);
} else {
beanName = jndiName.substring(0, jndiName.indexOf("/"));
return context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!"
+ interfacename);
}
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
But my real problem comes when i want to access the same EJB during server start up itself. One of my method inside a service bean calls this EJB Bean during server startup itself. But it fails with the message "EJBCLIENT000079: Unable to discover destination for request for EJB StatelessEJBLocator for "/ejb-remote-server/FlowControllerBean", view is interface com.hexaware.framework.flowcontroller.FlowController, affinity is None".
Before the lookup is executed the actual EJB beans are deployed. Please find below the logs from server before the lookup is made during start up.
14:36:25,971 INFO [org.jboss.weld.deployer] (MSC service thread 1-4) WFLYWELD0003: Processing weld deployment ejb-remote-server.jar
14:36:26,373 INFO [org.jboss.as.ejb3.deployment] (MSC service thread 1-4) WFLYEJB0473: JNDI bindings for session bean named 'FlowControllerBean' in deployment unit 'deployment "ejb-remote-server.jar"' are as follows:
java:global/ejb-remote-server/FlowControllerBean!com.hexaware.framework.flowcontroller.FlowController
java:app/ejb-remote-server/FlowControllerBean!com.hexaware.framework.flowcontroller.FlowController
java:module/FlowControllerBean!com.hexaware.framework.flowcontroller.FlowController
java:jboss/exported/ejb-remote-server/FlowControllerBean!com.hexaware.framework.flowcontroller.FlowController
java:global/ejb-remote-server/FlowControllerBean
java:app/ejb-remote-server/FlowControllerBean
java:module/FlowControllerBean
[org.apache.cxf.endpoint.ServerImpl] (MSC service thread 1-4) Setting the server's publish address to be http://localhost:8080/ejb-remote-server/EventManagerService
14:36:29,409 INFO [org.jboss.ws.cxf.deployment] (MSC service thread 1-4) JBWS024074: WSDL published to: file:/D:/Magesh/Softwares/Jboss-eap-7.1/standalone/data/wsdl/ejb-remote-server.jar/EventManagerServiceService.wsdl
14:36:29,643 INFO [org.jboss.as.webservices] (MSC service thread 1-4) WFLYWS0003: Starting service jboss.ws.endpoint."ejb-remote-server.jar".EventStatusService
14:36:29,650 INFO [org.jboss.as.webservices] (MSC service thread 1-2) WFLYWS0003: Starting service jboss.ws.endpoint."ejb-remote-server.jar".EventManagerService
14:36:30,197 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool -- 72) WFLYUT0021: Registered web context: '/ejb-remote-server' for server 'default-server'
But the same code works if i call it after the server is started completely.
Please help.
Below is how i have defined my EJBbean.
@Stateless(mappedName = "FlowController/remote")
@Remote
@Startup
public class FlowControllerBean implements FlowController
{
public TransferObject execute(TransferObject transferObject) throws ApplicationException {
Below is my property file which i have used for connecting from the client to my remote server.Both server and client are in same Jboss server instance in my local machine.
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port = 8080
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
~~~
Note: Look up is successful during startup or any other time. But when i try to call a method in the bean the error message is encountered. But same bean method call works after server startup
Regards
M Magesh Kumar