Karaf 重启后无法启动蓝图包容器异常

问题描述 投票:0回答:1

我正在使用 Karaf 4.2.16。当我第一次启动 Karaf 时,没有任何问题并且一切正常。如果我重新启动 Karaf 并尝试第二次运行,在宽限期过后(10 分钟),我收到以下异常:

2023-08-10T05:38:55,140 | ERROR | Blueprint Extender: 3 | BlueprintContainerImpl           | 212 - org.apache.aries.blueprint.core - 1.10.3 | Unable to start container for blueprint bundle com.my_app.access.auth.cdo/4.0.0.SNAPSHOT due to unresolved dependencies [(objectClass=com.my_app.common.util.ICdoSessionFactory)]
java.util.concurrent.TimeoutException: null
        at org.apache.aries.blueprint.container.BlueprintContainerImpl$1.run(BlueprintContainerImpl.java:393) [bundleFile:1.10.3]
        at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:45) [bundleFile:1.10.3]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_382]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_382]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_382]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [?:1.8.0_382]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_382]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_382]
        at java.lang.Thread.run(Thread.java:750) [?:1.8.0_382]

要解决这个问题,我需要删除数据目录;但是,它看起来不是正确的解决方案。

这里的一个奇怪的事情是失败的捆绑包仍然处于活动状态,并且应用程序似乎工作正常。

karaf@root()> list -l | grep access.auth.cdo
45 │ Active   │ 100 │ 4.0.0.SNAPSHOT            │ mvn:com.my_app.access/com.my_app.access.auth.cdo/4.0.0-SNAPSHOT
karaf@root()> list -l | grep common.util
61 │ Active   │  60 │ 4.0.0.SNAPSHOT            │ mvn:com.my_app.common/com.my_app.common.util/4.0.0-SNAPSHOT

有什么想法吗?

java osgi apache-karaf
1个回答
0
投票

当bundle正在等待依赖项时,bundle的状态为

grace period
,一段时间后,如果依赖项未解决且bundle达到超时,则bundle将触发超时异常。

我的建议是以最小的依赖性隔离您的应用程序,并在调试模式下启动您的

Karaf
实例,并放置一些断点来尝试找出根本原因,对于这种情况没有灵丹妙药。

例如,在我的项目中,我有一些捆绑包正在等待数据库/数据源依赖项,因此,如果我的数据库关闭或凭据错误,那么我的一些捆绑包永远不会得到正确解析,我将在

Karaf.log

中收到超时异常

如果您可以分享一个最小的可重现示例,我可以看一下。

© www.soinside.com 2019 - 2024. All rights reserved.