当前位置: 首页 > 知识库问答 >
问题:

当我从verticle调用db时,ContextNotActivieException

杜俊爽
2023-03-14

当我试图从顶点调用数据库时,我得到了一个ContextNotActiveExctive。当通过Rest路由器调用时,一切都正常。

部署垂直线:

@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);
}

我的眩晕:

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。企业上下文ContextNotActivieException:接口javax。企业上下文请求的范围是io。夸克斯。冬眠奥姆。运行时。RequestScopedEntityManagerHolder_客户端代理。arc$delegate(RequestScopedEntityManagerHolder_ClientProxy.zig:83)在io上。夸克斯。冬眠奥姆。运行时。RequestScopedEntityManagerHolder_客户端代理。getOrCreateEntityManager(RequestScopedEntityManagerHolder_ClientProxy.zig:191)位于io。夸克斯。冬眠奥姆。运行时。实体管理器。TransactionScopedEntityManager。getEntityManager(TransactionScopedEntityManager.java:78)位于io。夸克斯。冬眠奥姆。运行时。实体管理器。TransactionScopedEntityManager。在io上创建查询(TransactionScopedEntityManager.java:317)。夸克斯。冬眠奥姆。运行时。实体管理器。货代经理。在io上创建查询(ForwardingEntityManager.java:142)。夸克斯。冬眠奥姆。神气十足运行时。JPA操作。io上的findAll(jpaoOperations.java:328)。夸克斯。冬眠奥姆。神气十足运行时。JPA操作。ru的listAll(jpaoOperations.java:340)。全国人大。萨普桑。领域存储库。MediaRepository。ru的listAll(MediaRepository.java)。全国人大。萨普桑。果心工人FileFinderForSaveWorker。在io上启动(FileFinderForSaveWorker.java:18)。维特斯。果心impl。部署经理。lambda$doDeploy$9(DeploymentManager.java:556)在io上。维特斯。果心impl。ContextImpl。io上的executeTask(ContextImpl.java:369)。维特斯。果心impl。WorkerContext。io上的lambda$wrapTask$0(WorkerContext.java:35)。维特斯。果心impl。任务队列。在java上运行(TaskQueue.java:76)。util。同时发生的线程池执行器。java上的runWorker(ThreadPoolExecutor.java:1149)。util。同时发生的ThreadPoolExecutor$Worker。在io上运行(ThreadPoolExecutor.java:624)。内蒂。util。同时发生的FastThreadLocalRunnable。在java上运行(FastThreadLocalRunnable.java:30)。朗。丝线。run(Thread.java:748)

我认为上下文传播应该对我有帮助,但它不起作用。

我在构建中的依赖关系。格雷德尔:

    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的华丽造型

存储库:

 @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个答案

孟花蜂
2023-03-14

您正在使用Panache,它是一个幕后托管的JPA/HiberNate,可能需要CDI上下文才能运行。这就是为什么当你通过rest调用它时,它可以很好地工作,因为CDI已经启动了。如果您想在Quarkus中使用vert. x路由,我建议您使用Quarkus反应路由和上下文传播——您已经配置好了——来实现您的目标。

 类似资料:
  • 我试图在我的项目中实现这段代码,但不起作用RecycerView:如何捕捉ImageView上的onClick?: 我实现了一个接口来处理RecycerView中的onclick imageview和onclick row。问题是,当我试图在imageview上或在行中单击时,不会发生任何事情。如果我在我的ViewHolder类中尝试同样的方法,效果会很好,因为我可以看到祝酒词。问题是我需要这个工

  • 是否有一种方法可以在intellij(或任何其他应用程序/工具)中调试javascript verticle,就像在任何浏览器开发工具上调试它一样?我尝试将调试器添加到代码中,但不起作用,而且我在网上也找不到任何关于它的东西。

  • 我正在使用Akka HTTP作为REST支持,我需要在我正在开发的服务器的另一部分中使用Actors。我的理解是,通常需要在整个应用程序中使用一个ActorSystem实例。从akka.Http.scaladsl.Http.apply()的定义来看,当我使用Http方法时,就像下面的代码片段-- ---Http对象的apply()方法被提供了一个隐式ActorSystem实例...为了便于参考,h

  • 我正在开发一个ASP。Net核心3.0 API,Azure Cosmos DB作为持久性存储。这是我第一次尝试使用Cosmos DB。当我尝试创建一个新项目(文档)时,我在Postman中返回了一个错误,它说。。。 我不知道是什么导致了这个问题。 我正在我的项目中使用微软.Azure.Cosmos v3.4.0 nuget 这是我的存储库中用于添加新帐户文档的方法。 这是我在调试模式下悬停在“Ac

  • 嗨,我正在尝试从移动后端调用lambda函数。 我已经使用生成了Lambda函数。网芯 这调用很好,在. net core和AWS控制台中没有任何错误。 但当我试图从Android Studio调用它时,我得到了以下错误。 Java代码, 接口:

  • 问题内容: 我正在尝试编写一个程序在我的Web应用程序上进行自动化测试。为此,我使用HttpURLConnection打开了一个连接。 我要测试的页面之一执行302重定向。我的测试代码如下所示: 因此,假设urlToSend是http://www.foo.com/bar.jsp,并且此页面将您重定向到http://www.foo.com/quux.jsp。我的println语句应打印出http:/