Accesso a Singleton EJB da un altro WebApp in Tomee
-
28-10-2019 - |
Domanda
Ho 2 WebApps distribuiti su Apache Tomee+. Nel primo WebApp ho creato una classe EJB Singleton dichiarata così:
@Singleton
@Remote
@Startup
@Lock(READ)
public class SolverRegistryBean implements SolverRegistry
{
// ...
Da OpenNejb.log posso vedere che il singleton è disponibile:
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)
Dalla mia altra app voglio accedere a quel bean singleton, quindi lo faccio:
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");
Ma poi ricevo ClasscastException
java.lang.ClassCastException: $Proxy94 cannot be cast to grid.solver.SolverRegistry
Ho verificato che questa classe $ proxy94 implementa le interfacce: Grid.solver.solverregistry, org.apache.openejb.core.ivm.intravMProxy e org.apache.openejb.BeanContext $ rimovibile.
Perché questo non funziona?
Soluzione
Ho risolto il mio problema cambiando la linea di ricerca in:
SolverRegistry reg = (SolverRegistry)ctx.lookup("SolverRegistryBeanRemote");
Ancora non so cosa sia OPENEJB: globale/globale/localhost/solvercore-1.0/solverregistrybean per.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow