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