javax.naming.NameNotFoundException:名称 [org.wso2.carbon.custom.ejb-1.0-SNAPSHOT/HelloBean] 未在此上下文中绑定。找不到 [ejb:]
javax.naming.NameNotFoundException:Name [org.wso2.carbon.custom.ejb-1.0-SNAPSHOT/HelloBean] is not bound in this Context. Unable to find [ejb:]
我正在尝试 运行 ejb Helloworld 程序和我的 JNDI[1] 但我遇到以下错误[2] 我 运行ning Jboss AS 7最终和 AS 输出列表 [3]。任何人都可以指导我我的错误是什么?
[1]
Properties prop = new Properties();
prop.setProperty("java.naming.factory.url.pkgs","org.jboss.ejb.client.naming");
return new InitialContext(prop);
[2]
javax.naming.NameNotFoundException: Name [org.wso2.carbon.custom.ejb-1.0-SNAPSHOT/HelloBean] is not bound in this Context. Unable to find [ejb:].
at org.apache.naming.NamingContext.lookup(NamingContext.java:819)
at org.apache.naming.NamingContext.lookup(NamingContext.java:167)
at org.wso2.carbon.context.internal.CarbonContextDataHolder$CarbonInitialJNDIContext.lookup(CarbonContextDataHolder.java:705)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at org.wso2.carbon.connector.EJBConnector.callEJB(EJBConnector.java:69)
at org.wso2.carbon.connector.EJBConnector.connect(EJBConnector.java:40)
at org.wso2.carbon.connector.core.AbstractConnector.mediate(AbstractConnector.java:32)
at org.apache.synapse.mediators.ext.ClassMediator.mediate(ClassMediator.java:78)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:81)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48)
at org.apache.synapse.mediators.template.TemplateMediator.mediate(TemplateMediator.java:97)
at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:129)
at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:78)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:81)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:149)
at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:185)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:317)
at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:149)
at org.apache.axis2.transport.base.threads.NativeWorkerPool.run(NativeWorkerPool.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
[3]
java:global/org.wso2.carbon.custom.ejb-1.0-SNAPSHOT/HelloBean!org.wso2.carbon.custom.ejb.HelloIF
java:app/org.wso2.carbon.custom.ejb-1.0-SNAPSHOT/HelloBean!org.wso2.carbon.custom.ejb.HelloIF
java:module/HelloBean!org.wso2.carbon.custom.ejb.HelloIF
java:jboss/exported/org.wso2.carbon.custom.ejb-1.0-SNAPSHOT/HelloBean!org.wso2.carbon.custom.ejb.HelloIF
java:global/org.wso2.carbon.custom.ejb-1.0-SNAPSHOT/HelloBean
java:app/org.wso2.carbon.custom.ejb-1.0-SNAPSHOT/HelloBean
java:module/HelloBean
您应该查找的 JNDI 地址是
java:app/org.wso2.carbon.custom.ejb-1.0-SNAPSHOT/HelloBean
java:app
specifies the app namespace,所以这假设您从 bean 所在的同一个应用程序访问这个 bean。
经过长时间的搜索,我解决了这个问题。这是因为 glassfish 中的 classloder 问题。所以添加了一个方法来解决类定位问题然后它的工作正常。
Thread currentThread = Thread.currentThread();
ClassLoader oldClassLoader = currentThread.getContextClassLoader();
try {
//switching the classloader to prevent class loading glassfish classloading issues
currentThread.setContextClassLoader(getClass().getClassLoader());
//method to run
callEJBStateful(messageContext);
} catch (Exception e) {
handleException("Error calling EJB Service from EJBConnector", e, messageContext);
} finally {
if (oldClassLoader != null) {
//resetting the classloader
currentThread.setContextClassLoader(oldClassLoader);
}
}
我正在尝试 运行 ejb Helloworld 程序和我的 JNDI[1] 但我遇到以下错误[2] 我 运行ning Jboss AS 7最终和 AS 输出列表 [3]。任何人都可以指导我我的错误是什么?
[1]
Properties prop = new Properties();
prop.setProperty("java.naming.factory.url.pkgs","org.jboss.ejb.client.naming");
return new InitialContext(prop);
[2]
javax.naming.NameNotFoundException: Name [org.wso2.carbon.custom.ejb-1.0-SNAPSHOT/HelloBean] is not bound in this Context. Unable to find [ejb:].
at org.apache.naming.NamingContext.lookup(NamingContext.java:819)
at org.apache.naming.NamingContext.lookup(NamingContext.java:167)
at org.wso2.carbon.context.internal.CarbonContextDataHolder$CarbonInitialJNDIContext.lookup(CarbonContextDataHolder.java:705)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at org.wso2.carbon.connector.EJBConnector.callEJB(EJBConnector.java:69)
at org.wso2.carbon.connector.EJBConnector.connect(EJBConnector.java:40)
at org.wso2.carbon.connector.core.AbstractConnector.mediate(AbstractConnector.java:32)
at org.apache.synapse.mediators.ext.ClassMediator.mediate(ClassMediator.java:78)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:81)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48)
at org.apache.synapse.mediators.template.TemplateMediator.mediate(TemplateMediator.java:97)
at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:129)
at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:78)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:81)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:149)
at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:185)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:317)
at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:149)
at org.apache.axis2.transport.base.threads.NativeWorkerPool.run(NativeWorkerPool.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
[3]
java:global/org.wso2.carbon.custom.ejb-1.0-SNAPSHOT/HelloBean!org.wso2.carbon.custom.ejb.HelloIF
java:app/org.wso2.carbon.custom.ejb-1.0-SNAPSHOT/HelloBean!org.wso2.carbon.custom.ejb.HelloIF
java:module/HelloBean!org.wso2.carbon.custom.ejb.HelloIF
java:jboss/exported/org.wso2.carbon.custom.ejb-1.0-SNAPSHOT/HelloBean!org.wso2.carbon.custom.ejb.HelloIF
java:global/org.wso2.carbon.custom.ejb-1.0-SNAPSHOT/HelloBean
java:app/org.wso2.carbon.custom.ejb-1.0-SNAPSHOT/HelloBean
java:module/HelloBean
您应该查找的 JNDI 地址是
java:app/org.wso2.carbon.custom.ejb-1.0-SNAPSHOT/HelloBean
java:app
specifies the app namespace,所以这假设您从 bean 所在的同一个应用程序访问这个 bean。
经过长时间的搜索,我解决了这个问题。这是因为 glassfish 中的 classloder 问题。所以添加了一个方法来解决类定位问题然后它的工作正常。
Thread currentThread = Thread.currentThread();
ClassLoader oldClassLoader = currentThread.getContextClassLoader();
try {
//switching the classloader to prevent class loading glassfish classloading issues
currentThread.setContextClassLoader(getClass().getClassLoader());
//method to run
callEJBStateful(messageContext);
} catch (Exception e) {
handleException("Error calling EJB Service from EJBConnector", e, messageContext);
} finally {
if (oldClassLoader != null) {
//resetting the classloader
currentThread.setContextClassLoader(oldClassLoader);
}
}