【问题标题】:Howto test passivation of stateful session beans in integration test (OpenEjb)?如何在集成测试(OpenEjb)中测试有状态会话 bean 的钝化?
【发布时间】:2023-03-17 09:04:01
【问题描述】:

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

@LocalClient
public class BoxDaoTest{

    @EJB
    private BoxDao boxDao;
    ...
}

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

【问题讨论】:

    标签: java ejb ejb-3.0 openejb


    【解决方案1】:

    您可以在 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
    

    这将导致@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");
    

    【讨论】:

      猜你喜欢
      • 2015-05-15
      • 2014-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多