Могут ли объекты Panache использоваться в службах, не управляемых Quarkus?

#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 /…