如何在运行时动态查找EJB

时间:2016-02-19 15:28:02

标签: java java-ee jboss ejb-3.1

我有这个场景,我在一个jar文件中有我的EJB3 bean,成功部署到Jboss EAP-6.4。

然后我有另一个Web项目在REST POJO类中查找这些EJB。我现在可以使用@Inject@EJB从Web项目内部访问EJB,但我的用例是我不知道在运行时需要加载哪些bean并且列表不是静态的,所以我可能需要查找10个EJB或者没有查找特定请求等。

我知道我可以使用

InitialContext.lookup('ejb:/.....')

从Web项目中检索我的EJB bean,但有没有一种方法可以在没有往返的情况下检索它们(我相信),或者可能正在寻找的是一种更优雅的方式来做EJB外观 - 在运行时启动,就像静态类型@EJB@Inject版本一样。

非常感谢任何建议。

修改

在我的REST POJO类中,我不想对任何@Inject或@EJB注释进行硬编码,而是我希望当请求进入时我查找(缺少更好的单词)EJB将处理请求,所以所有的决定都是在运行时完成的,如下所示

@Path("/path")
public class TestService {

    @GET("/{id}")
    public String loadGetPath(@Param id int id){
        //at this point i want to dynamically resolve the EJB based on 
        //the value of id
    }
}

1 个答案:

答案 0 :(得分:0)

Whoopdicity博客:Developing a dynamic JEE service client with CDI 似乎有你想要的东西。最后声称你可以这样做:

public class MyServiceConsumer {

    @Inject @ServiceClient
    private MyBusinessService service;

    ... 
}

而不是

public class MyServiceConsumer {

    @EJB(lookup="...")
    private MyBusinessService service;

    ... 
}