java - 从 TomEE 中的另一个 Web 应用程序访问单例 EJB

标签 java singleton openejb apache-tomee

我在 Apache TomEE+ 上部署了 2 个网络应用程序。在第一个 webapp 中,我创建了一个单例 EJB 类,声明如下:

@Singleton
@Remote
@Startup
@Lock(READ)
public class SolverRegistryBean implements SolverRegistry
{
    // ...

从 openejb.log 我可以看到,单例可用:

2011-12-05 20:43:22,696 - INFO  - Jndi(name=SolverRegistryBeanRemote) --> Ejb(deployment-id=SolverRegistryBean)
2011-12-05 20:43:22,696 - INFO  - Jndi(name=global/localhost/SolverCore-1.0/SolverRegistryBean!grid.solver.SolverRegistry) --> Ejb(deployment-id=SolverRegistryBean)
2011-12-05 20:43:22,696 - INFO  - Jndi(name=global/localhost/SolverCore-1.0/SolverRegistryBean) --> Ejb(deployment-id=SolverRegistryBean)
2011-12-05 20:43:22,750 - INFO  - Started Ejb(deployment-id=SolverRegistryBean, ejb-name=SolverRegistryBean, container=My Singleton Container)

我想从我的其他应用程序访问那个单例 bean,所以我这样做:

Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,
    "org.apache.openejb.client.RemoteInitialContextFactory");
p.put("java.naming.provider.url", "http://127.0.0.1:8080/openejb/ejb");
try {
    ctx = new InitialContext(p);
    SolverRegistry reg = (SolverRegistry)ctx.lookup(
        "openejb:global/global/localhost/SolverCore-1.0/SolverRegistryBean");

但是我得到了 ClassCastException

java.lang.ClassCastException: $Proxy94 cannot be cast to grid.solver.SolverRegistry

我检查了这个 $Proxy94 类实现接口(interface):grid.solver.SolverRegistryorg.apache.openejb.core.ivm.IntraVmProxyorg。 apache.openejb.BeanContext$Removable

为什么这不起作用?

最佳答案

我已通过将查找行更改为:

解决了我的问题
SolverRegistry reg = (SolverRegistry)ctx.lookup("SolverRegistryBeanRemote");

仍然不知道什么是 openejb:global/global/localhost/SolverCore-1.0/SolverRegistryBean

关于java - 从 TomEE 中的另一个 Web 应用程序访问单例 EJB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8393627/

相关文章:

java - 使用 Open EJB 配置 JNDI 名称

java - Libgdx Scene2d : Event Listener on Table

ios - 单例类不使用 Swift 更新 UICollectionViewCell 中的数据

arrays - Swift - 创建类型为 `Array` 的自定义类

java - TreeSet 如何作为成员变量在 Enum Singleton 中处理

java - 如何正确配置嵌入式 OpenEJB 容器进行测试?

java - 记录线程内存泄漏

java - JPA 关系可能性

java - 使用 main_activity 中的 extends Activity 在 Actionbar 中添加 Logo

java - 如何在 Tomcat 5.5.x 中部署 EJB 3.1