下面要重点说明一下
Jboss EJB JNDI 名称默认的命名规则
,命名规则如下:
1>
如果
EJB
打包进
后缀为
*.ear
的
J2EE
发布文件
,默认的
JNDI
路径名称是
访问本地接口:
EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local
访问远程接口:
EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote
例:
EJB HelloWorld
打包进名为
HelloWorld.ear
的
J2EE
应用,访问她远程接口的
JNDI
名是:
HelloWorld/HelloWorldBean/remote
2>
如果
EJB
应用
打包成后缀为
*.jar
的发布文件
,
默认的
JNDI
路径名称是
访问本地接口:
EJB-CLASS-NAME/local
访问远程接口:
EJB-CLASS-NAME/remote
例:
HelloWorld
应用打包成
HelloWorld.jar
文件,访问她远程接口的
JNDI
名称是:
HelloWorldBean/remote
注意:
EJB-CLASS-NAME
是不带包名的
,如
com.foshanshop.ejb3.impl.HelloWorldBean
只需取
HelloWorldBean
。
目前网上很多教材获取
JNDI
路径名的方式不适用在
jboss
下,如:
HelloWorld helloworld = (HelloWorld) ctx.lookup(HelloWorld.class.getName());
这种方式适用于
Sun Application Server
及
glassfish
自定义JNDI 命名
默认的
JNDI
命名规则上面已经介绍过,但有些情况下需要自定义名称。在
Jboss 中
要自定义
JNDI
名称,可以使用
@LocalBinding
和
@RemoteBinding
注释
关键代码(只需要在bean interface前加binding注释):
import org.jboss.annotation.ejb.RemoteBinding;
。。。
@Remote
@RemoteBinding (jndiBinding="testbinding/myAccount")
publicinterface
MyAccount
extends
Serializable {
publicint
Add(
int
a,
int
b);
publicint
getResult() ;
}
那么在client端调用上面的EJB的代码为:
InitialContext ctx = new InitialContext(props);
MyAccount
bean1 = (
MyAccount
) ctx.lookup("
testbinding/myAccount
");