【发布时间】: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