Доступ к одноэлементному EJB из другого веб-приложения в TomEE - PullRequest
2 голосов
/ 06 декабря 2011

У меня есть 2 веб-приложения, развернутые на Apache TomEE +.В первом веб-приложении я создал одноэлементный класс 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)

Из моего другогоПриложение Я хочу получить доступ к этому одноэлементному компоненту, поэтому я делаю:

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 реализует интерфейсы: grid.solver.SolverRegistry , org.apache.openejb.core.ivm.IntraVmProxy и org.apache.openejb.BeanContext $ Removable .

Почему этоне работает?

1 Ответ

2 голосов
/ 13 декабря 2011

Я решил мою проблему, изменив строку поиска на:

SolverRegistry reg = (SolverRegistry)ctx.lookup("SolverRegistryBeanRemote");

Все еще не знаю, что такое openejb: global / global / localhost / SolverCore-1.0 / SolverRegistryBean для.

...