[
https://issues.apache.org/jira/browse/KARAF-4980?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15855498#comment-15855498
]
Guillaume Nodet commented on KARAF-4980:
----------------------------------------
It would be nice to add the karaf service:
{code}
org.osgi.framework.system.capabilities= \
${eecap-${java.specification.version}}, \
${${karaf.framework}-capabilities}, \
osgi.service;effective:=active;objectClass=org.apache.karaf.info.ServerInfo
{code}
I also think the {{DebugOptionsListener}} should not be listed as they are not
supposed to be used, they're part of a whiteboard pattern. Although, I suppose
the {{Location}} services are only usefull if given with the {{type}} attribute:
{code}
osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.datalocation.Location;type=osgi.user.area,
\
osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.datalocation.Location;type=osgi.instance.area,
\
osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.datalocation.Location;type=osgi.configuration.area,
\
osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.datalocation.Location;type=osgi.install.area,
\
osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.datalocation.Location;type=eclipse.home.location,
\
{code}
I think other non standard attributes should be kept:
{code}
osgi.service;effective:=active;objectClass=java.lang.ClassLoader;equinox.classloader.type=contextClassLoader,
\
osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.urlconversion.URLConverter;protocol:List<String>="bundleentry,bundleresource",
\
osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.security.TrustEngine;osgi.signedcontent.trust.engine=org.eclipse.osgi
{code}
Anyway, I came up with this small script that can be run in the console:
{code}
each (($.context bundle 0) registeredServices) {
ref = $it
msg = "osgi.service;effective:=active;"
classes = new ArrayList
each ($ref getProperty objectClass) {
$classes add $it
}
nbClasses = ($classes size)
if { %(nbClasses > 1) } {
msg = "${msg}objectClass:List<String>=\\"${(j:,:)classes}\\""
} {
cls = ($classes get 0)
msg = "${msg}objectClass=${cls}"
}
each ($ref getPropertyKeys) {
if { $it startsWith "service." } {
continue
}
if { $it equals "objectClass" } {
continue
}
key = $it
val = ($ref getProperty $key)
if { "$val" startsWith "[" } {
msg = "${msg};${key}:List<String>=\\"${(j:,:)val}\\""
} {
msg = "${msg};${key}=${val}"
}
}
echo $msg
}
{code}
Here's the trimmed and sorted output in the equinox case:
{code}
osgi.service;effective:=active;objectClass=java.lang.ClassLoader;equinox.classloader.type=contextClassLoader
osgi.service;effective:=active;objectClass=javax.xml.parsers.DocumentBuilderFactory
osgi.service;effective:=active;objectClass=javax.xml.parsers.SAXParserFactory
osgi.service;effective:=active;objectClass=org.eclipse.osgi.framework.log.FrameworkLog
osgi.service;effective:=active;objectClass=org.eclipse.osgi.framework.log.FrameworkLog;performance=true
osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.datalocation.Location;type=eclipse.home.location
osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.datalocation.Location;type=osgi.configuration.area
osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.datalocation.Location;type=osgi.install.area
osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.datalocation.Location;type=osgi.instance.area
osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.datalocation.Location;type=osgi.user.area
osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.debug.DebugOptions
osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.environment.EnvironmentInfo
osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.localization.BundleLocalization
osgi.service;effective:=active;objectClass:List<String>="org.osgi.service.log.LogReaderService,org.eclipse.equinox.log.ExtendedLogReaderService"
osgi.service;effective:=active;objectClass:List<String>="org.osgi.service.log.LogService,org.eclipse.equinox.log.ExtendedLogService"
osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.security.TrustEngine;osgi.signedcontent.trust.engine=org.eclipse.osgi
osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.urlconversion.URLConverter;protocol:List<String>="bundleentry,bundleresource"
osgi.service;effective:=active;objectClass=org.eclipse.osgi.signedcontent.SignedContentFactory
osgi.service;effective:=active;objectClass=org.osgi.service.condpermadmin.ConditionalPermissionAdmin
osgi.service;effective:=active;objectClass=org.osgi.service.packageadmin.PackageAdmin
osgi.service;effective:=active;objectClass=org.osgi.service.permissionadmin.PermissionAdmin
osgi.service;effective:=active;objectClass=org.osgi.service.resolver.Resolver
osgi.service;effective:=active;objectClass=org.osgi.service.startlevel.StartLevel
{code}
> OSGi framework capabilities: add all services
> ---------------------------------------------
>
> Key: KARAF-4980
> URL: https://issues.apache.org/jira/browse/KARAF-4980
> Project: Karaf
> Issue Type: Improvement
> Components: karaf-core
> Affects Versions: 4.1.0
> Reporter: Markus Rathgeb
> Assignee: Guillaume Nodet
>
> The services provided by the Felix and the Equinox framework differs and
> should be provided by the system capabilities.
> I used service:list to find the services that are provided by Felix and the
> ones that are provided by Equinox.
> I would like to propagate this change to the config.properties (I will create
> a PR if you agree):
> {noformat}
> org.osgi.framework.system.capabilities= \
> ${eecap-${java.specification.version}}, \
> ${${karaf.framework}-capabilities}
> felix-capabilities= \
>
> osgi.service;effective:=active;objectClass=org.osgi.service.packageadmin.PackageAdmin,
> \
>
> osgi.service;effective:=active;objectClass=org.osgi.service.resolver.Resolver,
> \
>
> osgi.service;effective:=active;objectClass=org.osgi.service.startlevel.StartLevel
> equinox-capabilities= \
> osgi.service;effective:=active;objectClass=java.lang.ClassLoader, \
>
> osgi.service;effective:=active;objectClass=javax.xml.parsers.DocumentBuilderFactory,
> \
>
> osgi.service;effective:=active;objectClass=javax.xml.parsers.SAXParserFactory,
> \
>
> osgi.service;effective:=active;objectClass=org.eclipse.equinox.log.ExtendedLogReaderService,
> \
>
> osgi.service;effective:=active;objectClass=org.eclipse.equinox.log.ExtendedLogService,
> \
>
> osgi.service;effective:=active;objectClass=org.eclipse.osgi.framework.log.FrameworkLog,
> \
>
> osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.datalocation.Location,
> \
>
> osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.debug.DebugOptions,
> \
>
> osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.debug.DebugOptionsListener,
> \
>
> osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.environment.EnvironmentInfo,
> \
>
> osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.localization.BundleLocalization,
> \
>
> osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.security.TrustEngine,
> \
>
> osgi.service;effective:=active;objectClass=org.eclipse.osgi.service.urlconversion.URLConverter,
> \
>
> osgi.service;effective:=active;objectClass=org.eclipse.osgi.signedcontent.SignedContentFactory,
> \
>
> osgi.service;effective:=active;objectClass=org.osgi.service.condpermadmin.ConditionalPermissionAdmin,
> \
>
> osgi.service;effective:=active;objectClass=org.osgi.service.log.LogReaderService,
> \
> osgi.service;effective:=active;objectClass=org.osgi.service.log.LogService, \
>
> osgi.service;effective:=active;objectClass=org.osgi.service.packageadmin.PackageAdmin,
> \
>
> osgi.service;effective:=active;objectClass=org.osgi.service.permissionadmin.PermissionAdmin,
> \
>
> osgi.service;effective:=active;objectClass=org.osgi.service.resolver.Resolver,
> \
>
> osgi.service;effective:=active;objectClass=org.osgi.service.startlevel.StartLevel
> {noformat}
> The currently configuration also contains:
> {noformat}
> osgi.service;effective:=active;objectClass=org.osgi.service.url.URLHandlers
> {noformat}
> but this service is not listed by service:list.
> Is it still valid?
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)