2

我在集成测试(@LocalClient 带注释的测试类)中使用 OpenEjb 本地服务器(3.1.4)。

@LocalClient
public class BoxDaoTest{

    @EJB
    private BoxDao boxDao;
    ...
}

BoxDao 是一个有状态的会话 bean。是否可以在 OpenEjb 中触发 BoxDao 的钝化以在集成测试中对其进行测试?

4

1 回答 1

5

InitialContext您可以在用于在测试用例中引导 OpenEJB的属性中创建/配置有状态容器。

这些设置可以解决问题:

final Properties p = new Properties();
p.put("MyStatefulContainer", "new://Container?type=STATEFUL");
p.put("MyStatefulContainer.Capacity", "0");
p.put("MyStatefulContainer.Frequency", "0");

p.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory");
final InitialContext initialContext = new InitialContext(properties);
//lookup your beans from the initialContext

这将导致@Statefulbean 基本上永远不会驻留在内存中,它将在每次方法调用或生命周期回调时从磁盘读取并写回磁盘。

javax.ejb.embeddable.EJBContainer使用 EJB 3.1 API也可以做同样的事情:

final Properties p = new Properties();
p.put("MyStatefulContainer", "new://Container?type=STATEFUL");
p.put("MyStatefulContainer.Capacity", "0");
p.put("MyStatefulContainer.Frequency", "0");

final EJBContainer container = EJBContainer.createEJBContainer(p);
Foo foo = (Foo) container.getContext().lookup("java:global/yourapp/yourbean");
于 2012-09-06T19:45:36.157 回答