You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Pierre De Rop (JIRA)" <ji...@apache.org> on 2013/10/27 20:04:30 UTC

[jira] [Created] (FELIX-4294) Dependency Manager Shell improvements

Pierre De Rop created FELIX-4294:
------------------------------------

             Summary: Dependency Manager Shell improvements
                 Key: FELIX-4294
                 URL: https://issues.apache.org/jira/browse/FELIX-4294
             Project: Felix
          Issue Type: Improvement
          Components: Dependency Manager
    Affects Versions: dependencymanager-3.1.0
            Reporter: Pierre De Rop
            Assignee: Pierre De Rop
            Priority: Minor


This issue proposes two enhancements regarding the dependency manager shell.

1) display component names more consistently
=====================================

- some components are sometimes displayed with a "class " prefix, while others are not:

class org.amdatu.multitenant.adapter.TenantAdapter registered
org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM,bundle.id=18) registered

For readability, the "class " could be just removed.

- When a component does not contain any service properties, an empty "()" is displayed after the component name

pierre.multitenant.both.Both() registered
 org.amdatu.multitenant.TenantLifeCycleListener(org.amdatu.tenant.binding=3) registered

As in previous case and for readability, it makes sense to not append an empty "()" after the component name, if it has no properties.

2) add "filter" and "nofilters" options for filter displayed components
=====================================================

By default, the  "dm"  shell command dumps all components. But sometimes, it is desirable to display a subset of all components, 
using a regular expression on the component name or on the component service properties.
We can of course do this using gogo shell "grep", but the problem is that we may miss some important informations, like the component bundle id, or the component dependencies.

As an example, let's assume we are using the AMDATU mutli-tenancy framework. With AMDATU MT, many internal AMDATU components are instantiated behind the scene for a given tenant bundle.
In the following example, we have three tenant bundles, and if we type "dm", then we are getting a long list of components, including:

  - application tenant components: pierre.multitenant.*
  - some internal amdatu mt components (org.amdatu.multitenant.*):

g! dm
[2] org.amdatu.multitenant.conf
  org.osgi.service.cm.ManagedServiceFactory(service.pid=org.amdatu.tenant.factory) registered
    org.amdatu.multitenant.TenantFactoryConfiguration service required available
    org.osgi.service.log.LogService service optional available
[3] org.amdatu.multitenant.factory
  org.amdatu.multitenant.TenantFactoryConfiguration() registered
    org.osgi.service.log.LogService service optional available
    org.amdatu.multitenant.TenantLifeCycleListener service optional available
  org.amdatu.multitenant.Tenant(service.pid=org.amdatu.tenant.factory.91a788f0-da4f-405d-a643-b220f4b2bcee,org.amdatu.tenant.pid=org.amdatu.tenant.factory.91a788f0-da4f-405d-a643-b220f4b2bcee,service.factoryPid=org.amdatu.tenant.factory,org.amdatu.tenant.name=bar2,felix.fileinstall.filename=file:/home/nxuser/work/osgi/amdatu/felix-framework-4.2.1/load/org.amdatu.tenant.factory-2.cfg,foo=bar) registered
  org.amdatu.multitenant.Tenant(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM,org.amdatu.tenant.name=Platform Tenant) registered
  org.amdatu.multitenant.Tenant(service.pid=org.amdatu.tenant.factory.f4d53487-5a51-480c-9f67-ba64d657986c,org.amdatu.tenant.pid=org.amdatu.tenant.factory.f4d53487-5a51-480c-9f67-ba64d657986c,service.factoryPid=org.amdatu.tenant.factory,felix.fileinstall.filename=file:/home/nxuser/work/osgi/amdatu/felix-framework-4.2.1/load/org.amdatu.tenant.factory-1.cfg,foo=bar2) registered
[5] org.amdatu.multitenant.org.apache.felix.dependencymanager.runtime
  class org.apache.felix.dm.runtime.DependencyManagerRuntime registered
    org.osgi.service.log.LogService service optional unavailable
    active (DependencyManager-Component=*) bundle optional unavailable
  org.amdatu.multitenant.TenantLifeCycleListener(org.amdatu.tenant.binding=3) registered
  Adapter for interface org.amdatu.multitenant.Tenant registered
    org.amdatu.multitenant.Tenant service optional available
    org.osgi.service.log.LogService service optional available
  class org.amdatu.multitenant.adapter.TenantAdapter registered
    org.amdatu.multitenant.Tenant (|(service.id=32)(org.apache.felix.dependencymanager.aspect=32)) service required available
    org.osgi.service.log.LogService service optional available
    org.amdatu.multitenant.adapter.BundleDataStore (&(org.amdatu.tenant.pid=org.amdatu.tenant.factory.91a788f0-da4f-405d-a643-b220f4b2bcee)(bundle.id=5)) service required available
  class org.amdatu.multitenant.adapter.TenantAdapter registered
    org.amdatu.multitenant.Tenant (|(service.id=33)(org.apache.felix.dependencymanager.aspect=33)) service required available
    org.osgi.service.log.LogService service optional available
    org.amdatu.multitenant.adapter.BundleDataStore (&(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM)(bundle.id=5)) service required available
  class org.amdatu.multitenant.adapter.TenantAdapter registered
    org.amdatu.multitenant.Tenant (|(service.id=34)(org.apache.felix.dependencymanager.aspect=34)) service required available
    org.osgi.service.log.LogService service optional available
    org.amdatu.multitenant.adapter.BundleDataStore (&(org.amdatu.tenant.pid=org.amdatu.tenant.factory.f4d53487-5a51-480c-9f67-ba64d657986c)(bundle.id=5)) service required available
  org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.factory.91a788f0-da4f-405d-a643-b220f4b2bcee,bundle.id=5) registered
  org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM,bundle.id=5) registered
  org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.factory.f4d53487-5a51-480c-9f67-ba64d657986c,bundle.id=5) registered
  class org.apache.felix.dm.runtime.DependencyManagerRuntime registered
    org.osgi.service.log.LogService service optional unavailable
    active (DependencyManager-Component=*) bundle optional unavailable
  class org.apache.felix.dm.runtime.DependencyManagerRuntime registered
    org.osgi.service.log.LogService service optional unavailable
    active (DependencyManager-Component=*) bundle optional unavailable
[16] pierre.multitenant.tenant
  pierre.multitenant.tenant.Tenant2() registered
  class pierre.multitenant.tenant.Tenant1 registered
    pierre.multitenant.tenant.Tenant2 service required available
    org.osgi.service.log.LogService service required available
    pierre.multitenant.both.Both service required available
    pierre.multitenant.platform.Platform service required available
  pierre.multitenant.tenant.Tenant2() registered
  class pierre.multitenant.tenant.Tenant1 registered
    pierre.multitenant.tenant.Tenant2 service required available
    org.osgi.service.log.LogService service required available
    pierre.multitenant.both.Both service required available
    pierre.multitenant.platform.Platform service required available
  org.amdatu.multitenant.TenantLifeCycleListener(org.amdatu.tenant.binding=2) registered
  Adapter for interface org.amdatu.multitenant.Tenant with filter (!(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM)) registered
    org.amdatu.multitenant.Tenant (!(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM)) service optional available
    org.osgi.service.log.LogService service optional available
  class org.amdatu.multitenant.adapter.TenantAdapter registered
    org.amdatu.multitenant.Tenant (|(service.id=32)(org.apache.felix.dependencymanager.aspect=32)) service required available
    org.osgi.service.log.LogService service optional available
    org.amdatu.multitenant.adapter.BundleDataStore (&(org.amdatu.tenant.pid=org.amdatu.tenant.factory.91a788f0-da4f-405d-a643-b220f4b2bcee)(bundle.id=16)) service required available
  class org.amdatu.multitenant.adapter.TenantAdapter registered
    org.amdatu.multitenant.Tenant (|(service.id=34)(org.apache.felix.dependencymanager.aspect=34)) service required available
    org.osgi.service.log.LogService service optional available
    org.amdatu.multitenant.adapter.BundleDataStore (&(org.amdatu.tenant.pid=org.amdatu.tenant.factory.f4d53487-5a51-480c-9f67-ba64d657986c)(bundle.id=16)) service required available
  org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.factory.91a788f0-da4f-405d-a643-b220f4b2bcee,bundle.id=16) registered
  org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.factory.f4d53487-5a51-480c-9f67-ba64d657986c,bundle.id=16) registered
[17] pierre.multitenant.platform
  org.amdatu.multitenant.TenantLifeCycleListener(org.amdatu.tenant.binding=1) registered
  Adapter for interface org.amdatu.multitenant.Tenant with filter (org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM) registered
    org.amdatu.multitenant.Tenant (org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM) service optional available
    org.osgi.service.log.LogService service optional available
  class org.amdatu.multitenant.adapter.TenantAdapter registered
    org.amdatu.multitenant.Tenant (|(service.id=33)(org.apache.felix.dependencymanager.aspect=33)) service required available
    org.osgi.service.log.LogService service optional available
    org.amdatu.multitenant.adapter.BundleDataStore (&(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM)(bundle.id=17)) service required available
  org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM,bundle.id=17) registered
  pierre.multitenant.platform.Platform() registered
    org.osgi.service.log.LogService service required available
    pierre.multitenant.both.Both service required available
[18] pierre.multitenant.both
  pierre.multitenant.both.Both() registered
  org.amdatu.multitenant.TenantLifeCycleListener(org.amdatu.tenant.binding=3) registered
  Adapter for interface org.amdatu.multitenant.Tenant registered
    org.amdatu.multitenant.Tenant service optional available
    org.osgi.service.log.LogService service optional available
  class org.amdatu.multitenant.adapter.TenantAdapter registered
    org.amdatu.multitenant.Tenant (|(service.id=32)(org.apache.felix.dependencymanager.aspect=32)) service required available
    org.osgi.service.log.LogService service optional available
    org.amdatu.multitenant.adapter.BundleDataStore (&(org.amdatu.tenant.pid=org.amdatu.tenant.factory.91a788f0-da4f-405d-a643-b220f4b2bcee)(bundle.id=18)) service required available
  class org.amdatu.multitenant.adapter.TenantAdapter registered
    org.amdatu.multitenant.Tenant (|(service.id=33)(org.apache.felix.dependencymanager.aspect=33)) service required available
    org.osgi.service.log.LogService service optional available
    org.amdatu.multitenant.adapter.BundleDataStore (&(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM)(bundle.id=18)) service required available
  class org.amdatu.multitenant.adapter.TenantAdapter registered
    org.amdatu.multitenant.Tenant (|(service.id=34)(org.apache.felix.dependencymanager.aspect=34)) service required available
    org.osgi.service.log.LogService service optional available
    org.amdatu.multitenant.adapter.BundleDataStore (&(org.amdatu.tenant.pid=org.amdatu.tenant.factory.f4d53487-5a51-480c-9f67-ba64d657986c)(bundle.id=18)) service required available
  org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.factory.91a788f0-da4f-405d-a643-b220f4b2bcee,bundle.id=18) registered
  org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM,bundle.id=18) registered
  org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.factory.f4d53487-5a51-480c-9f67-ba64d657986c,bundle.id=18) registered
  pierre.multitenant.both.Both() registered
  pierre.multitenant.both.Both() registered




So, what we would like to do is to be able to filter the displayed components with a new filter option.
For example: To display only the application components matching "pierre.multitenant.*:

g! dm filter pierre.multitenant.*
Current component filters:[pierre.multitenant.*]

g! dm
[16] pierre.multitenant.tenant
  pierre.multitenant.tenant.Tenant2() registered
  pierre.multitenant.tenant.Tenant2() registered
[17] pierre.multitenant.platform
  pierre.multitenant.platform.Platform() registered
    org.osgi.service.log.LogService service required available
    pierre.multitenant.both.Both service required available
[18] pierre.multitenant.both
  pierre.multitenant.both.Both() registered
  pierre.multitenant.both.Both() registered
  pierre.multitenant.both.Both() registered

To display all PLATFORM tenants:

g! dm nofilters
g! dm filter .*pid=org.amdatu.tenant.PLATFORM.*
g! dm
[3] org.amdatu.multitenant.factory
  org.amdatu.multitenant.Tenant(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM,org.amdatu.tenant.name=Platform Tenant) registered
[5] org.amdatu.multitenant.org.apache.felix.dependencymanager.runtime
  org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM,bundle.id=5) registered
[16] pierre.multitenant.tenant
  Adapter for interface org.amdatu.multitenant.Tenant with filter (!(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM)) registered
    org.amdatu.multitenant.Tenant (!(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM)) service optional available
    org.osgi.service.log.LogService service optional available
[17] pierre.multitenant.platform
  Adapter for interface org.amdatu.multitenant.Tenant with filter (org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM) registered
    org.amdatu.multitenant.Tenant (org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM) service optional available
    org.osgi.service.log.LogService service optional available
  org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM,bundle.id=17) registered
[18] pierre.multitenant.both
  org.amdatu.multitenant.adapter.BundleDataStore(org.amdatu.tenant.pid=org.amdatu.tenant.PLATFORM,bundle.id=18) registered


To display every components except any components having the service property "org.amdatu.tenant.name=bar2":

g! dm nofilters
g! dm filter !.*org.amdatu.tenant.name=bar2.*


- Filters are cumulative: you can call "dm filter XXX" multiple times and each filter can have multiple regex (space separated).
- Components are displayed only if their name or their service properties are matching at least one of the the specified filter.
- Filters can be negated, using the special "!" prefix.
- "dm filter" without any arguments just displays the current filters.
- "dm nofilters" disable every previously added filter.




--
This message was sent by Atlassian JIRA
(v6.1#6144)