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

----


---

Reply via email to