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>
