Как создать собственную область в Quarkus? - PullRequest
0 голосов
/ 05 марта 2020

Я пытался следовать этой инструкции https://rpestano.wordpress.com/2013/06/30/cdi-custom-scope/, но это не работает, потому что методы моего пользовательского Context не запускаются.

1 Ответ

2 голосов
/ 17 марта 2020

Вы можете объявить пользовательские области в Quarkus. Однако Quarkus не использует полную реализацию CDI, вместо этого он имеет более легкую реализацию, которая не поддерживает все, что вы знаете из CDI, как вы привыкли. Причин множество, но в основном это делается для того, чтобы сделать его более удобным для сборки.

Расширения CDI - одна из вещей, которые по своей сути основаны на времени выполнения и, как таковые, плохо подходят для Quarkus. Вместо этого вам нужно будет использовать расширение Quarkus, чтобы объявить ваш контекст / контекст. Позвольте мне дать вам некоторые материалы для этого ...

Вот ссылка на руководство Quarkus CDI в целом, в котором перечислены его ограничения и способы его компенсации.

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

@BuildStep
ContextRegistrarBuildItem customContext() {
    return new ContextRegistrarBuildItem(new ContextRegistrar() {
         public void register(RegistrationContext registrationContext) {
            registrationContext.configure(CustomScoped.class).normal().contextClass(MyCustomContext.class).done();
         }
    });
}

И здесь есть ссылка на то, как расширение Narayana Quarkus использует этот точно такой же API для регистрации @Transactional. Базовый контекстный класс очень похож на тот, который вы использовали бы в CDI (или в Weld), взгляните на этот класс , который Нараяна использует для вдохновения.

...