karaf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Guillaume Nodet (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (KARAF-4980) OSGi framework capabilities: add all services
Date Tue, 07 Feb 2017 07:48:41 GMT

    [ 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)

Mime
View raw message