Cool Feature. There was some confusion among users about the JNDI names.
Hopefully this document will clear the doubts.

Regards
Manu

On 6/19/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:

   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&fromPageId=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>


Reply via email to