Контекст безопасности для событий CDI и наблюдателей EJB - PullRequest
0 голосов
/ 18 июня 2020

У меня есть приложение JEE7, работающее в Wildfly 10 (CDI 1.2). Я хочу добавить события CDI с наблюдателем @Asynchronous, используя EJB без сохранения состояния.

@Stateless
public class SBean {
    // get a static slf4j logger for the class
    protected static final Logger logger = getLogger(SBean.class);

    /**
     * Listen for an incoming event. 
     * @param metadata
     */
    @Asynchronous
    public void observeCommits(@Observes ObjectMetadata metadata){
        // determine which kind of object needs to be retrieve
        logger.info( "Saw a {} with id {}", metadata.getClazz().getName(), metadata.getId());
    }

}

Какой SecurityContext будет установлен при срабатывании EJB Observer? Я попытался найти документацию в документации Weld, но это не кажется правильным местом, поскольку здесь обсуждается только @Observer, но не обсуждается асинхронный EJB.

Будет ли тот же контекст безопасности, что и в место при срабатывании события присутствовать, когда наблюдатель его ловит? Есть ли где-нибудь документация, описывающая спецификации для этого?

1 Ответ

2 голосов
/ 21 июня 2020

Спецификации, которые определяют поведение, в данном случае следующие:

  1. CDI 1.2
  2. EJB 3.2

С точки зрения CDI вызов наблюдателя событий аналогичен прямому вызову метода с соответствующими параметрами. С точки зрения EJB bean-компонент EJB доступен для внедрения с помощью CDI со всем дополнительным поведением, предписанным EJB spe c.

EJB 3.2 spe c напрямую отвечает на вопрос:

4.5.4 Безопасность

Субъект безопасности вызывающего объекта распространяется с вызовом асинхронного метода. Распространение принципала безопасности вызывающего абонента ведет себя точно так же для вызовов асинхронных методов, как и для синхронных вызовов сессионных компонентов.

...