我在集成测试中使用OpenEjb本地服务器(3.1.4)(@LocalClient注释的测试类)。
@LocalClient
public class BoxDaoTest{
@EJB
private BoxDao boxDao;
...
}
BoxDao是一个有状态的会话bean。是否可以在OpenEjb中触发BoxDao的钝化以在集成测试中进行测试?
您可以在InitialContext
属性中创建/配置Stateful容器,用于在测试用例中启动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
这将导致@Stateful
bean基本上永远不会驻留在内存中,它将在每次方法调用或生命周期回调时从磁盘读取并写回磁盘。
EJB 3.1 javax.ejb.embeddable.EJBContainer
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");