如何通过远程接口代理访问有状态会话bean?

时间:2012-08-28 15:03:28

标签: java ejb ejb-3.0 openejb

我有一个测试用例,它使用OpenEjb的@LocalClient注释(嵌入式容器)并使用@EJB注释注入EJB:

@LocalClient
public class MyTestCase {

    @EJB
    private BoxDao boxDao;

    ...   

}

BoxDao是一个远程EJB接口。现在,为了测试,我需要访问BoxDao的实现BoxDaoBean的一些内部状态,它是一个有状态会话bean。我在BoxDaoBean中创建了一个受保护的方法,它暴露了所需的内部状态,但我发现在我的测试用例中还没有办法访问它,因为注入的BoxDao是一个远程地下代理(不能转换为BoxDaoBean)。 p>

有没有办法在测试用例中访问远程接口BoxDao后面的有状态会话bean?如果解决方案具体为OpenEjb则无关紧要。

更新:遗憾的是,我们无法使用EJB 3.1特定的解决方案,因为我们有几个EJB 3.0项目正在运行。使用Proxy.getInvocationHandler(boxDao),我可以通过StatefulEjbObjectHandler访问OpenEjb容器。是否可以通过这种方式访问​​有状态bean?

1 个答案:

答案 0 :(得分:1)

您可以尝试让BoxDaoBean公开@LocalBean界面。单个EJB可以显示来自@WebService@Local@Remote,JAX-RS等的几乎无限数量的视图。

只需更新你的bean:

@Stateful
@LocalBean
public class BoxDaoBean implements BoxDao {
   //...
}

然后在测试中添加另一个字段:

@LocalClient
public class MyTestCase {

    @EJB
    private BoxDao boxDao;

    @EJB
    private BoxDaoBean boxDaoBean;

    ...   

}