我创建了一个简单的EJB 3.0应用程序,部署在JBOSS 7.1.1 final。
EJB 1:
接口
package com.example.server.local.bean;
import javax.ejb.Local;
@Local
public interface UtilLocalBeanLocal {
public String addString();
}
实现此接口的类:
package com.example.server.local.bean;
import javax.ejb.Local;
import javax.ejb.Stateless;
@Stateless
@Local(value=UtilLocalBeanLocal.class)
public class UtilLocalBean implements UtilLocalBeanLocal {
public UtilLocalBean() {
}
@Override
public String addString() {
return "Added from Local bean";
}
}
因此,我创建的这个EJB被另一个EJB“本地”使用。
EJB 2:
接口
package com.example.bean.session;
import javax.ejb.Remote;
@Remote
public interface FirstBeanRemote {
public String callMe();
}
实现此接口的类。
package com.example.bean.session;
import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import com.example.server.local.bean.UtilLocalBeanLocal;
@Stateless
@Remote(value=FirstBeanRemote.class)
public class FirstBean implements FirstBeanRemote {
@EJB
private UtilLocalBeanLocal utilLocalBeanLocal;
public FirstBean() {
}
@Override
public String callMe() {
return "Hi there!" + utilLocalBeanLocal.addString();
}
}
00:34:15,928 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-5) JNDI bindings for session bean named FirstBean in deployment unit subdeployment "EJB30TestProj.jar" of deployment "EJB30TestProjEAR.ear" are as follows:
java:global/EJB30TestProjEAR/EJB30TestProj/FirstBean!com.example.bean.session.FirstBeanRemote
java:app/EJB30TestProj/FirstBean!com.example.bean.session.FirstBeanRemote
java:module/FirstBean!com.example.bean.session.FirstBeanRemote
java:jboss/exported/EJB30TestProjEAR/EJB30TestProj/FirstBean!com.example.bean.session.FirstBeanRemote
java:global/EJB30TestProjEAR/EJB30TestProj/FirstBean
java:app/EJB30TestProj/FirstBean
java:module/FirstBean
ejb:EJB30TestProjEAR/EJB30TestProj//FirstBean!com.example.bean.session.FirstBeanRemote
很难理解这个JNDI绑定是如何工作的。 JBOSS输出一个不同的JNDI,实际上有效的是不同的。
任何人都可以请神秘化吗? (如何确定哪些JNDI绑定将在不同的场景和任何其他指针中起作用)
答案 0 :(得分:1)
您提到的绑定值是为本地查找准备的,比如说您发布ejb的服务器。 global,module,app 是范围限制,您可以在其中使用每个范围。例如,您可以使用 module 范围从同一ejb模块的其他ejb查找ejb,但您无法从另一个ejb模块查找它,即使是同一个应用程序的模块(耳朵或战争) ),您必须至少使用 app 范围,并且您可以在两种情况下使用 app 或 global 。
我强烈建议您花点时间阅读Jboss AS7 JNDI Referencia但要了解远程查询,请转到远程JNDI 部分