首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在OSGi包中使用com.sun.management.OperatingSystemMXBean

在OSGi包中使用com.sun.management.OperatingSystemMXBean
EN

Stack Overflow用户
提问于 2010-04-13 21:56:34
回答 2查看 2.7K关注 0票数 1

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

代码语言:javascript
运行
复制
Missing Constraint: Import-Package: com.sun.management; version="0.0.0"

我使用OperatingSystemMXBean来访问JVM上的统计数据。

我的问题是,我可以在OSGI容器中使用这个类吗?如果可以,如何使用?或者我应该使用其他方法来监控我的应用程序。我从web前端向应用程序发出了一个RMI调用,以获取OSGi之前的节点性能数据。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-13 22:13:51

您可以尝试在交互式OSGi会话中安装它吗?

请参见this article示例。

代码语言:javascript
运行
复制
osgi> ss

Framework is launched.

id State       Bundle
0 ACTIVE      org.eclipse.osgi_3.4.0.v20080605-1900

osgi>  install file:bundles/FirstBundle-1.0.0.jar
Bundle id is 1

//Try starting 
osgi> start 1
org.osgi.framework.BundleException: The bundle could not be resolved. 
  Reason: Missing Constraint: Import-Package: com.so.samples.osgi.second; 
                                              version="0.0.0"
 at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker
    (BundleHost.java:305)

您可以诊断该问题:

代码语言:javascript
运行
复制
osgi> diag 1
file:bundles/FirstBundle-1.0.0.jar [1]
  Direct constraints which are unresolved:
    Missing imported package com.so.samples.osgi.second_0.0.0.

并安装缺失的依赖项,前提是您知道从何处获取jar

(这很可能是您问题的症结所在,我没有确切的答案,除了将遗留jar转换为OSGi包,如wrap protocolextension of an OSGi framework):

代码语言:javascript
运行
复制
osgi> install file:bundles/SecondBundle-1.0.0.jar
Bundle id is 2
票数 1
EN

Stack Overflow用户

发布于 2010-04-14 22:39:11

下面是为了让它工作我必须做的事情。

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

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

代码语言:javascript
运行
复制
<param>--sp=com.sun.management</param>

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

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

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

解决方案A':扩展包

它们充当片段;它们不是自己的束,而是附加到主机上。扩展捆绑包是一种特殊类型的片段,它只附加到系统捆绑包,以便交付框架的可选部分。可以使用这种机制来创建一个空的扩展,它只声明所需的包,将加载留给它的宿主包(在本例中是Framework)。我没有选择这条路,因为第二种选择实现起来更快。

解决方案B:引导委托

我最后选择的是启动委派。这允许用户创建“隐含的”包,这些包将始终由框架父类加载器加载,即使包没有提供适当的导入。我通过将系统包设置为包含com.sun.management来实现。

请参阅下面更详细地描述整个问题的优秀link

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2630069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档