如何查找类的对象

时间:2013-11-23 05:21:33

标签: java ejb jndi

有一个应用程序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应用程序开始这样做?

1 个答案:

答案 0 :(得分:1)

此示例适用于连接到XYZ bean,但您可以轻松地使用它来对ABC bean进行一些调整。无论如何,您可以通过以下方式查找xyzService

  1. 显式
  2. 通过@EJB annotation
  3. 通过ejb-ref
  4. <强>显式

    // 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