【发布时间】:2020-02-22 18:05:58
【问题描述】:
当我尝试从一个顶点调用数据库时,我得到一个 ContextNotActiveException。 当通过 Rest 路由器调用时,一切正常。
部署 Verticle:
@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);
}
我的 Verticle:
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.RequestScopedEntityManagerHolder_ClientProxy.arc$delegate(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.ForwardingEntityManager.createQuery(ForwardingEntityManager.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.npc.sapsan.domain.repository.MediaRepository.listAll(MediaRepository.java) 在 ru.npc.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.java: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.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) 在 java.lang.Thread.run(Thread.java:748)
我认为 context-propagation 应该可以帮助我,但它不起作用。
我在 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 = "";
}
问候。
【问题讨论】:
标签: vert.x entitymanager quarkus