#quarkus #quarkus-panache
#quarkus #quarkus-panache
Вопрос:
использование Quarkus 1.9.1
У меня есть приложение командной строки следующим образом…
@CommandLine.Command
public class MyCommandApp {}
Приложение запускает соединение с сервером с использованием сторонней библиотеки.
В какой-то момент, когда сервер принимает соединение, он динамически подключает слушателя. Например:
if(server.accept())
server.setListener(new MyServerListener())
Внутри MyServerListener () могу ли я использовать объект panache, подобный этому?
// This is attached dynamically. There's no Quarkus CDI scope/context to this.
class MyServerLister implements ServerListener {
@Override
public void receiveEvent(Event event) {
MyPanacheEntity.find(...)
...
}
}
Ответ №1:
Объекты Panache должны использоваться в компонентах, отличных от CDI. Если это не так, пожалуйста, откройте проблему с небольшим воспроизводителем.
Но Panache можно использовать только в приложении Quarkus, поскольку оно зависит от улучшений во время сборки Quarkus.
В любом случае, вы всегда можете сделать свой MyServerLister компонентом CDI, если хотите использовать в нем всю мощь Quarkus CDI, внедрить его в свой MyCommandApp
и передать его MyServerLister
, например, в свой конструктор.
Комментарии:
1. Как сделать это компонентом CDI? Я не могу просто поместить @ApplicationScoped в класс? Если вы видите мой пример, прослушиватель создается и подключается динамически, когда клиент подключается к серверу. Поэтому его нельзя вводить при запуске.
2. Я только что понял, что у вас есть один слушатель от клиента. Если он не может быть общим, так что да, вы не можете легко сделать его компонентом CDI. Panache можно использовать в компоненте, отличном от CDI, но для него требуется область запроса, поэтому он не будет работать OOTB, см. Этот поток Zulip для получения дополнительной информации quarkusio.zulipchat.com/#narrow/stream/187030-users/topic /…