Question

J'ai 2 webapps déployés sur Apache Tomee +. Dans le premier WebApp, j'ai créé une classe EJB Singleton déclarée comme ceci:

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

De OpenEjb.log, je peux voir que le singleton est disponible:

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)

De mon autre application, je veux accéder à ce haricot Singleton, donc je le fais:

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");

Mais ensuite je reçois classcastException

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

J'ai vérifié que cette classe $ proxy94 implémente les interfaces: grid.solver.solverRegistry, org.apache.openejb.core.ivm.intravmproxy et org.apache.openejb.beancontext $ amovible.

Pourquoi cela ne fonctionne pas?

Était-ce utile?

La solution

J'ai résolu mon problème en changeant la ligne de recherche en:

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

Je ne sais toujours pas ce que c'est OpenEJB: Global / Global / LocalHost / Solvercore-1.0 / SolverRegistryBean pour.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top