[ 
https://issues.apache.org/jira/browse/FELIX-4294?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14060093#comment-14060093
 ] 

Pierre De Rop commented on FELIX-4294:
--------------------------------------

The org.apache.felix.dm package version  should now be bumped to 3.1.0 instead 
of 3.0.0, because the ComponentDeclaration interface has been modified with the 
following (API compatible) methods, in order to be able to implement this 
FELIX-4294 new feature.

{code}
+    /** Returns the class name of the Component implementation. */
+    public String getClassName();

+    /** Returns the service optionally provided by this component, or null */
+    public String[] getServices();

+    /** Returns the service properties, or null */
+    public Dictionary getServiceProperties();     

+    /** Returns the instance id of this component. */
+    public long getId();
{code}

So, in the core/pom.xml, I'm now exporting org.apache.felix.dm package to 3.1.0 
instead of 3.0.0:

{code}
                        
<Export-Package>org.apache.felix.dm;version="3.1.0";provide:=true,org.apache.felix.dm.tracker;version="3.1.0";provide:=true</Export-Package>
{code}

> 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
>         Attachments: FELIX-4294.patch
>
>
> 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.2#6252)

Reply via email to