【问题标题】:EJB JNDI lookup from GWT development mode into glassfish v3从 GWT 开发模式到 glassfish v3 的 EJB JNDI 查找
【发布时间】:2010-02-01 16:49:45
【问题描述】:

我正在尝试从 GWT 开发模式中执行 JNDI 查找。

我有一个本地 glassfishv3 运行我想要查找的 EJB。如果我将 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

嵌入的码头似乎在类路径中找不到类“SerialContextProvider”。

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

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

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

那么:是否有人能够从 GWT 开发模式到 glassfish v3 中执行 JNDI 查找?

【问题讨论】:

  • 此文档可能有用:docs.sun.com/app/docs/doc/820-7695/beanv?l=en&a=view。 Jetty 服务器似乎需要进行相当多的配置才能访问远程 GF 上的 bean。最可能的问题是您跳过了一个,或者配置了 GWT 应用程序,而不是服务器。

标签: java gwt glassfish ejb-3.0 jndi


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 不,这也不起作用 - 我得到了同样的错误。我什至尝试在 glassfish/modules 文件夹中添加所有 JAR - 查找仍然失败
    【解决方案3】:

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

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

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

    【讨论】:

    • SessionBeans 本身在 Glassfish 上运行,当我使用 Eclipse 进行开发时,我使用 GWT-Eclipse 插件。所以 GWT-Application 本身是在嵌入式码头中运行的。您建议在 glassfish 上运行应用程序本身并在没有服务器的情况下使用 devmode ......但是我每次更改源代码时都不需要重新部署 webapp 吗?
    • 好的,我可以使用 -noserver 设置开发模式。 Webapp 现在在 glassfish 服务器上运行,我仍然可以在 devmode 下调试它。但是我现在每次更改源代码时都必须重新部署应用程序,这几乎无法忍受,因为它会延长开发周期。有趣的是:使用这种方法会使 JNDI 查找过时,因为我可以使用依赖注入来获取 EJB...;)
    • 是的,你是对的,你需要重新部署。但是,如果它使用的是热部署,您不会注意到太多。对于 UI 更改,您不需要重新部署。您只需要构建一次,以便引导 js 文件可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 2015-01-25
    • 1970-01-01
    • 2018-09-18
    相关资源
    最近更新 更多