+1 I've been meaning for a long time to improve the output. Yours looks very good.
Does it support component factory instances? I don't think the original one does. - Ray On Wed, Jan 10, 2018 at 4:40 AM, njbartlett <[email protected]> wrote: > GitHub user njbartlett opened a pull request: > > https://github.com/apache/felix/pull/130 > > New SCR commands > > New SCR Commands > ================ > > This is a reimplementation of the `scr:list` and `scr:info` commands, > presented in a more compact and accessible way. The proposal is to > implement these commands on the R7 branch only, to be included in SCR 2.1.x. > > Changes include: > > - Support for DS 1.4 failed activation state and failure message. > - Provide information on any service registered by the component, > including service ID and using bundles. > - The `scr:list` and `scr:info` commands simply return DTO objects to > the Gogo Shell. These objects are then formatted by an instance of the > `Converter` service. This is more in keeping with the philosophy of Gogo, > since it allows others to write commands that produce DTO objects without > having to provide their own formatting. > - Support for the legacy Felix Shell is dropped, only Gogo is > supported. > > Example Output > -------------- > > The following is an example of the output of the new commands: > > > g! scr:list > com.effectiveosgi.rt.aws.s3 in bundle [1] > (com.effectiveosgi.rt.aws:2.0.0.201801100857) enabled, 0 instances. > com.effectiveosgi.rt.aws.impl.S3ObjectConverter in bundle [1] > (com.effectiveosgi.rt.aws:2.0.0.201801100857) enabled, 1 instance. > Id: 0, State:ACTIVE > com.effectiveosgi.ExampleComponent in bundle [6] > (example:1.0.0.201801100858) enabled, 3 instances. > Id: 1, State:ACTIVE, PID(s): [com.effectiveosgi. > ExampleComponent~three] > Id: 2, State:ACTIVE, PID(s): [com.effectiveosgi. > ExampleComponent~two] > Id: 3, State:ACTIVE, PID(s): [com.effectiveosgi. > ExampleComponent~one] > com.effectiveosgi.SampleRunnable in bundle [6] > (example:1.0.0.201801100858) enabled, 1 instance. > Id: 4, State:ACTIVE > > g! scr:info 4 > Component Description: com.effectiveosgi.SampleRunnable > ======================================================= > Class: com.effectiveosgi.SampleRunnable > Bundle: 6 (example:1.0.0.201801100858) > Enabled: true > Immediate: false > Services: [java.lang.Runnable] > Scope: prototype > Config PID(s): [com.effectiveosgi.SampleRunnable], Policy: > optional > Base Props: (0 entries) > > Component Configuration Id: 4 > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > State: ACTIVE > Service Id: 52 [java.lang.Runnable] > Used by bundle [6] (example:1.0.0.201801100858) > Config Props: (2 entries) > component.id<Long> = 4 > component.name<String> = com.effectiveosgi.SampleRunnable > References: (total 0) > > g! scr:info 3 > Component Description: com.effectiveosgi.ExampleComponent > ========================================================= > Class: com.effectiveosgi.ExampleComponent > Bundle: 6 (example:1.0.0.201801100858) > Enabled: true > Immediate: true > Services: <<none>> > Config PID(s): [com.effectiveosgi.ExampleComponent], Policy: > optional > Base Props: (0 entries) > > Component Configuration Id: 3 > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > State: ACTIVE > Config Props: (6 entries) > _com.effectiveosgi.rt.config.filePath<String> = > /Users/neil.bartlett/Projects/eosgi-runtime/_assembly/load/ > http-config.yaml > component.id<Long> = 3 > component.name<String> = com.effectiveosgi.ExampleComponent > port<Integer> = 8001 > service.factoryPid<String> = com.effectiveosgi.ExampleComponent > service.pid<String> = com.effectiveosgi.ExampleComponent~one > References: (total 1) > runnable: java.lang.Runnable SATISFIED > 1..1 static target=(*) scope=prototype_required > Bound to [52] from bundle [6] example:1.0.0.201801100858 > > For reference, here is the equivalent output from the previous command > implementation: > > g! scr:list > BundleId Component Name Default State > Component Id State PIDs (Factory PID) > [ 1] com.effectiveosgi.rt.aws.impl.S3ObjectConverter enabled > [ 0] [active ] > [ 1] com.effectiveosgi.rt.aws.s3 enabled > [ 7] com.effectiveosgi.ExampleComponent enabled > [ 1] [active ] com.effectiveosgi.ExampleComponent~three > (com.effectiveosgi.ExampleComponent ) > [ 2] [active ] com.effectiveosgi.ExampleComponent~two > (com.effectiveosgi.ExampleComponent ) > [ 3] [active ] com.effectiveosgi.ExampleComponent~one > (com.effectiveosgi.ExampleComponent ) > [ 7] com.effectiveosgi.SampleRunnable enabled > [ 4] [active ] > g! scr:info 4 > *** Bundle: example (7) > Component Description: > Name: com.effectiveosgi.SampleRunnable > Implementation Class: com.effectiveosgi.SampleRunnable > Default State: enabled > Activation: delayed > Configuration Policy: optional > Activate Method: activate > Deactivate Method: deactivate > Modified Method: - > Configuration Pid: [com.effectiveosgi.SampleRunnable] > Services: > java.lang.Runnable > Service Scope: prototype > Component Description Properties: > Component Configuration: > ComponentId: 4 > State: active > Component Configuration Properties: > component.id = 4 > component.name = com.effectiveosgi.SampleRunnable > > g! scr:info 3 > *** Bundle: example (7) > Component Description: > Name: com.effectiveosgi.ExampleComponent > Implementation Class: com.effectiveosgi.ExampleComponent > Default State: enabled > Activation: immediate > Configuration Policy: optional > Activate Method: activate > Deactivate Method: deactivate > Modified Method: - > Configuration Pid: [com.effectiveosgi.ExampleComponent] > Reference: runnable > Interface Name: java.lang.Runnable > Cardinality: 1..1 > Policy: static > Policy option: reluctant > Reference Scope: prototype_required > Component Description Properties: > Component Configuration: > ComponentId: 3 > State: active > SatisfiedReference: runnable > Target: null > Bound to: 53 > Reference Properties: > component.id = 4 > component.name = com.effectiveosgi.SampleRunnable > objectClass = [java.lang.Runnable] > service.bundleid = 7 > service.id = 53 > service.scope = bundle > Component Configuration Properties: > _com.effectiveosgi.rt.config.filePath = > /Users/neil.bartlett/Projects/eosgi-runtime/_assembly/load/ > http-config.yaml > component.id = 3 > component.name = com.effectiveosgi.ExampleComponent > port = 8001 > service.factoryPid = com.effectiveosgi.ExampleComponent > service.pid = com.effectiveosgi.ExampleComponent~one > > > > You can merge this pull request into a Git repository by running: > > $ git pull https://github.com/njbartlett/felix scrcommands > > Alternatively you can review and apply these changes as the patch at: > > https://github.com/apache/felix/pull/130.patch > > To close this pull request, make a commit to your master/trunk branch > with (at least) the following in the commit message: > > This closes #130 > > ---- > commit 7a6f6d08008b54c6f3cd272ac3c0540f1b95d22c > Author: Neil Bartlett <njbartlett@...> > Date: 2018-01-10T09:25:00Z > > New SCR component commands > > ---- > > > --- > -- *Raymond Augé* <http://www.liferay.com/web/raymond.auge/profile> (@rotty3000) Senior Software Architect *Liferay, Inc.* <http://www.liferay.com> (@Liferay) Board Member & EEG Co-Chair, OSGi Alliance <http://osgi.org> (@OSGiAlliance)
