Можно ли изменить переменную внутри @EJB во время тестирования - PullRequest
0 голосов
/ 20 мая 2019

Предположим, у меня есть 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 во время тестирования, это также поможет.

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

Это пример дескриптора развертывания, вы можете добавить переменную и выражение расписания в дескриптор депиляции либо в рабочей среде, либо в среде разработки и установить для другого значение по умолчанию, либо сделать все в дескрипторе

0 голосов
/ 20 мая 2019

Вы можете настроить свой сервер на использование разрешения выражения, что позволит вам изменить значение.http://wildscribe.github.io/WildFly/14.0/subsystem/ee/#attr-annotation-property-replacement

...