On Jun 18, 2007, at 11:19 PM, Manu George wrote:

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

Yea, this is one of a few essential documents we need. We soooo need a user or two to complain loudly on the information they can't find :) Will be a big help. Truth be told, nearly all the documentation we have came from answers on the lists.

-David

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



Reply via email to