我有一个测试用例,它使用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;
...
}