【问题标题】:Is it possible to change variable inside @EJB while testing测试时是否可以更改@EJB 中的变量
【发布时间】:2019-05-20 15:59:04
【问题描述】:

假设我有 EJB 每小时执行一些操作。我正在使用 jboss ejb @Schedule 。而且这个时间表只需要在生产中起作用,所以我为它添加了一个标志。

@Stateless
public class Remover {    
  private boolean testMode = false;

  @Schedule(hour = "*/1", persistent = false)
  protected void init() {    
    if (testMode) return;
    doSomeCode();
  }
}

现在在我的测试中,我创建了嵌入式 EJB 容器并想直接调用 doSomeCode(),但 init() 有时也在运行,这会破坏我的测试。

Map<String, String> props = new HashMap<>();
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
EJBContainer cnt = EJBContainer.createEJBContainer(props);
Context ctx = cnt.getContext();

Remover r = (Remover) ctx.lookup("java:global/RemoveService/Remover");
r.doSomeCode();

所以,问题是,我可以在创建 EJBContainer 时更改 testMode 变量吗?我发现可以通过向 EJBContainer 添加新的 props 来更改它,并为变量添加 @Resource 注释,但没有运气,可能需要另一个 jndi 名称。

props.put("java:comp/env/testMode", "true");

如果有办法在测试时禁用@Schedule,它也会有所帮助。

【问题讨论】:

    标签: jakarta-ee jboss ejb jndi schedule


    【解决方案1】:

    您可以将服务器配置为使用表达式解析,从而允许您更改值。 http://wildscribe.github.io/WildFly/14.0/subsystem/ee/#attr-annotation-property-replacement

    【讨论】:

      【解决方案2】:

      这是部署描述符的示例,您可以在生产环境或开发环境中将变量和调度表达式添加到部署描述符中,并为另一个设置默认值,或者在描述符中执行所有操作

      【讨论】:

        猜你喜欢
        • 2011-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-27
        • 2016-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多