How to specify a different jndi-name than the default for an EJB in JBoss 4.2.2.GA?
Question
By default it seems the jndi name of a bean is based on the ear in which it is contained. An EJB named MyBean my-app.ear will have the name "my-app/MyBean/local".
How can I change that behavior declaratively? I want the jndi name to be "something-else/MyBean/local". It has to be declarative rather than with an annotation b/c I can't modify the source of MyBean.java; I only have the jar, which I am packaging into an ear for deployment.
Solution
You can provide this in jboss.xml
jndi-name element is what you want.
Example:
<jboss>
<enterprise-beans>
<service>
<ejb-class>org.jboss.ejb3.test.service.ServiceSix</ejb-class>
<local>org.jboss.ejb3.test.service.ServiceSixLocal</local>
<remote>org.jboss.ejb3.test.service.ServiceSixRemote</remote>
<management>org.jboss.ejb3.test.service.ServiceSixManagement</management>
<jndi-name>serviceSix/remote</jndi-name>
<local-jndi-name>serviceSix/local</local-jndi-name>
</service>
</enterprise-beans>
</jboss>
OTHER TIPS
I'm not au fait with EJB3 (it's too little too late as far as I'm concerned), but with EJB2 you can do this by modifyig the jboss.xml descriptor that goes inside the EJB JAR's META-INF. Specifically, you modify the element of the EJB definition.
If this doesn't apply to EJB3 (and I realise that EJB3 is descriptor-lite), my apologies, please don't down-vote me :)