Gemini Blueprint - PackageAdmin 服务引用在 IBM Liberty 中使用 spring mvc 返回 null
Gemini Blueprint - PackageAdmin service reference is returning null with spring mvc in IBM Liberty
我正在尝试使用 gemini blueprint virgo DM 在 IBM Websphere liberty 服务器中部署 spring osgi 应用程序。部署应用程序时,我遇到以下错误,显示“....需要 PackageAdmin 服务。有人对此有什么想法吗?
java.lang.IllegalStateException:
org.osgi.service.packageadmin.PackageAdmin service is required at
org.eclipse.gemini.blueprint.io.internal.resolver.PackageAdminResolver.run(PackageAdminResolver.java:179)
at
org.eclipse.gemini.blueprint.io.internal.resolver.PackageAdminResolver.run(PackageAdminResolver.java:174)
at java.security.AccessController.doPrivileged(Native Method) at
org.eclipse.gemini.blueprint.io.internal.resolver.PackageAdminResolver.getPackageAdmin(PackageAdminResolver.java:174)
at
org.eclipse.gemini.blueprint.io.internal.resolver.PackageAdminResolver.getImportedBundles(PackageAdminResolver.java:67)
at
org.eclipse.gemini.blueprint.io.OsgiBundleResourcePatternResolver.findClassPathMatchingResources(OsgiBundleResourcePatternResolver.java:217)
at
org.eclipse.gemini.blueprint.io.OsgiBundleResourcePatternResolver.findResources(OsgiBundleResourcePatternResolver.java:154)
at
org.eclipse.gemini.blueprint.io.OsgiBundleResourcePatternResolver.getResources(OsgiBundleResourcePatternResolver.java:186)
at
org.eclipse.gemini.blueprint.context.support.AbstractOsgiBundleApplicationContext.getResources(AbstractOsgiBundleApplicationContext.java:439)
at
org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext.getResources(ServerOsgiBundleXmlWebApplicationContext.java:346)
at
org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:270)
at
org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:248)
at
org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:87)
at
org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:74)
at
org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1411)
at
org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1401)
at
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:172)
at
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:142)
at
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:94)
at
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:508)
at
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:392)
... 25 more
从 Liberty 的修复包 8.5.5.9 开始,PackageAdmin 将不可用于应用程序区域,除非您使用 IBM-API-Service[= 创建一个导出包管理服务的自定义 Liberty 功能部件29=] header.
按照 this article
中的说明创建 Liberty 功能部件
确保功能导出 PackageAdmin,如下例所示
使用 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 fixpack中的一个defect fix的描述,IBM做出这个改变是因为Liberty将自己的服务泄露给了应用程序,所以现在Liberty注册的OSGi服务对应用程序是不可见的应用程序,除非您创建如下所示的功能以明确导出您需要的功能。
我正在尝试使用 gemini blueprint virgo DM 在 IBM Websphere liberty 服务器中部署 spring osgi 应用程序。部署应用程序时,我遇到以下错误,显示“....需要 PackageAdmin 服务。有人对此有什么想法吗?
java.lang.IllegalStateException: org.osgi.service.packageadmin.PackageAdmin service is required at org.eclipse.gemini.blueprint.io.internal.resolver.PackageAdminResolver.run(PackageAdminResolver.java:179) at org.eclipse.gemini.blueprint.io.internal.resolver.PackageAdminResolver.run(PackageAdminResolver.java:174) at java.security.AccessController.doPrivileged(Native Method) at org.eclipse.gemini.blueprint.io.internal.resolver.PackageAdminResolver.getPackageAdmin(PackageAdminResolver.java:174) at org.eclipse.gemini.blueprint.io.internal.resolver.PackageAdminResolver.getImportedBundles(PackageAdminResolver.java:67) at org.eclipse.gemini.blueprint.io.OsgiBundleResourcePatternResolver.findClassPathMatchingResources(OsgiBundleResourcePatternResolver.java:217) at org.eclipse.gemini.blueprint.io.OsgiBundleResourcePatternResolver.findResources(OsgiBundleResourcePatternResolver.java:154) at org.eclipse.gemini.blueprint.io.OsgiBundleResourcePatternResolver.getResources(OsgiBundleResourcePatternResolver.java:186) at org.eclipse.gemini.blueprint.context.support.AbstractOsgiBundleApplicationContext.getResources(AbstractOsgiBundleApplicationContext.java:439) at org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext.getResources(ServerOsgiBundleXmlWebApplicationContext.java:346) at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:270) at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:248) at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:87) at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:74) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1411) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1401) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:172) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:142) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:94) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:508) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:392) ... 25 more
从 Liberty 的修复包 8.5.5.9 开始,PackageAdmin 将不可用于应用程序区域,除非您使用 IBM-API-Service[= 创建一个导出包管理服务的自定义 Liberty 功能部件29=] header.
按照 this article
中的说明创建 Liberty 功能部件
确保功能导出 PackageAdmin,如下例所示
使用 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 fixpack中的一个defect fix的描述,IBM做出这个改变是因为Liberty将自己的服务泄露给了应用程序,所以现在Liberty注册的OSGi服务对应用程序是不可见的应用程序,除非您创建如下所示的功能以明确导出您需要的功能。