有一个应用程序ABC
依赖于ejb module 'XYZ'
,但两者都已部署和在不同的服务器上运行。
ABC
部署在JBoss AS& IP地址为192.108.1.1
XYZ
部署在JBOss As& IP地址是192.108.1.2
在XYZ ejb模块中,有一个xyzService类访问db并将数据填充到bean类中,请参阅下面的
@Stateless(mappedName = "ejb/xyzService")
@TransactionManagement(TransactionManagementType.BEAN)
public class XyzService extends XyzPersistenceService implements xyzRemote, xyzLocal {
public List<xyzBean> fetchDataFromDB (List<String> idList) throws Exception
{
List<xyzBean> detailList = null;
try {
// gets data from DB and populate into a bean class i.e. xyzBean
} catch (Exception e) {
new myExceptionClass("error", e);
}
return detailList;
}
}
//Bean class
public class xyzBean{
String Id;
String name;
// getter-setter here
}
现在我想要,
1.
查找XYZ模块服务类的对象
2.
调用方法
3.
获取bean类的列表
请您指导我如何做到这一点,而我有点困惑如何从我的ABC应用程序开始这样做?
答案 0 :(得分:1)
此示例适用于连接到XYZ bean,但您可以轻松地使用它来对ABC bean进行一些调整。无论如何,您可以通过以下方式查找xyzService
。
<强>显式强>
// Lookup the EJB from JNDI
InitialContext ctx = new InitialContext();
xyzRemote remoteobj = (xyzRemote)ctx.lookup("ejb/xyzService");
按注释
@EJB (mappedName="ejb/xyzService")
private xyzRemote remoteobj;
使用注释,容器通过DI注入远程EJB bean的实例。
通过ejb-ref
在您的客户端类中,添加以下代码。这只是一个
InitialContext ctx = new InitialContext();
xyzRemote remoteobj = (xyzRemote) ctx.lookup("java:comp/env/ejb/xyzService");
至于配置客户端的InitialContext,您需要一个jndi.properties
文件
### JBossNS properties
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://192.108.1.2:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces