我正在尝试从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?
答案 0 :(得分:1)
我没有检查过,但我不确定Jetty是否会选取gf-client.jar
清单中引用的所有jar(请参阅GlassFish EJB FAQ或this previous answer有关详细信息)。所以,虽然我确信这个JAR在使用独立客户端时运行良好(因为我对此进行了测试),但我没有尝试使用嵌入式Jetty。
因此,请尝试手动添加以下JAR:glassfish-naming.jar
,internal-api.jar
,javax.ejb.jar
,hk2-core.jar
,auto-depends.jar
,glassfish-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服务器是最新的。