gpt4 book ai didi

java - 在 OSGi 中更好地处理线程上下文类加载器

转载 作者:IT老高 更新时间:2023-10-28 21:09:11 27 4
gpt4 key购买 nike

我使用 OSGi 已经有一段时间了,我对遇到的问题有各种解决方案。我想重新审视其中一个,看看人们是否提出了不同的解决方案。

我在使用 OSGi (Equinox 3.4.2) 时遇到的最常见问题之一是线程的上下文类加载器经常不可用。我知道这部分是 Equinox 问题,但我也遇到了 Felix 的问题。我主要是在启动自己的线程或线程池的 3rd 方库中遇到这种情况。当这些在 Bundle 或 DS 激活期间启动时,它们可能会在没有 ClassLoader 的情况下结束。如果 3rd 方库有防止上下文 ClassLoader 丢失的保护,那么没问题,但不是每个人都检查它。稍后,如果上述库需要进行动态类加载,它可能会崩溃。

我用了一段时间的成语(简略)如下:

ClassLoader tccl = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
/*
* Start threads, or establish connections, here, now
*/
} finally {
Thread.currentThread().setContextClassLoader(tccl);
}

这个习惯用法通常在 Activator 或 DS activate() 方法中结束。有一些小的变化,我检查 tccl 是否不为空并且我不覆盖上下文类加载器。

现在,我将这段代码贴在不同的地方,我知道一些第 3 方库可能会产生一个线程并毁了我的一天。虽然起初它是可以管理的,但我最终在许多随机的地方都有这个,这让我很困扰。

还有其他人遇到此问题,他们提出了哪些解决方案?我还想知道这个问题是否在新的 Equinox 3.5.x 中得到解决,是否有人真正看到它工作?

问候。

最佳答案

很好的问题,我们一直在做同样的工作(在 Felix/Karaf/Servicemix4.2 中)并且一直在寻找更好的解决方案。这是我从 Felix 团队收到的回复...

http://old.nabble.com/Can-the-thread-context-classloader-issue-be-solved-at-all--td28260809.html#a30704352

基本上,他们说目前没有更好的解决方案。

但是,我确实看到 Equinox 引用了其他一些选项,包括“好友策略”和在此处使用“上下文查找器”...

http://wiki.eclipse.org/Context_Class_Loader_Enhancements

如果有人知道其他选项甚至 future 解决此问题的路线图,请告诉我们...

关于java - 在 OSGi 中更好地处理线程上下文类加载器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2198928/

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