【问题标题】:Glassfish 2.1 EJB 3.0 Exposing local EJB to other applications running in the same domain/jvmGlassfish 2.1 EJB 3.0 将本地 EJB 暴露给在同一域/jvm 中运行的其他应用程序
【发布时间】:2012-11-10 19:29:11
【问题描述】:

我有一个需要配置不同的现有项目。这需要在没有重大代码更改的情况下发生。我实际上希望我只能通过配置以某种方式做到这一点。在过去的 2 到 3 天里,我一直在阅读我能找到的关于这个问题的所有内容。我了解 glassfish 类加载器,以及我可以使用什么。

我有一个当前示例项目,它有一个 EJB,它定义了一个 @Local 接口。 ejb 部署在 ejb-module 内,作为 glassfish 域中的 ejb-module。 现在,我正在尝试为另一个应用程序找到一种方法,该应用程序作为耳朵部署到同一域中,以便能够通过其本地接口访问该 EJB。

我已阅读文档说这是不可能的。 然后我在 StackOverflow 上看到了帖子,网上其他人说这是可能的。但是,我找不到实际的解决方案。

通过调查,我意识到@Local EJB 不会将自己注册到 jndi(至少根据日志),如果我使用 glassfish JNDI 浏览器,我也看不到它。所以这对我来说是有道理的,要么这是不可能的,要么是 EJB 项目的部署有问题,我需要以某种方式公开它。

@Remote 是一种可能性,如果它可以通过引用进行,并且没有性能开销。但是允许@Local EJB 访问的首选方法确实是最终需要。

有谁知道我需要做什么才能将@Local EJB 暴露给另一个应用程序? 或者这显然是不可能的?

我正在使用带有 EJB 3.0 的 Glassfish 2.1

如果 Glassfish 2.1 可以处理 EJB 3.1,如果它提供了这种能力,我愿意迁移到它,但我怀疑它是否那么容易。

请帮忙。 谢谢。

我正在添加赏金。要完成赏金,需要在同一个域中运行 2 个 ear 应用程序,其中 A.ear 包含一个 @Local EJB,B.ear 中的应用程序也使用该 EJB。

【问题讨论】:

标签: ejb-3.0 glassfish-2.x


【解决方案1】:

@Peter 给你的链接几乎可以解决你的问题。 (link)

解决@Xavier 的问题需要做的一个技巧是为两个耳朵提供相同版本的 common.jar(由相同的类加载器加载)。如果这样做,将不会抛出类转换异常,您将能够使用带有本地接口的ejb。

为此,您需要将 common.jar 放入 glassfish/domains/domain1/lib 文件夹(用您的域名替换 domain1)。这样,这个 jar 将由 Glassfish 的共享类加载器加载。

我用 Eclipse 和 Glassfish 3 做了一个快速测试,结构如下:

package com.example;

JarShared
 - @Local class Server

EarServer
 - EjbServer
    - @Stateless class ServerBean implements Server

EarClient
 - EjbClient
    - @Stateless @LocalBean class ClientBean

从 ClientBean 查找:

InitialContext ic = new InitialContext();
Server server = (Server) ic.
    lookup("java:global/EarServer/EjbServer/ServerBean!com.example.Server");

我没有得到 ClassCastException,我可以从 ServerBean 调用示例方法。

重要提示:

  • EarServer 和 EarClient 都不应在 lib 文件夹中包含 JarShared,它们应重用位于 domain lib 文件夹中的 JarShared
  • 记得在 Glassfish 添加 JarShared 后重新启动它。
  • 要编译两个 ejb 项目,您必须将 JarShared 添加到它们的构建路径中,但仅此而已

如果您有任何问题,请发表评论。

【讨论】:

  • 您好,非常感谢您的回复。我认为您在这里提到的关键是 domain/lib 文件夹。我认为以前,我试图使用 domain/lib/applibs 文件夹,但可以看到这将是一个问题。我今天将尝试这个解决方案,并报告/投票:-) 谢谢! :)
  • 我做了一些测试,并再次阅读了您的帖子 :) 我看到您使用 glassfish 3.1 :) 我想我在这里看到了 glassfish 3 增加对此的支持的趋势,我是在 glassfish 2.1 上追逐野鹅:/ 遗憾的是我无法更改为 glassfish 3。
  • 检查这个:glassfish.java.net/javaee5/ejb/… - 这些是关于 GF2 特定的 JNDI 名称的规则(我猜 GF3 也出于兼容性原因使用它们)
猜你喜欢
  • 1970-01-01
  • 2011-02-07
  • 2013-08-02
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多