gpt4 book ai didi

java - com.sun.management.OperatingSystemMXBean 在 OSGi 包中的使用

转载 作者:行者123 更新时间:2023-11-29 06:22:09 26 4
gpt4 key购买 nike

我有一些遗留代码用于监控我的应用程序 cpu、内存等,我想将它们转换为一个包。现在当我开始这个包时它提示

Missing Constraint: Import-Package: com.sun.management; version="0.0.0"

我曾使用 OperatingSystemMXBean 来访问 JVM 上的统计信息。

我的问题是我可以在 OSGI 容器中使用这个类吗?如果可以的话怎么办?或者我应该使用其他方式来监控我的应用程序。我正在从 Web 前端对应用程序进行 RMI 调用,以获取 OSGi 之前的节点性能数据。

最佳答案

以下是我必须做的才能使它正常工作。

我必须将 com.sun.management 添加到系统包的 systemProperties 值中,因为我是 OSGI 的新手,这花了我一段时间才弄明白。我使用 maven-pax-plugin,所以我需要添加以下属性。默认情况下它不起作用的原因是 equinox 我选择的 osgi 容器默认不包括系统包中的 com.sun.* 包。

通过使用 bundle 0 命令查看系统包,这一点很明显,因为 bundle 0 始终是系统包,这对我来说是新事物。

<param>--sp=com.sun.management</param>

添加此命令后,系统 bundle 包括 com.sun.management 和我的 bundle 部署没有任何问题。

默认情况下,equinox 不在 systemProperties 中包含 com.sun 包的原因参见 here . (直接调用 sun.* 包的 Java 程序不能保证在所有 Java 兼容平台上工作。事实上,即使在同一平台上的 future 版本中,这样的程序也不能保证工作。)

因此,您有两种选择可以将 com.sun 添加到 osgi 容器中。

解决方案 A':扩展包

这些作为片段;它们不是自己的束,而是附加到主机上。扩展包是一种特殊的片段,它只附加到系统包,以提供框架的可选部分。可以使用这种机制来创建一个空的扩展,它只声明所需的包,将加载留给它的托管包(在本例中是框架)。我没有选择这条路线,因为第二个选项实现起来更快。

解决方案 B:引导委托(delegate)

我最后选择的选项是引导委托(delegate)。这允许用户创建将始终由框架父类加载器加载的“隐含”包,即使包没有提供正确的导入。我通过将系统包设置为包含 com.sun.management 来实现。

看下面的优link更详细地描述了整个问题。

关于java - com.sun.management.OperatingSystemMXBean 在 OSGi 包中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2630069/

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