简单的EJB客户端或Junit不与IBM websphere一起使用

时间:2014-05-09 15:14:48

标签: exception ejb websphere jndi

我的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)

1 个答案:

答案 0 :(得分:0)

EJBContainer API只能从独立的JVM中使用,并且它只能用于在该进程中本地访问EJB(例如,用于单元测试),而不是服务器中的远程EJB。目前还不清楚Eclipse环境中的问题是什么,但您可以尝试设置trace system properties(例如,*=info的traceSpecification)以观察嵌入场景中的CNTR0167I消息

对于远程访问,您应该使用EJB thinclientapplication client container。无法在EJB瘦客户端中使用java:global名称。