JBoss 有以下两种绑定规则:
缺省绑定 缺省情况下,会话 Bean 的 JNDI 绑定名称是:
* local 接口:<ejbName>/local
* remote 接口:<ejbName>/remote
当 EJB 被部署到某个 ear 中后,缺省绑定名称中会以 ear 包的名称作为前缀。比如,ear 文件是 test.ear 时,EJB 的绑定名称是:
* local 接口:test/<ejbName>/local
* remote 接口:test/<ejbName>/remote
用户自定义的绑定
Jboss 中,用户可以通过 @LocalBinding 或 @RemoteBinding 为某个 EJB 自定义JNDI 绑定名称。注意:@LocalBinding 和 @RemoteBinding 是 JBoss 自提供的扩展注释,而非 EJB 3 规范的标准注释。建议不要使用!示例:
import org.jboss.annotation.ejb.LocalBinding;
import org.jboss.annotation.ejb.RemoteBinding;
@Stateless
@RemoteBinding (jndiBinding="aaa/Remote")
@LocalBinding (jndiBinding="mybean_Local")
public class MyBean implements .... { ... }
在Java EE 5 中仍然支持正规的XML 发布描述符,例如Java EE 标准规定的ejb-jar.xml 和服务器特定的描述符例如jboss.xml。而且,如果配置文件中的值和标注中的发生了冲突,则以配置文件中的内容为准,ejb-jar.xml 文件需要新建在src/META-INF/目录下,在此文件中,我们主要通过配置文件定义了一个EJB,其中的ejb-name 的取值对应@Stateless 标注中的name 属性,business-local 对应本地接口,business-remote 对应远程接口,ejb-class 对应作为EJB 发布的Bean 实现类,session-type 则对应了有状态或者无状态。代码清单如下:
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" version="3.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">
<enterprise-beans>
<session>
<ejb-name>MySessionBean</ejb-name>
<business-local>conftest.NewSessionLocal</business-local>
<business-remote>conftest.NewSessionRemote</business-remote>
<ejb-class>conftest.NewSessionBean</ejb-class>
<session-type>Stateless</session-type>
</session>
</enterprise-beans>
</ejb-jar>
jboss.xml 也位于同一目录下,注意这个文件名完全是JBoss 规定的,属于厂商特定的配置文件(换句话说别的服务器类似的文件名将会不一样),代码清单如下:
<?xml version="1.0" encoding="UTF-8"?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>MySessionBean</ejb-name>
<jndi-name>MySessionBeanTest</jndi-name>
<local-jndi-name>MySession_Local</local-jndi-name>
<!--
<remote-jndi-name>MySessionRemote</remote-jndi-name>-->
</session>
</enterprise-beans>
</jboss>