You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by njbartlett <gi...@git.apache.org> on 2018/01/10 09:40:54 UTC

[GitHub] felix pull request #130: New SCR commands

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 <nj...@...>
Date:   2018-01-10T09:25:00Z

    New SCR component commands

----


---

[GitHub] felix pull request #130: New SCR commands

Posted by njbartlett <gi...@git.apache.org>.
Github user njbartlett closed the pull request at:

    https://github.com/apache/felix/pull/130


---

Re: [GitHub] felix pull request #130: New SCR commands

Posted by Neil Bartlett <nj...@gmail.com>.
We definitely do see CompConfigDTOs for instances created from a
ComponentFactory, I tested this explicitly at the request of Ray.

I'm not sure if this is due to an R7 spec change or just a change in the
Felix SCR implementation.

Neil

On Thu, Jan 11, 2018 at 7:07 AM, David Jencks <da...@gmail.com>
wrote:

> As I recall (possibly wrongly) there are no ComponentConfigurationDTOs for
> instances created from a factory component, so a command based on DTOs
> would have had difficulty displaying info about them. Has this changed in
> the r7 spec, or, perhaps, is my recollection wrong?
>
> David Jencks
>
> Sent from my iPhone
>
> > On Jan 10, 2018, at 5:47 AM, Raymond Auge <ra...@liferay.com>
> wrote:
> >
> >> On Wed, Jan 10, 2018 at 7:50 AM, Neil Bartlett <nj...@gmail.com>
> wrote:
> >>
> >> I don't have much experience with Component Factories. I can try it
> out...
> >> if you have a sample bundle that I can test against that would be
> helpful.
> >>
> >
> > Ok, I can put something simple together.
> >
> > I know they are not much used, but since we made an update for these in
> the
> > latest DS spec w.r.t. factory configuration defaults I think it starts to
> > make more sense to include them in any reporting also.
> >
> > - Ray
> >
> >
> >>
> >> Neil
> >>
> >> On Wed, Jan 10, 2018 at 12:25 PM, Raymond Auge <
> raymond.auge@liferay.com>
> >> wrote:
> >>
> >>> +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 <gi...@git.apache.org>
> 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 <nj...@...>
> >>>> 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)
> >>>
> >>
> >
> >
> >
> > --
> > *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)
>

Re: [GitHub] felix pull request #130: New SCR commands

Posted by David Jencks <da...@gmail.com>.
As I recall (possibly wrongly) there are no ComponentConfigurationDTOs for instances created from a factory component, so a command based on DTOs would have had difficulty displaying info about them. Has this changed in the r7 spec, or, perhaps, is my recollection wrong?

David Jencks 

Sent from my iPhone

> On Jan 10, 2018, at 5:47 AM, Raymond Auge <ra...@liferay.com> wrote:
> 
>> On Wed, Jan 10, 2018 at 7:50 AM, Neil Bartlett <nj...@gmail.com> wrote:
>> 
>> I don't have much experience with Component Factories. I can try it out...
>> if you have a sample bundle that I can test against that would be helpful.
>> 
> 
> Ok, I can put something simple together.
> 
> I know they are not much used, but since we made an update for these in the
> latest DS spec w.r.t. factory configuration defaults I think it starts to
> make more sense to include them in any reporting also.
> 
> - Ray
> 
> 
>> 
>> Neil
>> 
>> On Wed, Jan 10, 2018 at 12:25 PM, Raymond Auge <ra...@liferay.com>
>> wrote:
>> 
>>> +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 <gi...@git.apache.org> 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 <nj...@...>
>>>> 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)
>>> 
>> 
> 
> 
> 
> -- 
> *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)

Re: [GitHub] felix pull request #130: New SCR commands

Posted by Neil Bartlett <nj...@gmail.com>.
On Thu, Jan 11, 2018 at 6:43 AM, David Jencks <da...@gmail.com>
wrote:

> It looks to me as if your patch results in there no longer being an
> ScrInfo service registered. The people using it might possibly not
> appreciate its removal. I think you should remove the interface and change
> the version appropriately to make clear what is going on, or else provide
> the service.
>

Thanks for your feedback David. I agree I probably need to restore the
ScrInfo service implementation, as a wrapper around the new command object,
since I don't want this change to be breaking.


>
> I was never able to figure out how to get the Gogo annotations to work if
> Gogo was loaded after ds. Have you solved this problem? As I recall the
> commands were available in Gogo but the help about them was not.
>

That's not something I have tested... or was aware needed to be tested ;-)

I will take a look. If it remains an issue then I suspect the fix needs to
be in Gogo rather than in the command class.

Neil



>
> Thanks
> David Jencks
>
> Sent from my iPhone
>
> > On Jan 10, 2018, at 5:47 AM, Raymond Auge <ra...@liferay.com>
> wrote:
> >
> >> On Wed, Jan 10, 2018 at 7:50 AM, Neil Bartlett <nj...@gmail.com>
> wrote:
> >>
> >> I don't have much experience with Component Factories. I can try it
> out...
> >> if you have a sample bundle that I can test against that would be
> helpful.
> >>
> >
> > Ok, I can put something simple together.
> >
> > I know they are not much used, but since we made an update for these in
> the
> > latest DS spec w.r.t. factory configuration defaults I think it starts to
> > make more sense to include them in any reporting also.
> >
> > - Ray
> >
> >
> >>
> >> Neil
> >>
> >> On Wed, Jan 10, 2018 at 12:25 PM, Raymond Auge <
> raymond.auge@liferay.com>
> >> wrote:
> >>
> >>> +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 <gi...@git.apache.org>
> 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 <nj...@...>
> >>>> 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)
> >>>
> >>
> >
> >
> >
> > --
> > *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)
>

Re: [GitHub] felix pull request #130: New SCR commands

Posted by David Jencks <da...@gmail.com>.
It looks to me as if your patch results in there no longer being an ScrInfo service registered. The people using it might possibly not appreciate its removal. I think you should remove the interface and change the version appropriately to make clear what is going on, or else provide the service.

I was never able to figure out how to get the Gogo annotations to work if Gogo was loaded after ds. Have you solved this problem? As I recall the commands were available in Gogo but the help about them was not.

Thanks
David Jencks 

Sent from my iPhone

> On Jan 10, 2018, at 5:47 AM, Raymond Auge <ra...@liferay.com> wrote:
> 
>> On Wed, Jan 10, 2018 at 7:50 AM, Neil Bartlett <nj...@gmail.com> wrote:
>> 
>> I don't have much experience with Component Factories. I can try it out...
>> if you have a sample bundle that I can test against that would be helpful.
>> 
> 
> Ok, I can put something simple together.
> 
> I know they are not much used, but since we made an update for these in the
> latest DS spec w.r.t. factory configuration defaults I think it starts to
> make more sense to include them in any reporting also.
> 
> - Ray
> 
> 
>> 
>> Neil
>> 
>> On Wed, Jan 10, 2018 at 12:25 PM, Raymond Auge <ra...@liferay.com>
>> wrote:
>> 
>>> +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 <gi...@git.apache.org> 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 <nj...@...>
>>>> 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)
>>> 
>> 
> 
> 
> 
> -- 
> *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)

Re: [GitHub] felix pull request #130: New SCR commands

Posted by Raymond Auge <ra...@liferay.com>.
On Wed, Jan 10, 2018 at 7:50 AM, Neil Bartlett <nj...@gmail.com> wrote:

> I don't have much experience with Component Factories. I can try it out...
> if you have a sample bundle that I can test against that would be helpful.
>

Ok, I can put something simple together.

I know they are not much used, but since we made an update for these in the
latest DS spec w.r.t. factory configuration defaults I think it starts to
make more sense to include them in any reporting also.

- Ray


>
> Neil
>
> On Wed, Jan 10, 2018 at 12:25 PM, Raymond Auge <ra...@liferay.com>
> wrote:
>
> > +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 <gi...@git.apache.org> 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 <nj...@...>
> > > 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)
> >
>



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

Re: [GitHub] felix pull request #130: New SCR commands

Posted by Neil Bartlett <nj...@gmail.com>.
I don't have much experience with Component Factories. I can try it out...
if you have a sample bundle that I can test against that would be helpful.

Neil

On Wed, Jan 10, 2018 at 12:25 PM, Raymond Auge <ra...@liferay.com>
wrote:

> +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 <gi...@git.apache.org> 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 <nj...@...>
> > 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)
>

Re: [GitHub] felix pull request #130: New SCR commands

Posted by Raymond Auge <ra...@liferay.com>.
+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 <gi...@git.apache.org> 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 <nj...@...>
> 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)