Вы можете объявить пользовательские области в 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), взгляните на этот класс , который Нараяна использует для вдохновения.