Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #3212

Can you statically derive an EJB3 bean's portable JNDI name?

Path csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!aioe.org!news.stack.nl!.POSTED!ipv6.urchin.earth.li!twic
From Tom Anderson <twic@urchin.earth.li>
Newsgroups comp.lang.java.programmer
Subject Can you statically derive an EJB3 bean's portable JNDI name?
Date Fri, 22 Apr 2011 21:54:31 +0100
Organization Stack Usenet News Service
Lines 65
Message-ID <alpine.DEB.2.00.1104222100580.26373@urchin.earth.li> (permalink)
NNTP-Posting-Host ipv6.urchin.earth.li
Mime-Version 1.0
Content-Type TEXT/PLAIN; format=flowed; charset=US-ASCII
X-Trace mud.stack.nl 1303505671 56164 2001:ba8:0:1b4::6 (22 Apr 2011 20:54:31 GMT)
X-Complaints-To abuse@stack.nl
NNTP-Posting-Date Fri, 22 Apr 2011 20:54:31 +0000 (UTC)
User-Agent Alpine 2.00 (DEB 1167 2008-08-23)
Xref x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:3212

Show key headers only | View raw


Evening all,

I don't use EJB3, and am trying to learn more about it and play with it a 
bit. Things have definitely improved since i last did EJB to pay the 
bills.

Now, the normal way to get hold of a reference to an enterprise bean (FSVO 
'reference') is to use injection. Excellent. But sometimes (eg when coming 
from a non-bean object), we have to resort to JNDI. One of the things EJB3 
added was a portable JNDI syntax, so that beans will be bound to the same 
name in different app servers. Lovely. There is an informative but 
slightly incorrect description of this here:

http://download.oracle.com/javaee/6/tutorial/doc/gipjf.html#girgn

The incorrectnesses that i've noticed are its claims that (a) the module 
name is optional in a java:app name, and (b) the bean name and interface 
name are separated with a '/' (the spec says it's a '!').

Anyway, there's something i'd like to do (over the details of which i will 
draw a discreet veil) which i think requires me to write a function like:

public static <T> resolveBean(Class<T> beanClass)

I am prepared to assume that the bean being looked up was defined with 
annotations rather than through XML, and that it is in the same module (or 
rather, i am prepared to accept more complexity when it is not). I can 
write that function as:

public static <T> resolveBean(Class<T> beanClass) throws various exceptions {
 	String path = determineBeanPath(beanClass);
 	InitialContext ic = new InitialContext();
 	return beanClass.cast(ic.lookup(path));
}

Where i still need to write this:

public static String determineBeanPath(Class<T> beanClass)

I think i can do this. Am i right? Is there already a utility to do this 
somewhere?

To be specific, i think i can generate a URL that looks like this:

"java:module/" + beanName + "!" + interfaceName

beanName will be the 'name' attribute of the @Stateless, @Stateful, or 
@Singleton annotation, if there is one, or else the unqualified name of 
the class. interfaceName will be the fully-qualified name of a business 
interface, if there is one, or of the class if not (or the class is 
annotated @LocalBean). I can find the interfaces by looking for a @Remote 
or @Local annotation on the class and picking one of its values, or else 
searching its implemented (and inherited?) interfaces to find one itself 
annotated with @Remote or @Local.

All of this assumes that there is no mappedName in play. If bean class's 
@S* annotation declares one, i can either use it, try it and fail over to 
the portable name, ignore it, or abort the mission.

Have i gone bonkers? Does this sound plausible?

tom

-- 
Sorry. Went a bit Atari Teenage Riot there. -- Andrew

Back to comp.lang.java.programmer | Previous | Next | Find similar


Thread

Can you statically derive an EJB3 bean's portable JNDI name? Tom Anderson <twic@urchin.earth.li> - 2011-04-22 21:54 +0100

csiph-web