Page Edited : OPENEJB<http://cwiki.apache.org/confluence/
display/OPENEJB>: JNDI
Names <http://cwiki.apache.org/confluence/display/OPENEJB/JNDI+Names>
JNDI Names <http://cwiki.apache.org/confluence/display/OPENEJB/JNDI
+Names>has been edited by David
Blevins <http://cwiki.apache.org/confluence/display/%7Edblevins>
(Jun 18,
2007).
(View changes)<http://cwiki.apache.org/confluence/pages/
diffpagesbyversion.action?
pageId=33329&originalVersion=1&revisedVersion=2>
Content:
What's My Bean's JNDI Name?
The short answer is:
- {deploymentId}/{interfaceClass.simpleName}
And typically, deploymentId will be your bean's ejb-name unless
you've
explicitly set it to something else via an openejb-jar.xml or set the
openejb.deploymentId.format<http://cwiki.apache.org/confluence/
display/OPENEJB/Deployment+ID>to something else.
So if you have a bean like such:
<session>
<ejb-name>Calculator</ejb-name>
<home>org.acme.CalculatorRemoteHome</home>
<remote>org.acme.CalculatorRemote</remote>
<local-home>org.acme.CalculatorLocalHome</local-home>
<local>org.acme.CalculatorLocal</local>
<ejb-class>org.acme.CalculatorImpl</ejb-class>
<business-local>org.acme.CalculatorBusinessLocal</business-
local>
<business-local>org.acme.CalculatorBusinessLocalTwo</
business-local>
<business-remote>org.acme.CalculatorBusinessRemote</business-
remote>
<business-remote>org.acme.CalculatorBusinessRemoteTwo</
business-remote>
</session>
The following names will be bound into JNDI and accessible via the
LocalInitialContextFactory<http://cwiki.apache.org/confluence/
pages/createpage.action?
spaceKey=OPENEJB&title=LocalInitialContextFactory&linkCreation=true&f
romPageId=33329>
:
- Calculator/CalculatorRemote
- Calculator/CalculatorLocal
- Calculator/CalculatorBusinessLocal
- Calculator/CalculatorBusinessLocalTwo
- Calculator/CalculatorBusinessRemote
- Calculator/CalculatorBusinessRemoteTwo
And these would be available via the
RemoteInitialContextFactory<http://cwiki.apache.org/confluence/
pages/createpage.action?
spaceKey=OPENEJB&title=RemoteInitialContextFactory&linkCreation=true&
fromPageId=33329>
- Calculator/CalculatorRemote
- Calculator/CalculatorBusinessRemote
- Calculator/CalculatorBusinessRemoteTwo
This is the same list minus any interfaces of a local nature as they
aren't accessible over a network.
Changing the JNDI name format
The JNDI name format can actually be changed. At current date this
can be
done on a server-wide basis, but in the future it will be
changeable on an
application and individual bean basis.
To set it for the server, there is a system property called *
openejb.jndiname.format* which understands the following variables:
- moduleId - typically the file name of the ear or of the ejb
jar if
it's not in an ear.
- ejbType - STATEFUL, STATELESS, BMP_ENTITY, CMP_ENTITY, or
MESSAGE_DRIVEN
- ejbClass - ((Class)ejbClass).getName()
- ejbClass.simpleName - ((Class)ejbClass).getSimpleName());
- ejbName - ejb-name as it is in the xml
- deploymentId - the bean's deployment Id
- interfaceType - EJB_OBJECT, EJB_LOCAL, BUSINESS_LOCAL, or
BUSINESS_REMOTE
- interfaceClass - ((Class)interfce).getName()
- interfaceClass.simpleName - ((Class)interfce).getSimpleName()
More variables will be added in the future, such as prettier
varieties of
ejbType and interfaceType. If there are any you'd like added, feel
free to
write the dev list.
With this you can create a layout for the ejbs in global jndi
namespace
how ever you like. A couple examples could be:
- {interfaceClass.simpleName}
- {ejbName}{interfaceClass.simpleName}
- ejb/{interfaceClass.simpleName}
- ejb/{interfaceClass}
- {deploymentId}-{interfaceType}
- app/{moduleId}/ejb/{ejbName}/{interfaceClass}
- {deploymentId}.{interfaceClass}
You are responsible for ensuring the names don't conflict. I.e. if
you
used something as simple as just "{interfaceClass.simpleName}" as
your
format it would only work as long as you didn't reuse the
interface for any
other beans in your app or any other app deployed in the server.
If you used
"{ejbName}{interfaceClass.simpleName}" you could reuse the
interface in
other beans but you'd have to guarantee that the ejbName is not
already used
by another bean in a different app.
The default of "{deploymentId}/{interfaceClass.simpleName}" is a
pretty
safe bet as deploymentId is guaranteed to be globally unique
across all apps
and beans, however the use of simpleName could cause conflicts if
the bean
had two interfaces like org.package1.Foo and org.package2.Foo. The
safest
bet, though not the default as we wanted something short, is to
use the
fully qualified name of the interface "{deploymentId}/
{interfaceClass}".
Powered by Atlassian Confluence<http://www.atlassian.com/
software/confluence/default.jsp?clicked=footer>(Version:
2.2.9 Build:#527 Sep 07, 2006) - Bug/feature request<http://
jira.atlassian.com/secure/BrowseProject.jspa?id=10470>
Unsubscribe or edit your notifications preferences<http://
cwiki.apache.org/confluence/users/viewnotifications.action>