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

@LocalClient
public class MyTestCase {

    @EJB
    private BoxDao boxDao;

    ...

}


BoxDao是一个远程EJB接口。现在,为了进行测试,我需要访问BoxDao实现BoxDaoBean的某些内部状态,这是一个有状态的会话bean。我在BoxDaoBean中创建了一个受保护的方法,该方法公开了所需的内部状态,但是在我的测试用例中,我还没有找到访问它的方法,因为注入的BoxDao是远程接口代理(不能转换为BoxDaoBean)。

在测试用例中,有没有办法访问远程接口BoxDao后面的有状态会话bean?解决方案是否特定于OpenEjb并不重要。

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

最佳答案

您可以尝试让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;

    ...

}

08-03 22:35