Quarkus: ContextNotActiveException, когда я вызываю БД из вертикали - PullRequest
0 голосов
/ 22 февраля 2020

Когда я пытаюсь вызвать БД из вершины, я получаю исключение ContextNotActiveException. При вызове через маршрутизатор Rest все работает.

развертывание Vertical:

@Inject
Vertx vertx;

void onStart(@Observes StartupEvent startupEvent) {
    DeploymentOptions deploymentOptions = new DeploymentOptions();
    deploymentOptions.setWorker(true);
    deploymentOptions.setWorkerPoolSize(DEFAULT_WORKER_POOL_SIZE);

    vertx.deployVerticle(new FileFinderForSaveWorker(), deploymentOptions);
}

my Verточка:

public class FileFinderForSaveWorker extends AbstractVerticle {

 @Override
 public void start(Promise<Void> startPromise) throws Exception {

    try {

        List<Media> mediaList = new MediaRepository().listAll();

    } catch (Exception e) {
        e.printStackTrace();
    }

 }
}

В этой строке возникает исключение:

List<Media> mediaList = new MediaRepository().listAll();

javax.enterprise.context.ContextNotActiveException: интерфейс javax.enterprise.context.RequestScoped в io.quarkus.hibernate.orm.runtime.RequestScopedEntity_arcxy $ делегировать (RequestScopedEntityManagerHolder_ClientProxy.zig: 83) в io.quarkus.hibernate.orm.runtime.RequestScopedEntityManagerHolder_ClientProxy.getOrCreateEntityManager (RequestScopedEntityManagerHolder_ClientProxy.zig: 191). в io.quarkus.hibernate.orm.runtime.entitymanager.TransactionScopedEntityManager.getEntityManager (TransactionScopedEntityManager java: 78) по адресу io.quarkus.hibernate.orm.runtime.entitymanager.TransactionScopedEntityManager.createQuery (TransactionScopedEntityManager. java: 317) по адресу io.quarkus.hibernate.orm.runtime.entitymanager.ForanantEreityMate ger. java: 142) в io.quarkus.hibernate.orm.panache.runtime.JpaOperations.findAll (JpaOperations. java: 328) в io.quarkus.hibernate.orm.panache.runtime.JpaOperations.listAll ( JpaOperations. java: 340) в ru.np c .sapsan.domain.repository.MediaRepository.listAll (MediaRepository. java) в ru.np c .sapsan.core.worker.FileFinderForSaveWorker.start ( FileFinderForSaveWorker. java: 18) в io.vertx.core.impl.DeploymentManager.lambda $ doDeploy $ 9 (DeploymentManager. java: 556) в io.vertx.core.impl.ContextImpl.executeTask (ContextImpl. * 1052 : 369) в io.vertx.core.impl.WorkerContext.lambda $ wrapTask $ 0 (WorkerContext. java: 35) в io.vertx.core.impl.TaskQueue.run (TaskQueue. java: 76) в java .util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1149) в java .util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor. java: 624) в io.netcrent.util .FastThreadLocalRunnable.run (FastThreadLocalRunnable. java: 30) при java .lang.Thread.run (поток. java: 748)

* 10 18 *

Я думал, что распространение контекста должно помочь мне, но это не работает.

Мои зависимости в build.gradle:

    dependencies {
      annotationProcessor 'org.projectlombok:lombok:1.18.10'
      compileOnly 'org.projectlombok:lombok:1.18.10'
      implementation 'io.quarkus:quarkus-smallrye-reactive-streams-operators'
      implementation 'io.quarkus:quarkus-smallrye-context-propagation-parent:1.2.1.Final'
      implementation 'io.quarkus:quarkus-jdbc-postgresql'
      implementation 'io.quarkus:quarkus-hibernate-orm-panache'
      implementation 'io.quarkus:quarkus-tika'
      implementation 'io.quarkus:quarkus-vertx-web'
      implementation 'io.quarkus:quarkus-smallrye-openapi'
      implementation 'io.quarkus:quarkus-vertx'
      implementation 'io.quarkus:quarkus-flyway'
      implementation 'io.quarkus:quarkus-hibernate-orm'
      implementation 'org.projectlombok:lombok:1.18.10'
      implementation enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}")
      implementation 'io.quarkus:quarkus-resteasy'
      implementation 'org.xerial.snappy:snappy-java:1.1.7.3'
      implementation 'org.reflections:reflections:0.9.11'

      testImplementation 'io.quarkus:quarkus-junit5'
      testImplementation 'io.rest-assured:rest-assured'
     }

Я использую hibernate-orm-panache

Репозиторий:

 @ApplicationScoped
 public class MediaRepository implements PanacheRepository<Media> {
 }

Объект:

@Data
@Entity
@EqualsAndHashCode(callSuper = false)
@Table(name = "media")
public class Media extends PanacheEntity {

   @SerializedName("uuid")
   @Column(name = "uuid", unique = true, nullable = false, columnDefinition = "varchar(36)", length = 36, updatable = false)
   private String uuid = "";

}

Привет.

1 Ответ

0 голосов
/ 23 февраля 2020

Вы используете Panache, который находится за кулисами - это управляемый JPA / Hibernate, которому для работы, вероятно, нужен CDI Context. Вот почему он отлично работает с вами, когда вы вызываете его через rest, потому что CDI уже запущен. Если вы хотите использовать маршруты vert.x с Quarkus, я предлагаю вам использовать Quarkus реактивные маршруты с распространением контекста, которое вы уже настроили, для достижения своей цели.

...