Предположим, у меня есть 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();
Итак, вопрос в том, могу ли я изменить переменную testMode при создании EJBContainer. Я обнаружил, что это можно изменить, добавив новый реквизит в EJBContainer и добавив аннотацию @Resource к переменной, но не повезло, может быть, нужно другое имя jndi.
props.put("java:comp/env/testMode", "true");
Также, если есть способ отключить @Schedule во время тестирования, это также поможет.