|
Ok, now i can have a jboss ejb bean to lookup and
work with a ejb bean deploy in other ejb server (in this case Ejipt). But i
can't figure out how to look it up from the client... I can see the problem, the
reference to the ejipt ejb bean is only available in jboss vm. What i hope for
is that someone knows how to get it over to the jboss client. Will
ExternalContext help me in anyway, or does it have the same
problem?
Why we are doing this? We are going from Ejipt to
JBoss, but until all ejb beans have been converted it would be nice to be able
to call the still unconverted ejb beans running in Ejipt during testing of the
converted beans running in JBoss.
What i have done:
1) I have an mbean, ECSProperties, which among
other things binds a reference to an Ejipt context. Code snippet:
public void
startService()
throws Exception { ... snip ... /* Bind a ctx
to Ejipt */
final Properties properties = new Properties(); Context context = null; properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.valto.ejipt.ContextFactory"); properties.setProperty(Context.PROVIDER_URL, "ejipt://" + getServer() + ":" + getPort()); properties.setProperty(Context.SECURITY_PRINCIPAL, getUser()); properties.setProperty(Context.SECURITY_CREDENTIALS, getPassword()); System.setProperty("ejipt.sessionScope", "vm"); try
{ context = new InitialContext(properties); }catch(Exception e) { log.error(e.getMessage()); log.exception(e); } try { NonSerializableWrapper.add(context); String className = "javax.naming.Context"; String factory = NonSerializableWrapper.class.getName(); Reference memoryRef = new Reference(className, factory, null); ctx.bind("ejipt", memoryRef); /* Test it
*/
_ejiptCtx = (Context)ctx.lookup("ejipt"); System.out.println("Found ctx:"+_ejiptCtx); }catch(NamingException e) { log.error("Failed to bind EjiptContext into JNDI"); log.exception(e); }catch(Exception e) { log.error(e.getMessage()); log.exception(e); } ... snip ...
}
public static class NonSerializableWrapper
implements ObjectFactory
{ private static Context _ctx; public static void add(Context
ctx)
{ System.out.println("adding:"+ctx); _ctx = ctx; } public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable env) { System.out.println("getObjectInstance, returning:"+_ctx); return _ctx; } } 2) Code in jboss ejb bean that works
ok:
Context ctx = new
InitialContext();
/* ejb bean bound in
ejipt with name
Ecs.Checkout.CheckoutRegisterHome
se.benefit.rita.checkout.CheckoutRegisterHome home = (se.benefit.rita.checkout.CheckoutRegisterHome)ctx.lookup("ejipt/Ecs.Checkout.CheckoutRegisterHome"); se.benefit.rita.checkout.CheckoutRegister remote; System.out.println("home:"+home); Collection c = home.findBySite(600,"129"); System.out.println(c.size()); Iterator it = c.iterator(); while(it.hasNext()) { remote = (se.benefit.rita.checkout.CheckoutRegister)it.next(); System.out.println("remote:"+remote.getDescription()); } 3) Code in jbocc client that do not
work:
InitialContext ctx =
new InitialContext();
Context ejiptCtx = (Context)ctx.lookup("ejipt/Ecs.Checkout.CheckoutRegisterHome"); clip from console:
getObjectInstance, returning:null
Exception in thread "main" javax.naming.NamingException: Could not dereference o bject. Root exception is java.lang.NullPointerException at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:345) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:282) at javax.naming.InitialContext.lookup(Unknown Source) at MainLogger.<init>(MainLogger.java:156) at MainLogger.main(MainLogger.java:351) |
- Re: [jBoss-User] JBoss ejb looking up ejb in other non-j... Lennart Petersson
- Re: [jBoss-User] JBoss ejb looking up ejb in other ... Scott M Stark
