2011-05-13 98 views
4

我使用最新的Eclipse来开发Glassfish 3下的EJB 3.我在Eclipse中创建一个新的Glassfish服务器实例,编写一个简单的EJB,部署并成功。eclipse glassfish 3,客户端错误

现在我写了一个客户端,但它总是给我的错误是这样

java.lang.RuntimeException: Orb initialization erorr 
    at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:148) 
    at com.sun.enterprise.naming.impl.SerialContext.getORB(SerialContext.java:365) 
    at com.sun.enterprise.naming.impl.SerialContext.getProviderCacheKey(SerialContext.java:372) 
    at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:402) 
    at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:347) 
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:504) 
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455) 
    at javax.naming.InitialContext.lookup(InitialContext.java:392) 
    at com.client.Test.main(Test.java:22) 
Caused by: java.lang.NullPointerException 
    at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:120) 
    ... 8 more 
Exception in thread "main" javax.naming.NamingException: Lookup failed for 'helloRemote' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is java.lang.RuntimeException: Orb initialization erorr]] 
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518) 
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455) 
    at javax.naming.InitialContext.lookup(InitialContext.java:392) 
    at com.client.Test.main(Test.java:22) 
Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is java.lang.RuntimeException: Orb initialization erorr] 
    at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:352) 
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:504) 
    ... 3 more 
Caused by: java.lang.RuntimeException: Orb initialization erorr 
    at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:148) 
    at com.sun.enterprise.naming.impl.SerialContext.getORB(SerialContext.java:365) 
    at com.sun.enterprise.naming.impl.SerialContext.getProviderCacheKey(SerialContext.java:372) 
    at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:402) 
    at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:347) 
    ... 4 more 
Caused by: java.lang.NullPointerException 
    at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:120) 
    ... 8 more 

客户端的代码是这样

Properties props = new Properties(); 
     props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory"); 
     props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming"); 
     props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl"); 


     InitialContext ic = new InitialContext(props); 

     HelloRemote remote = (HelloRemote) ic.lookup("helloRemote"); 
     System.out.println(remote.echo("john")); 

你知道为什么吗?是不是在类路径中“com.sun.enterprise.naming.SerialInitContextFactory”?

的源代码是在这里 http://www.mediafire.com/file/278rc1tpip0rjku/EJBApp2.rar

我感谢你的帮助。

+0

其他人有可能很容易在http://forums.java.net/node/794493同样的问题,他们得到它的工作 – Wes 2011-05-13 20:53:08

+0

不适用于我的情况。同样的错误 – user595234 2011-05-13 22:29:52

+0

请参阅[EJB常见问题](http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html#StandaloneRemoteEJB)的第3步:您需要''CLASSPATH'中的'gf-client.jar'。 – 2013-04-18 15:55:06

回答

0

我看来,像你试图建立由未部署的服务器,其处理connnectionpool

4

从性能上看上的应用程序设置这必须是一个独立的客户端的连接。

请确保你的gf-client.jar包含在你的类路径中以使其工作。 (glassfish \ lib \ gf-client.jar)

您也不需要设置您设置的属性。要指定服务器或备用端口的非本地主机位置,但你可能会设置:

prop.setProperty("org.omg.CORBA.ORBInitialHost", "localhost"); 
prop.setProperty("org.omg.CORBA.ORBInitialPort", "3700"); 

您还可能要投奔“我如何从一个独立的Java客户端访问远程EJB组件?”在: http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html#StandaloneRemoteEJB

11

要解决此问题,您只需要在客户端的构建路径中添加外部jar“appserv-rt.jar”。

你可以找到它的文件夹... \ glassfishv3 \ GlassFish的\ lib中

或者创建拥有这个jar和所有依赖的包,将其添加在BP

这是我的代码

InitialContext ctx = new InitialContext(); 
HelloWorld helloWorldRemote = (HelloWorld) ctx.lookup("ejb/helloWorldBeanJndiName"); 
System.out.println(helloWorldRemote.sayHello()); 

没有jar文件,我得到了同样的错误,并在控制台中显示“Hello”。

+0

库appserv-rt.jar解决了我的“由...引发:java.lang。RuntimeException:Orb initialization erorr“问题。谢谢! – 2012-09-11 23:10:03

+0

这是关键!谢谢! – Gino 2012-09-25 01:23:41

-1

我有类似的错误:

java.lang.RuntimeException: Orb initialization erorr at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:180) 

这是由

java.lang.NullPointerException at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:152) 

我的解决办法是造成加包含GlassFishORBFactoryImpl.class实现了GlassFishORBHelper接口罐子。