EJB JNDI从GWT开发模式查找到glassfish v3

时间:2010-02-01 16:49:46

标签: java gwt glassfish ejb-3.0 jndi

我正在尝试从GWT devmode中执行JNDI查找。

我有一个运行我要查找的EJB的本地glassfishv3。如果我将GWT-Webapp部署到所述glassfish中,一切都按预期工作。但是如果我尝试从devmode中查找EJB,我会得到这个例外:

javax.naming.NamingException: Lookup failed for 'myBean' in SerialContext  [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext  [Root exception is java.lang.NullPointerException]] ... Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext  [Root exception is java.lang.NullPointerException]
        at com.sun.enterprise.naming.impl.SerialContext.getProvider (SerialContext.java:276)
        at com.sun.enterprise.naming.impl.SerialContext.lookup (SerialContext.java:430)
        ... 22 more Caused by: java.lang.NullPointerException
        at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider (SerialContext.java:297)
        at com.sun.enterprise.naming.impl.SerialContext.getProvider (SerialContext.java:271)
        ... 23 more

似乎嵌入式jetty在类路径中找不到类“SerialContextProvider”。

我尝试将gf-client.jar和glassfish-naming.jar添加到类路径中(除了在eclipse中将glassfish v3添加到目标运行时),但无济于事。

我甚至整理了一个包含简单EJB项目的小样本(在此处找到:http://satansoft.de/jnditest/jnditest.tgz)以及执行查找的GWT项目。 该归档文件还包含一个小型CLI客户端,在类路径中使用gf-client.jar运行时可以正常工作。

我也在官方gwt邮件列表上问了这个问题,但是那里没有人能够帮助我。

所以:有没有人能够从GWT devmode中执行JNDI查找到glassfish v3?

3 个答案:

答案 0 :(得分:1)

我没有检查过,但我不确定Jetty是否会选取gf-client.jar清单中引用的所有jar(请参阅GlassFish EJB FAQthis previous answer有关详细信息)。所以,虽然我确信这个JAR在使用独立客户端时运行良好(因为我对此进行了测试),但我没有尝试使用嵌入式Jetty。

因此,请尝试手动添加以下JAR:glassfish-naming.jarinternal-api.jarjavax.ejb.jarhk2-core.jarauto-depends.jarglassfish-api.jar

答案 1 :(得分:1)

将Glassfish模块目录中的所有jar添加到Eclipse GWT项目的war / WEB-INF / lib目录中。

答案 2 :(得分:0)

我不明白你的设置。您可以在Glassfish中运行,也可以在嵌入式Jetty中运行。如果你在Jetty中运行它将无法工作,因为你在错误的服务器上运行。

我也将会话bean和其他J2EE技术​​与GWT结合使用,效果非常好。

您唯一需要做的就是不要运行Jetty服务器。我用-noserver启动dev模式并在Glassfish上运行。如果你正确设置它,你可以使用DevMode,服务器代码在glassfish中正常运行。部署有点困难,因为您需要确保glassfish服务器是最新的。