Unable to invoke EJB from the same deployment
sreenathac Aug 19, 2015 11:46 AMI am migrating my application from AS 5.1.0GA to WildFly 8.2.0. In my application we are loadinig the initial data at application level using seam @Create
The below is my application bean.
package com.project.action;
import static org.jboss.seam.ScopeType.APPLICATION;
import java.util.Date;
import java.util.List;
import org.apache.log4j.Logger;
import org.jboss.seam.annotations.Create;
import org.jboss.seam.annotations.Destroy;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Startup;
@Name("applicationScopeData")
@Scope(APPLICATION)
@Startup
public class ApplicationScopeData {
private static final Logger logger = Logger
.getLogger(ApplicationScopeData.class);
@Create
public void loadInitialEntities() {
ProjectAppData.loadInitialEntities();
}
@Destroy
public void destroy() {
}
}
In ProjectAppData the method loadInitialEntities() is defined as follows
public static void loadInitialEntities() {
List<UserDetail> resultList=null;
logger.info("loadLanguageAllList");
final InitialContext initialContext = new InitialContext();
final AppDataProvider bean = (AppDataProvider) initialContext
.lookup("java:app/project-ejb/AppDataProviderBean");
resultList=bean.loadAllList();
}
My AppDataProvider is looks like below
package com.project.session;
@Local
public interface AppDataProvider {
public List<UserDetail> loadAllList();
}
The implementation bean is as follows.
@Stateless
@JndiName(value = "java:app/project-ejb/AppDataProviderBean")
@Name("AppDataProviderBean")
public class AppDataProviderBean implements AppDataProvider {
public static Logger logger = Logger
.getLogger(AppDataProviderBean.class);
@PersistenceContext(unitName = "project")
private EntityManager entityManager;
@SuppressWarnings("unchecked")
public List<UserDetail> loadAllList() {
final String query = "select o from UserDetail o order by o.userName";
final List<UserDetail> results = entityManager.createQuery(query)
.getResultList();
return results;
}
}
While deploy my application the @Create annotated method is calling and while invoking the EJB using the initial context I am getting the Exception.
final InitialContext initialContext = new InitialContext();
final AppDataProvider bean = (AppDataProvider) initialContext
.lookup("java:app/project-ejb/AppDataProvider");
resultList=bean.loadAllList();
It is not throwing any exception while calling lookup method, when calling loadAllList from the above block we are getting the below Exception(Verified using debug pointers).
18:56:04,987 WARN [org.jboss.seam.security.permission.PersistentPermissionResolver] (MSC service thread 1-1) no permission store available - please install a PermissionStore with the name 'org.jboss.seam.security.jpaPermissionStore' if persistent permissions are required.
18:56:08,279 INFO [com.project.action.ProjectAppData] (MSC service thread 1-1) loading application scope data from database
18:56:19,529 INFO [com.project.action.ProjectAppData] (MSC service thread 1-1) loadLanguages
18:56:22,802 INFO [com.project.action.ProjectAppData] (MSC service thread 1-1) loadLanguageAllList
18:56:33,192 INFO [org.jboss.ejb.client] (MSC service thread 1-1) JBoss EJB Client version 2.0.1.Final
18:56:40,385 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC000001: Failed to start service jboss.undertow.deployment.default-server.default-host./project: org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./project: Failed to start service
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_75]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_75]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_75]
Caused by: java.lang.RuntimeException: org.jboss.seam.InstantiationException: Could not instantiate Seam component: applicationScopeData
at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:222)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:87)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.start(UndertowDeploymentService.java:72)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
... 3 more
Caused by: org.jboss.seam.InstantiationException: Could not instantiate Seam component: applicationScopeData
at org.jboss.seam.Component.newInstance(Component.java:2208)
at org.jboss.seam.contexts.Contexts.startup(Contexts.java:343)
at org.jboss.seam.contexts.Contexts.startup(Contexts.java:317)
at org.jboss.seam.contexts.ServletLifecycle.endInitialization(ServletLifecycle.java:143)
at org.jboss.seam.init.Initialization.init(Initialization.java:813)
at org.jboss.seam.servlet.SeamListener.contextInitialized(SeamListener.java:36)
at com.project.session.ProjectSessionListener.contextInitialized(ProjectSessionListener.java:58)
at io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:173)
at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:193)
... 7 more
Caused by: java.lang.IllegalStateException: EJBCLIENT000025: No EJB receiver available for handling [appName:project-ear, moduleName:project-ejb, distinctName:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@25e53248
at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:749)
at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:116)
at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186)
at org.jboss.ejb.client.EJBInvocationHandler.sendRequestWithPossibleRetries(EJBInvocationHandler.java:253)
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:198)
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:181)
at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:144)
at com.sun.proxy.$Proxy225.loadLanguageAllList(Unknown Source)
at com.project.action.ProjectAppData.loadAllList(ProjectAppData.java:728)
at com.project.action.ProjectAppData.loadInitialEntities(ProjectAppData.java:165)
at com.project.action.ApplicationScopeData.loadInitialEntities(ApplicationScopeData.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_75]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_75]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_75]
at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_75]
at org.jboss.seam.util.Reflections.invoke(Reflections.java:22)
at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:32)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56)
at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:28)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
at org.jboss.seam.bpm.BusinessProcessInterceptor.aroundInvoke(BusinessProcessInterceptor.java:51)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107)
at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:196)
at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:114)
at com.project.action.ApplicationScopeData$$_javassist_seam_1.loadInitialEntities(ApplicationScopeData$$_javassist_seam_1.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_75]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_75]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_75]
at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_75]
at org.jboss.seam.util.Reflections.invoke(Reflections.java:22)
at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:144)
at org.jboss.seam.Component.callComponentMethod(Component.java:2313)
at org.jboss.seam.Component.callCreateMethod(Component.java:2236)
at org.jboss.seam.Component.newInstance(Component.java:2196)
... 15 more
I tried the above using a small PoC and it was working fine in PoC, the only difference is in PoC I am invoking after starting the server and in the Project we are invoking the EJB while deploying.
I am using hibernate 3.6.3.
I tried maximum feasible ways, is there any extra configuration I am missing while migrating my application from Jboss 5.1.0 to WildFly 8.2.0.
Here my question is if my EJB is not available then it should throw the exception when executing
final AppDataProvider bean = (AppDataProvider) initialContext
.lookup("java:app/project-ejb/AppDataProvider");
It is not throwing the exception while executing the above line which means my EJB is available to lookup(I tried with wrong pattern and it was throwing the exception in that case).
I am getting the exception while executing resultList=bean.loadAllList(), which means my EJB is not available to call the loadAllList().
Please let me know if I am missing anything.