gpt4 book ai didi

ejb-3.0 - Glassfish 2.1 EJB 3.0 将本地 EJB 暴露给在同一域/jvm 中运行的其他应用程序

转载 作者:行者123 更新时间:2023-12-04 12:22:59 28 4
gpt4 key购买 nike

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

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

最佳答案

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

解决@Xavier 的问题需要做的一个技巧是为两个耳朵提供相同版本的 common.jar(由相同的类加载器加载)。如果这样做,将不会抛出类转换异常,并且您将能够使用具有本地接口(interface)的 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
  • 记得添加 JarShared 后重新启动 Glassfish。
  • 要编译两个 ejb 项目,您必须将 JarShared 添加到它们的构建路径中,但仅此而已

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

    关于ejb-3.0 - Glassfish 2.1 EJB 3.0 将本地 EJB 暴露给在同一域/jvm 中运行的其他应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13512028/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com