On Sep 23, 2008, at 12:25 AM, Łukasz Budnik wrote:

Hi David,

I followed your advice and read the actual JNDI name from
geronimo.log. It turned out to be simply RemoteServiceImpl + Remote.

But if we're still in JNDI names.

One of My SLSB uses JMS resources like this:

@Resource(name = "ODEBPELProcessInvocationOrderConnectionFactory")
private ConnectionFactory connectionFactory;
@Resource(name = "ODEBPELProcessInvocationOrderQueue")
private Queue queue;

All works fine, I can send messages to MDB.
The problem is that I want it to be more configurable, connection
factory and queue's names defined in XML or in database.

I injected context:

@Resource
private SessionContext ctx;

and tried to lookup my queue. From geronimo.log I can see:

09:11:42,468 INFO  [startup]
Jndi(name=NuntiusEJB.jar/ODEBPELProcessInvocationQueue) -->
Ejb(deployment-id=NuntiusEJB.jar/ODEBPELProcessInvocationQueue)

(only queue bound, no connection factory)

I commented out @Resource ConnectionFactory and Queue wrote and in SLSB:

Object queue = ctx.lookup("NuntiusEJB.jar/ ODEBPELProcessInvocationQueue");

result:

javax.naming.NotContextException - NuntiusEJB.jar/ ODEBPELProcessInvocationQueue

Then I wrote a simple code to traverse all context recursively:

Context c = new InitialContext();
ctx.listBindings("");

it's magic...

java:comp/env/java:/ger:/java:comp/jca:/org.xh.nuntius/ EnterpriseContainer/JCAManagedConnectionFactory/NuntiusDB2/ ODEBPELProcessInvocationOrderConnectionFactory

class: org.apache.geronimo.connector.outbound.ManagedConnectionFactoryWrapper

java:comp/env/java:/ger:/java:comp/jca:/org.xh.nuntius/ EnterpriseContainer/JCAManagedConnectionFactory/JCAAdminObject/ ODEBPELProcessInvocationOrderQueue

class: org.apache.geronimo.connector.AdminObjectWrapper

Only wrapper classes. No actual connection factory or queue.

I have no idea how these got here....  maybe some openejb magic.


My question: how to fetch JMS resources dynamically from InitialContext?

The java:comp/env context is only supposed to have the stuff you've explicitly put there before deployment via annotations or spec dd xml, so I doubt that is what you want. Instead I think you want to use the in-vm global jndi context explained here:

http://cwiki.apache.org/GMOxDOC21/jndi.html

thanks
david jencks



best regards
Łukasz

2008/9/23 David Jencks <[EMAIL PROTECTED]>:

On Sep 22, 2008, at 2:34 PM, Łukasz Budnik wrote:

Hi all,

I've been using Geronimo 2.0.2 some time ago and I was able to access
remote SLSB this way:


DataWeaver2EnterpriseModuleProxy.jar/ModuleProxyImpl/ org.xh.dataweaver.interfaces.ejb.ModuleProxy

now I'm using Geronimo 2.1 and I'm trying to access remote bean in the
same manner:

Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.RemoteInitialContextFactory");
env.put(Context.PROVIDER_URL, "ejbd://localhost:4201");
Context ctx = new InitialContext(env);

ctx.lookup("NuntiusEJB.jar/RemoteServiceImpl/"
              + RemoteService.class.getCanonicalName());

the result is:

javax.naming.NameNotFoundException:

/NuntiusEJB.jar/RemoteServiceImpl/ org.xh.nuntius.enterprise.frontend.RemoteService
does not exist in the system.  Check that the app was successfully
deployed.
      at
org.apache.openejb.client.JNDIContext.lookup(JNDIContext.java:239)
      at javax.naming.InitialContext.lookup(InitialContext.java:392)

Does anybody knows how it's done in G2.1? Or am i missing something very
stupid?

It's quite flexible and I don't remember the details.... but you can find
out what your ejbs were actually bound to by looking in the
var/log/geronimo.log where your app starts up.

thanks
david jencks



best regards
Łukasz



Reply via email to