guy*_*umu 7 ejb-3.0 glassfish-2.x
我有一个现有的项目,我需要配置不同的.这需要在不重大代码更改的情况下发生.我实际上希望我只能通过配置以某种方式做到这一点.过去2到3天我一直在阅读有关此问题的所有内容.我理解glassfish类加载器,以及我可以使用的内容.
我有一个当前的示例项目,它有一个定义@Local接口的EJB.ejb作为ejb模块部署在ejb模块内部,进入glassfish域.现在,我正在尝试为另一个应用程序找到一种方法,该应用程序作为一个耳朵部署到同一个域中,以便能够通过它的本地接口访问该EJB.
我已阅读文档说这是不可能的.然后我在StackOverflow看到了这里的帖子,网上的其他人说这是可能的.但是,我找不到实际的解决方案.
通过调查,我意识到@Local EJB没有将自己注册到jndi(至少根据日志),如果我使用glassfish JNDI浏览器,我也看不到它可见.因此,对我来说,无论是不可能,还是EJB项目的部署是错误的,我都需要公开它.
@Remote是一种可能性,如果它可以通过引用,并没有性能开销.但是允许@Local EJB访问的首选方法确实是最终的需求.
有谁知道我需要做什么才能将@Local EJB暴露给另一个应用程序?或者这显然不可能吗?
我正在使用Glassfish 2.1 With EJB 3.0
如果Glassfish 2.1可以处理EJB 3.1,如果它提供了这种能力,我愿意转向它,但我怀疑它是那么容易.
请协助.谢谢.
我正在加入一笔赏金.要完成赏金,需要在同一个域中运行2个ear应用程序,其中A.ear包含一个@Local EJB,该应用程序也在B.ear中使用.
链接@Peter几乎解决了你的问题.(链接)
解决@ 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
Run Code Online (Sandbox Code Playgroud)
从ClientBean查询:
InitialContext ic = new InitialContext();
Server server = (Server) ic.
lookup("java:global/EarServer/EjbServer/ServerBean!com.example.Server");
Run Code Online (Sandbox Code Playgroud)
我没有得到ClassCastException,我可以从ServerBean调用sample方法.
重要笔记:
如果您有任何疑问,请发表评论.
| 归档时间: |
|
| 查看次数: |
2058 次 |
| 最近记录: |