【问题标题】:Gemini Blueprint - PackageAdmin service reference is returning null with spring mvc in IBM LibertyGemini Blueprint - PackageAdmin 服务引用在 IBM Liberty 中使用 spring mvc 返回 null
【发布时间】:2017-09-18 08:08:32
【问题描述】:

我正在尝试使用gemini blueprint virgo DM 在IBM Websphere liberty 服务器中部署spring osgi 应用程序。在部署应用程序时,我遇到以下错误,说“....PackageAdmin service is required 。任何人都可以对此有所了解吗?

java.lang.IllegalStateException: org.osgi.service.packageadmin.PackageAdmin 服务需要在 org.eclipse.gemini.blueprint.io.internal.resolver.PackageAdminResolver$1.run(PackageAdminResolver.java:179) 在 org.eclipse.gemini.blueprint.io.internal.resolver.PackageAdminResolver$1.run(PackageAdminResolver.java:174) 在 java.security.AccessController.doPrivileged(Native Method) 在 org.eclipse.gemini.blueprint.io.internal.resolver.PackageAdminResolver.getPackageAdmin(PackageAdminResolver.java:174) 在 org.eclipse.gemini.blueprint.io.internal.resolver.PackageAdminResolver.getImportedBundles(PackageAdminResolver.java:67) 在 org.eclipse.gemini.blueprint.io.OsgiBundleResourcePatternResolver.findClassPathMatchingResources(OsgiBundleResourcePatternResolver.java:217) 在 org.eclipse.gemini.blueprint.io.OsgiBundleResourcePatternResolver.findResources(OsgiBundleResourcePatternResolver.java:154) 在 org.eclipse.gemini.blueprint.io.OsgiBundleResourcePatternResolver.getResources(OsgiBundleResourcePatternResolver.java:186) 在 org.eclipse.gemini.blueprint.context.support.AbstractOsgiBundleApplicationContext.getResources(AbstractOsgiBundleApplicationContext.java:439) 在 org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext.getResources(ServerOsgiBundleXmlWebApplicationContext.java:346) 在 org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:270) 在 org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:248) 在 org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:87) 在 org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:74) 在 org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1411) 在 org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1401) 在 org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:172) 在 org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:142) 在 org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:94) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:508) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:392) ... 25 更多

【问题讨论】:

  • 我相信标题是错误的,Gemini Blueprint 是 Eclipse Virgo 中蓝图的实现,但问题与 IBM Liberty 有关。所以应该从标题中删除“Gemini Blueprint”,并且应该删除标签 eclipse-virgo。

标签: spring-mvc osgi websphere-liberty blueprint-osgi eclipse-virgo


【解决方案1】:

从 Liberty 的修订包 8.5.5.9 开始,PackageAdmin 将不可用于应用程序区域,除非您使用 IBM-API-Service 标头创建自定义 Liberty 功能来导出包管理服务。

  1. 按照this article中的说明创建 Liberty 功能

  2. 确保功能导出 PackageAdmin,如下例所示

  3. 使用 usr:myfeature 将您的自定义功能声明到 server.xml

    Subsystem-ManifestVersion: 1.0
    IBM-Feature-Version: 2
    IBM-ShortName: myfeature
    Subsystem-SymbolicName: myfeature;visibility:=public 
    Subsystem-Version: 1.0.0
    Subsystem-Type: osgi.subsystem.feature
    Manifest-Version: 1.0
    IBM-API-Service: javax.xml.parsers.SAXParserFactory,
     org.osgi.service.packageadmin.PackageAdmin,
     org.osgi.service.cm.ConfigurationAdmin
    

根据 8.5.5.9 修复包中defect fix 的描述,IBM 进行了此更改,因为 Liberty 将其自己的服务泄漏给应用程序,因此现在 Liberty 注册的 OSGi 服务对应用程序不可见,除非您创建如下所示的一项功能,可明确导出您需要的内容。

【讨论】:

  • @Romanato,感谢您的帮助。我可以通过应用您的步骤来解决问题。
猜你喜欢
  • 2020-11-30
  • 2013-10-19
  • 2012-01-12
  • 2019-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
相关资源
最近更新 更多