In fact I guess that’s the problem, the event seems not to be fired before 
stopping bundles.

When all bundles react normally, i.e. they stop, I get the stopping event. When 
at least one does not stop as expected, then I get no stopping event. Would you 
be kind enough to try again with a non-stopping-bundle and displaying the event 
type?

Regards,
JP

De : Guillaume Nodet [mailto:gno...@apache.org]
Envoyé : vendredi 18 novembre 2016 16:40
À : user
Objet : Re: Karaf shutdown



2016-11-18 15:01 GMT+01:00 CLEMENT Jean-Philippe 
<jean-philippe.clem...@fr.thalesgroup.com<mailto:jean-philippe.clem...@fr.thalesgroup.com>>:
Did you also add a bundle which prevents stopping ?

No, but the first event is sent before actually stopping any bundle.


PS: in your traces which event is the shutdown itself?

It's not, because I paste a wrong output.
Here's the full output, and the interesting event is the first one.  It's 
should be a STOPPING event.


karaf@root()> ($.context bundle 0) stop 1                                       
                                                                                
                                   
org.osgi.framework.BundleEvent[source=org.eclipse.osgi_3.10.101.v20150820-1432 
[0]]

org.osgi.framework.BundleEvent[source=org.jline_3.0.1 [34]]

org.osgi.framework.BundleEvent[source=org.jline_3.0.1 [34]]

org.osgi.framework.BundleEvent[source=org.fusesource.jansi_1.14.0 [33]]

org.osgi.framework.BundleEvent[source=org.fusesource.jansi_1.14.0 [33]]

org.osgi.framework.BundleEvent[source=org.apache.sshd.core_1.2.0 [32]]

org.osgi.framework.BundleEvent[source=org.apache.sshd.core_1.2.0 [32]]

org.osgi.framework.BundleEvent[source=org.apache.servicemix.bundles.not-yet-commons-ssl_0.3.11.1
 [31]]

org.osgi.framework.BundleEvent[source=org.apache.servicemix.bundles.not-yet-commons-ssl_0.3.11.1
 [31]]
...


Regards,
JP

De : Guillaume Nodet [mailto:gno...@apache.org<mailto:gno...@apache.org>]
Envoyé : vendredi 18 novembre 2016 14:26

À : user
Objet : Re: Karaf shutdown

You must be doing something wrong.
I added this small bit of code to one of karaf's activators:

bundleContext.getBundle(0).getBundleContext().addBundleListener(new 
SynchronousBundleListener() {
    @Override
    public void bundleChanged(BundleEvent event) {
        System.out.println(event);
    }
});



Here's the output when stopping under equinox:

karaf@root()> ($.context bundle 0) stop 1                                       
                          
org.osgi.framework.BundleEvent[source=org.apache.karaf.shell.core_4.1.0.SNAPSHOT
 [28]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.shell.commands_4.1.0.SNAPSHOT
 [27]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.shell.commands_4.1.0.SNAPSHOT
 [27]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.service.core_4.1.0.SNAPSHOT
 [26]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.service.core_4.1.0.SNAPSHOT
 [26]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.package.core_4.1.0.SNAPSHOT
 [25]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.package.core_4.1.0.SNAPSHOT
 [25]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.management.server_4.1.0.SNAPSHOT
 [24]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.management.server_4.1.0.SNAPSHOT
 [24]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.log.core_4.1.0.SNAPSHOT 
[23]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.log.core_4.1.0.SNAPSHOT 
[23]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.kar.core_4.1.0.SNAPSHOT 
[22]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.kar.core_4.1.0.SNAPSHOT 
[22]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.jaas.modules_4.1.0.SNAPSHOT
 [21]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.jaas.modules_4.1.0.SNAPSHOT
 [21]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.jaas.config_4.1.0.SNAPSHOT
 [20]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.jaas.config_4.1.0.SNAPSHOT
 [20]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.jaas.command_4.1.0.SNAPSHOT
 [19]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.jaas.command_4.1.0.SNAPSHOT
 [19]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.instance.core_4.1.0.SNAPSHOT
 [18]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.instance.core_4.1.0.SNAPSHOT
 [18]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.features.command_4.1.0.SNAPSHOT
 [17]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.features.command_4.1.0.SNAPSHOT
 [17]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.diagnostic.core_4.1.0.SNAPSHOT
 [16]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.diagnostic.core_4.1.0.SNAPSHOT
 [16]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.config.core_4.1.0.SNAPSHOT
 [13]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.config.core_4.1.0.SNAPSHOT
 [13]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.bundle.core_4.1.0.SNAPSHOT
 [12]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.bundle.core_4.1.0.SNAPSHOT
 [12]]

org.osgi.framework.BundleEvent[source=org.apache.aries.jmx.whiteboard_1.1.5 
[10]]

org.osgi.framework.BundleEvent[source=org.apache.aries.jmx.whiteboard_1.1.5 
[10]]

org.osgi.framework.BundleEvent[source=org.apache.aries.jmx.core_1.1.7 [9]]

org.osgi.framework.BundleEvent[source=org.apache.aries.jmx.core_1.1.7 [9]]

org.osgi.framework.BundleEvent[source=org.apache.aries.jmx.api_1.1.5 [8]]

org.osgi.framework.BundleEvent[source=org.apache.aries.jmx.api_1.1.5 [8]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.deployer.features_4.1.0.SNAPSHOT
 [14]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.deployer.features_4.1.0.SNAPSHOT
 [14]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.deployer.kar_4.1.0.SNAPSHOT
 [15]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.deployer.kar_4.1.0.SNAPSHOT
 [15]]

org.osgi.framework.BundleEvent[source=org.apache.aries.util_1.1.3 [11]]

org.osgi.framework.BundleEvent[source=org.apache.aries.util_1.1.3 [11]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.features.core_4.1.0.SNAPSHOT
 [7]]

org.osgi.framework.BundleEvent[source=org.apache.karaf.features.core_4.1.0.SNAPSHOT
 [7]]

org.osgi.framework.BundleEvent[source=org.apache.felix.fileinstall_3.5.6 [6]]

org.osgi.framework.BundleEvent[source=org.apache.felix.fileinstall_3.5.6 [6]]

org.osgi.framework.BundleEvent[source=org.apache.felix.configadmin_1.8.12 [5]]

org.osgi.framework.BundleEvent[source=org.apache.felix.configadmin_1.8.12 [5]]

org.osgi.framework.BundleEvent[source=org.ops4j.pax.logging.pax-logging-log4j2_1.9.1
 [4]]

org.osgi.framework.BundleEvent[source=org.ops4j.pax.logging.pax-logging-log4j2_1.9.1
 [4]]

org.osgi.framework.BundleEvent[source=org.ops4j.pax.logging.pax-logging-api_1.9.1
 [3]]

org.osgi.framework.BundleEvent[source=org.ops4j.pax.logging.pax-logging-api_1.9.1
 [3]]

org.osgi.framework.BundleEvent[source=org.ops4j.pax.url.mvn_2.5.1 [2]]

org.osgi.framework.BundleEvent[source=org.ops4j.pax.url.mvn_2.5.1 [2]]

gnodet•apache-karaf-minimal/target/assembly(master⚡)»






2016-11-18 13:29 GMT+01:00 CLEMENT Jean-Philippe 
<jean-philippe.clem...@fr.thalesgroup.com<mailto:jean-philippe.clem...@fr.thalesgroup.com>>:
That’s exactly what I did. The listener is not called at all. Looking at 
bundles, some are Active, some Resolved, one Installed (OSGi System Bundle 
3.10.2.v20150203-1939) and one Waiting (one of mine).

public final class KarafStopper {
    private static final Logger LOG     = 
LogManager.getLogger(KarafStopper.class);
    private static final long   TIMEOUT = 3 * 1000;                             
  // in milliseconds

    private final Bundle        karaf;

    public KarafStopper(final BundleContext context) {
        System.out.println("=> blabla");
        karaf = context.getBundle(0);
        karaf.getBundleContext().addBundleListener(new 
SynchronousBundleListener() {
            @Override
            public void bundleChanged(final BundleEvent event) {
                System.out.println("Karaf: " + event.getType());
            }
        });
    }

    public void shutdown() {
        try {
            final Thread watchdog = new Thread(() -> {
                try {
                    Thread.sleep(TIMEOUT);
                    // Karaf refuses to stop
                    LOG.error(() -> "Karaf did not stop gracefully");
                    System.exit(-1);
                } catch (final InterruptedException e) {
                    // Karaf stopped normally
                }
            });

            watchdog.setDaemon(true);
            watchdog.start();
            System.out.println("Bye bye");
            karaf.stop(Bundle.STOP_TRANSIENT);
            System.out.println("So long!");
        } catch (final BundleException e) {
            System.out.println("Oooooooooooops: " + e);
            LOG.error(() -> "Issue while stopping karaf", e);
        }
    }
}

Regards,
JP

De : Guillaume Nodet [mailto:gno...@apache.org<mailto:gno...@apache.org>]
Envoyé : vendredi 18 novembre 2016 13:01

À : user
Objet : Re: Karaf shutdown

Can you write a simple SynchronousBundleListener that prints to stdout all 
received events and paste the output when stopping the framework for felix and 
equinox ?

2016-11-18 12:10 GMT+01:00 CLEMENT Jean-Philippe 
<jean-philippe.clem...@fr.thalesgroup.com<mailto:jean-philippe.clem...@fr.thalesgroup.com>>:
Well, that’s not the case when a bundle refuses to stop – I get no event. Ah I 
forgot to mention that Equinox is used instead of Felix.

May I open a bug for this?

Regards,
JP


De : Guillaume Nodet [mailto:gno...@apache.org<mailto:gno...@apache.org>]
Envoyé : vendredi 18 novembre 2016 11:52
À : user
Objet : Re: Karaf shutdown

The SynchronousBundleListener is the way to go.
You should receive a STOPPING event for the system bundle before any other 
bundle is actually stopped.

2016-11-18 11:38 GMT+01:00 CLEMENT Jean-Philippe 
<jean-philippe.clem...@fr.thalesgroup.com<mailto:jean-philippe.clem...@fr.thalesgroup.com>>:
Is there a way to get a shutdown event?

Regards,
JP

De : CLEMENT Jean-Philippe 
[mailto:jean-philippe.clem...@fr.thalesgroup.com<mailto:jean-philippe.clem...@fr.thalesgroup.com>]
Envoyé : jeudi 17 novembre 2016 17:03
À : user@karaf.apache.org<mailto:user@karaf.apache.org>
Objet : Karaf shutdown

Dear Karaf addicts :)

I would like Karaf to stop. This may fail to happen when (at least) a bundle 
does not end. So I added a watchdog which exits Java when a time limit has been 
exceeded (note: maybe there is already a way to do so - ?). The way I coded it 
does not work when the shutdown is made via the Karaf prompt, so I decided to 
enhance it.

Googling “Karaf shutdown hook”, I found an old thread talking about 
SynchronousBundleListener. The issue I’m facing is that I get no event when 
performing bundle0.stop(Bundle.STOP_TRANSIENT) and one of the bundles refuses 
to stop. The listener is registered via 
bundle0.getBundleContext().addBundleListener(new SynchronousBundleListener() { 
… }).

Is it normal? How to force Karaf to shutdown?

PS: Karaf version is 4.0.7

JP



--
------------------------
Guillaume Nodet
------------------------
Red Hat, Open Source Integration

Email: gno...@redhat.com<mailto:gno...@redhat.com>
Web: http://fusesource.com<http://fusesource.com/>
Blog: http://gnodet.blogspot.com/




--
------------------------
Guillaume Nodet
------------------------
Red Hat, Open Source Integration

Email: gno...@redhat.com<mailto:gno...@redhat.com>
Web: http://fusesource.com<http://fusesource.com/>
Blog: http://gnodet.blogspot.com/




--
------------------------
Guillaume Nodet
------------------------
Red Hat, Open Source Integration

Email: gno...@redhat.com<mailto:gno...@redhat.com>
Web: http://fusesource.com<http://fusesource.com/>
Blog: http://gnodet.blogspot.com/




--
------------------------
Guillaume Nodet
------------------------
Red Hat, Open Source Integration

Email: gno...@redhat.com<mailto:gno...@redhat.com>
Web: http://fusesource.com<http://fusesource.com/>
Blog: http://gnodet.blogspot.com/

Reply via email to