我的ejb部署在websphere中,我想从另一个网络服务器调用它,但是远程查找代码无效。所以我尝试了一个简单的客户端,看它是否有效,我已经设置了上下文属性,但仍然无法正常工作。我错过了什么吗?
我的节点位置是WMSPBLDJ00327Node03Cell \ WMSPBLDJ00327Node03 \ server1
以下jndi完全可以从websphere中部署的Web代码中运行.. ejb / WgePasEar / WgePasEjb.jar / EmplFacade#com.company.crw.wge.pas.ejb.cmn.empl.EmplFacadeHome 但不是来自客户。我尝试了不同的选项,如下面的代码所示。你能帮忙吗?
EJB启动日志
[5/8/14 16:31:33:487 CDT] 0000004b AbstractEJBRu I WSVR0037I:启动EJB jar:WgePasEjb.jar [5/8/14 16:31:34:101 CDT] 0000004b EJBContainerI I CNTR0167I:服务器正在绑定EmplFacade企业bean的com.company.crw.wge.pas.ejb.cmn.empl.EmplFacadeHome接口。 WgePasEar应用程序的WgePasEjb.jar模块。绑定位置是:ejb / WgePasEar / WgePasEjb.jar / EmplFacade#com.company.crw.wge.pas.ejb.cmn.empl.EmplFacadeHome [5/8/14 16:31:34:105 CDT] 0000004b EJBContainerI I CNTR0167I:服务器正在绑定EmplFacade企业bean的com.company.crw.wge.pas.ejb.cmn.empl.EmplFacadeHome接口。 WgePasEar应用程序的WgePasEjb.jar模块。绑定位置是:com.company.crw.wge.pas.ejb.cmn.empl.EmplFacadeHome [5/8/14 16:31:34:106 CDT] 0000004b AbstractEJBRu I CNTR0167I:服务器绑定了EmplFacade企业bean的com.company.crw.wge.pas.ejb.cmn.empl.EmplFacadeHome接口WgePasEar应用程序的WgePasEjb.jar模块。绑定位置是:java:global / WgePasEar / WgePasEjb / EmplFacade!com.company.crw.wge.pas.ejb.cmn.empl.EmplFacadeHome
import java.util.Properties;import javax.ejb.embeddable.EJBContainer;import javax.naming.Context;import org.junit.Test; public class TestJunit {
@Test
public void testContactBean() {
// Create the embeddable container
Properties env1 = new Properties();
env1.put(Context.INITIAL_CONTEXT_FACTORY,
"com.ibm.websphere.naming.WsnInitialContextFactory");
env1.put(Context.PROVIDER_URL, "iiop://localhost:9102");
env1.put("com.ibm.CORBA.Debug", "true");
env1.put("com.ibm.CORBA.CommTrace", "true");
env1.put("com.ibm.CORBA.Debug.Output", "client.log");
env1.put(
"com.ibm.SSL.ConfigURL",
"file:/C:/IBM/WebSphere/AppServer_1/profiles/AppSrv1/properties/ssl.client.props");
env1.put("com.ibm.CORBA.loginUserid", "admin");
env1.put("com.ibm.CORBA.loginPassword", "admin");
env1.put("com.ibm.CORBA.loginSource", "properties");
EJBContainer ec = EJBContainer.createEJBContainer(env1);
try {
Object ejbHome = null;
try {
ejbHome = ec
.getContext()
.lookup("java:global/WgePasEar/WgePasEjb.jar/EmplFacade#com.company.crw.wge.pas.ejb.cmn.scty.EmplFacadeHome");
System.out.println("******************" + ejbHome);
} catch (Exception e) {
e.printStackTrace();
}
try {
ejbHome = ec
.getContext()
.lookup("java:global/WgePasEar/WgePasEjb/EmplFacade!com.company.crw.wge.pas.ejb.cmn.empl.EmplFacadeHome");
System.out.println("******************" + ejbHome);
} catch (Exception e) {
e.printStackTrace();
}
Object contactBean = (Object) ec
.getContext()
.lookup("java:global/WgePasEar/WgePasEjb/EmplFacade!com.company.crw.wge.pas.ejb.cmn.empl.EmplFacadeHome");
System.out.println("******************" + contactBean);
} catch (Throwable t) {
t.printStackTrace();
} finally {
ec.close();
}
}}
所有这些都给我提供了例外名称
javax.naming.NameNotFoundException:名称WgePasEar在上下文中找不到" java:global"。 在com.ibm.ws.naming.ipbase.NameSpace.getParentCtxInternal(NameSpace.java:1969) 在com.ibm.ws.naming.ipbase.NameSpace.retrieveBinding(NameSpace.java:1376) 在com.ibm.ws.naming.ipbase.NameSpace.lookupInternal(NameSpace.java:1219) 在com.ibm.ws.naming.ipbase.NameSpace.lookup(NameSpace.java:1141) 在com.ibm.ws.naming.urlbase.UrlContextImpl.lookupExt(UrlContextImpl.java:1436) 在com.ibm.ws.naming.java.javaURLContextImpl.lookupExt(javaURLContextImpl.java:477) 在com.ibm.ws.naming.java.javaURLContextRoot.lookupExt(javaURLContextRoot.java:485) 在com.ibm.ws.naming.java.javaURLContextRoot.lookupExt(javaURLContextRoot.java:468) 在com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:370) 在TestJunit.testContactBean(TestJunit.java:34) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:88) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55) 在java.lang.reflect.Method.invoke(Method.java:613) 在org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:44) 在org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 在org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 在org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) 在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 在org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:193) 在org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:52) 在org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 在org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:42) 在org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:184) 在org.junit.runners.ParentRunner.run(ParentRunner.java:236) 在org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) 在org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) javax.naming.NameNotFoundException:名称WgePasEar在上下文中找不到" java:global"。 在com.ibm.ws.naming.ipbase.NameSpace.getParentCtxInternal(NameSpace.java:1969) 在com.ibm.ws.naming.ipbase.NameSpace.retrieveBinding(NameSpace.java:1376) 在com.ibm.ws.naming.ipbase.NameSpace.lookupInternal(NameSpace.java:1219) 在com.ibm.ws.naming.ipbase.NameSpace.lookup(NameSpace.java:1141) 在com.ibm.ws.naming.urlbase.UrlContextImpl.lookupExt(UrlContextImpl.java:1436) 在com.ibm.ws.naming.java.javaURLContextImpl.lookupExt(javaURLContextImpl.java:477) 在com.ibm.ws.naming.java.javaURLContextRoot.lookupExt(javaURLContextRoot.java:485) 在com.ibm.ws.naming.java.javaURLContextRoot.lookupExt(javaURLContextRoot.java:468) 在com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:370) 在TestJunit.testContactBean(TestJunit.java:42) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:88) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55) 在java.lang.reflect.Method.invoke(Method.java:613) 在org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:44) 在org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 在org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 在org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) 在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 在org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:193) 在org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:52) 在org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 在org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:42) 在org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:184) 在org.junit.runners.ParentRunner.run(ParentRunner.java:236) 在org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) 在org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) javax.naming.NameNotFoundException:名称WgePasEar在上下文中找不到" java:global"。 在com.ibm.ws.naming.ipbase.NameSpace.getParentCtxInternal(NameSpace.java:1969) 在com.ibm.ws.naming.ipbase.NameSpace.retrieveBinding(NameSpace.java:1376) 在com.ibm.ws.naming.ipbase.NameSpace.lookupInternal(NameSpace.java:1219) 在com.ibm.ws.naming.ipbase.NameSpace.lookup(NameSpace.java:1141) 在com.ibm.ws.naming.urlbase.UrlContextImpl.lookupExt(UrlContextImpl.java:1436) 在com.ibm.ws.naming.java.javaURLContextImpl.lookupExt(javaURLContextImpl.java:477) 在com.ibm.ws.naming.java.javaURLContextRoot.lookupExt(javaURLContextRoot.java:485) 在com.ibm.ws.naming.java.javaURLContextRoot.lookupExt(javaURLContextRoot.java:468) 在com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:370) 在TestJunit.testContactBean(TestJunit.java:50) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:88) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55) 在java.lang.reflect.Method.invoke(Method.java:613) 在org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:44) 在org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 在org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 在org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) 在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 在org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:193) 在org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:52) 在org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 在org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:42) 在org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:184) 在org.junit.runners.ParentRunner.run(ParentRunner.java:236) 在org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) 在org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
答案 0 :(得分:0)
EJBContainer API只能从独立的JVM中使用,并且它只能用于在该进程中本地访问EJB(例如,用于单元测试),而不是服务器中的远程EJB。目前还不清楚Eclipse环境中的问题是什么,但您可以尝试设置trace system properties(例如,*=info
的traceSpecification)以观察嵌入场景中的CNTR0167I
消息
对于远程访问,您应该使用EJB thinclient或application client container。无法在EJB瘦客户端中使用java:global
名称。