gpt4 book ai didi

java - 带有 Microstream 的 Quarkus - 类加载器问题

转载 作者:行者123 更新时间:2023-12-02 16:19:21 25 4
gpt4 key购买 nike

我正在尝试让 Microstream 与 Quarkus 一起运行,但 Microstream 无法找到我的 DataRoot 类。 缺少类型所需类型处理程序的运行时类型:org.acme.getting.started.DataRoot

该问题仅在使用 quarkus:dev 时出现。测试(使用和不使用 @QuarkusTest 注释)并在 Docker 中运行应用程序工作正常。

2021-01-26 10:14:31,831 ERROR [io.qua.run.Application] (Quarkus Main Thread) Failed to start application (with profile dev): one.microstream.persistence.exceptions.PersistenceException: Missing runtime type for required type handler for type: org.acme.getting.started.DataRoot
at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.validateExistingType(PersistenceTypeHandlerManager.java:370)
at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.ensureTypeHandler(PersistenceTypeHandlerManager.java:420)
at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.lambda$2(PersistenceTypeHandlerManager.java:465)
at one.microstream.collections.ChainStorageStrong.iterate(ChainStorageStrong.java:1315)
at one.microstream.collections.HashEnum.iterate(HashEnum.java:650)
at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.ensureTypeHandlers(PersistenceTypeHandlerManager.java:464)
at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.ensureTypeHandlersByTypeIds(PersistenceTypeHandlerManager.java:455)
at one.microstream.storage.types.EmbeddedStorageManager$Default.ensureRequiredTypeHandlers(EmbeddedStorageManager.java:301)
at one.microstream.storage.types.EmbeddedStorageManager$Default.start(EmbeddedStorageManager.java:213)
at one.microstream.storage.types.EmbeddedStorageManager$Default.start(EmbeddedStorageManager.java:1)
at org.acme.getting.started.App.createStorageManager(App.java:48)
at org.acme.getting.started.App.storageManager(App.java:68)
at org.acme.getting.started.App.init(App.java:87)
at org.acme.getting.started.App_Observer_init_c6e577ab5da11c32214e7d0c965f6089ddc75405.notify(App_Observer_init_c6e577ab5da11c32214e7d0c965f6089ddc75405.zig:147)
at io.quarkus.arc.impl.EventImpl$Notifier.notifyObservers(EventImpl.java:282)
at io.quarkus.arc.impl.EventImpl$Notifier.notify(EventImpl.java:267)
at io.quarkus.arc.impl.EventImpl.fire(EventImpl.java:69)
at io.quarkus.arc.runtime.LifecycleEventRunner.fireStartupEvent(LifecycleEventRunner.java:23)
at io.quarkus.arc.runtime.ArcRecorder.handleLifecycleEvents(ArcRecorder.java:60)
at io.quarkus.deployment.steps.LifecycleEventsBuildStep$startupEvent-858218658.deploy_0(LifecycleEventsBuildStep$startupEvent-858218658.zig:81)
at io.quarkus.deployment.steps.LifecycleEventsBuildStep$startupEvent-858218658.deploy(LifecycleEventsBuildStep$startupEvent-858218658.zig:40)
at io.quarkus.runner.ApplicationImpl.doStart(ApplicationImpl.zig:620)
at io.quarkus.runtime.Application.start(Application.java:90)
at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:97)
at io.quarkus.runtime.Quarkus.run(Quarkus.java:66)
at io.quarkus.runtime.Quarkus.run(Quarkus.java:42)
at io.quarkus.runtime.Quarkus.run(Quarkus.java:119)
at io.quarkus.runner.GeneratedMain.main(GeneratedMain.zig:29)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at io.quarkus.runner.bootstrap.StartupActionImpl$3.run(StartupActionImpl.java:134)
at java.base/java.lang.Thread.run(Thread.java:832)

根据这个线程:https://forum.microstream.one/?qa=99/still-not-loading-now-using-existing-root-instead这是类加载器的问题。

将 Microstream 的 ClassloaderProvide 设置为 Thread.currentThread().getContextClassLoader(),如此处所述 https://manual.docs.microstream.one/data-store/customizing/custom-class-loader在这里 https://quarkus.io/guides/class-loading-reference没有解决问题。

如果有人知道如何解决这个问题,那就太好了。

我在 github 上有一个例子:https://github.com/fleigm/quarkus-microstream-test

最佳答案

遇到了同样的问题。通过在配置过程中添加以下行,我不再收到此错误:

// handle changing class definitions at runtime ("hot code replacement" by quarkus by running app in development mode)
foundation.onConnectionFoundation(connectionFoundation ->
connectionFoundation.setClassLoaderProvider(ClassLoaderProvider.New(Thread.currentThread().getContextClassLoader())));

“基础”是final EmbeddedStorageFoundation<?> foundation .完整示例可以在我的 GitHub-Repository 中找到

关于java - 带有 Microstream 的 Quarkus - 类加载器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65898882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com