【问题标题】:Making exported packages in an OSGI bundle accessible to all applications deployed in JBoss 7使 JBoss 7 中部署的所有应用程序都可以访问 OSGI 包中的导出包
【发布时间】:2012-05-07 05:08:28
【问题描述】:

我正在寻找正确的方法来让 JBoss AS 7 中部署的所有 Java EE 应用程序可以访问某个 OSGI 包中的导出包中的类。 到目前为止,作为一种解决方法,我一直在做的是将 OSGI 捆绑包 jar 放在 JBOSS_HOME/standalone/deployments 文件夹中,然后在每次需要访问的地方我在其 MANIFEST.MF 文件中添加以下行: Dependencies: deployment.<OSGIBundleName>:<OSGIBundleVersion>.

我的问题是:有没有办法在 JBoss 中发布 OSGI 包(在“bundles”文件夹中?)并指示应用程序服务器将包导出的包访问到其中部署的任何应用程序?

我知道使用模块 (https://community.jboss.org/message/604576) 可以使 JBoss 中的所有应用程序都可以访问包,但我想知道是否可以使用 OSGI 包来代替。

【问题讨论】:

  • 对于应用服务器来说,bundle 只是一个 jar。导出的包没有意义。
  • 嗨@Robin!,据我所知,JBoss 7 是 OSGI 'aware',所以我认为需要导出包以使仅可访问包中的某些包并隐藏其他包。不是这样吗?

标签: jakarta-ee osgi jboss7.x


【解决方案1】:

我认为这不会起作用,因为如果不是“OSGi 模式”,JBoss 可能会忽略清单中的 Export-Packages 部分(不过我猜这里)。

如果我是你,我会将包拆分为一个 API 包,该包导出 所有 其类和一个依赖于它的实现包。您可以将 API 包视为普通 jar,因为无论它是否在 OSGi 上下文中使用,它都会公开相同的类。

【讨论】:

  • 嗨@artbristol!,不确定我是否理解第一句话。在什么情况下 JBoss 可能会忽略 OSGI 包中的 Export-Packages 以及何时不会出现这种情况?感谢您的澄清。
  • 好吧,我不是 JBoss 方面的专家,但我认为正常的 WAR 部署没有任何访问 OSGi 包之类的权限,所以我认为 JBoss 会忽略 Export-Packages在那种情况下等等。
【解决方案2】:

将它们放在“bundles”文件夹中?

【讨论】:

  • 只将 OSGI 包放在“bundles”文件夹中是行不通的。我这样做了,但是 Web 应用程序看不到包内导出的包中的类。我想我应该做一些类似于这里解释的配置 JBoss 全局模块的事情:docs.jboss.org/author/display/AS7/…,但我找不到 OSGI 包的等效解释。
  • Web 应用程序中的 jars 是 OSGi 包本身?他们有一个完整的 OSGi 清单,其中包含 Bundle-ManifestVersion、Bundle-Name、Bundle-SymbolicName、Bundle-Version、Import-Package……?
  • 不,Web 应用程序不是 OSGI 包,也不是它的内部 jars。还有另一个 OSGI 包,我想将它提供给我在 JBoss 中部署的所有 Web 应用程序(我的意思是,仅在其导出包中的类)。这个包有一个完整的 OSGI 清单,由 Eclipse 生成。我按照本教程使用 Eclipse 创建了 OSGI 包:coderthoughts.blogspot.com/2010/11/using-osgi-in-jboss-as7.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 2012-03-27
  • 2014-09-12
  • 1970-01-01
相关资源
最近更新 更多