1

我有一个使用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.1 特定的解决方案,因为我们有几个 EJB 3.0 项目正在运行。使用 Proxy.getInvocationHandler(boxDao),我可以通过 StatefulEjbObjectHandler 访问 OpenEjb 容器。是否可以通过这种方式访问​​有状态 bean?

4

1 回答 1

1

您也可以尝试BoxDaoBean公开一个@LocalBean接口。@WebService单个 EJB 可以从、@Local@Remote、 JAX-RS 等公开几乎无限数量的视图。

只需像这样更新您的bean:

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

然后将另一个字段添加到您的测试中:

@LocalClient
public class MyTestCase {

    @EJB
    private BoxDao boxDao;

    @EJB
    private BoxDaoBean boxDaoBean;

    ...   

}
于 2012-08-28T21:15:40.340 回答