Guillaume,

Will the maven-bundle-plugin be updated to allow the use of Karaf-Activator
in a maven build?  Also, I'm unclear as to the use-case this addresses.
Could you provide some background so us lowly adopters can begin using it? 
Also, what release will this new functionality be included in?


Guillaume Nodet wrote
> 
> I use a non standard header for two reasons:
>   * the jar does not need to be a bundle (i.e. it most certainly does not
> contain any osgi metadata and is not deployed as a bundle)
>   * this is a karaf specific feature (even if reusing the osgi api, i
> could
> have written a new interface for it, but that did not bring any value to
> me)
> 
> That use case was handled by Felix using a custom configuration property
> that one could set to a list / array of BundleActivator, but Equinox does
> not support such a mechanism.  So given, it's specific to Karaf I thought
> it made more sense to use a different header.
> 
> On Tue, Nov 22, 2011 at 14:19, Achim Nierbeck <bcanhome@>wrote:
> 
>> Hi Guillaume,
>>
>> just out of curiosity why do we introduce a new non OSGi manifest element
>> Karaf-Activator, instead of using the Bundle-Activator
>> for it?
>>
>> Regards, Achim
>>
>> 2011/11/22 <gnodet@>
>>
>> > Author: gnodet
>> > Date: Tue Nov 22 13:06:00 2011
>> > New Revision: 1204967
>> >
>> > URL: http://svn.apache.org/viewvc?rev=1204967&view=rev
>> > Log:
>> > [KARAF-1023] Add karaf activators for jars in the lib folder
>> >
>> > Modified:
>> >    karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java
>> >
>> > Modified:
>> karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java
>> > URL:
>> >
>> http://svn.apache.org/viewvc/karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java?rev=1204967&r1=1204966&r2=1204967&view=diff
>> >
>> >
>> ==============================================================================
>> > --- karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java
>> > (original)
>> > +++ karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java Tue
>> Nov
>> > 22 13:06:00 2011
>> > @@ -48,6 +48,7 @@ import java.util.Properties;
>> >  import java.util.Random;
>> >  import java.util.StringTokenizer;
>> >  import java.util.TreeMap;
>> > +import java.util.jar.Manifest;
>> >  import java.util.logging.Level;
>> >  import java.util.logging.Logger;
>> >  import java.util.regex.Matcher;
>> > @@ -59,6 +60,7 @@ import org.apache.karaf.main.util.Bootst
>> >  import org.apache.karaf.main.util.StringMap;
>> >  import org.apache.karaf.main.util.Utils;
>> >  import org.osgi.framework.Bundle;
>> > +import org.osgi.framework.BundleActivator;
>> >  import org.osgi.framework.BundleContext;
>> >  import org.osgi.framework.BundleException;
>> >  import org.osgi.framework.Constants;
>> > @@ -193,6 +195,10 @@ public class Main {
>> >
>> >     public static final String INCLUDES_PROPERTY = "${includes}";
>> >
>> > +    public static final String KARAF_ACTIVATOR = "Karaf-Activator";
>> > +
>> > +    public static final String SECURITY_PROVIDERS =
>> > "org.apache.karaf.security.providers";
>> > +
>> >     Logger LOG = Logger.getLogger(this.getClass().getName());
>> >
>> >     private File karafHome;
>> > @@ -210,6 +216,8 @@ public class Main {
>> >     private int shutdownTimeout = 5 * 60 * 1000;
>> >     private boolean exiting = false;
>> >     private ShutdownCallback shutdownCallback;
>> > +    private List<BundleActivator> karafActivators = new
>> > ArrayList<BundleActivator>();
>> > +
>> >
>> >     public Main(String[] args) {
>> >         this.args = args;
>> > @@ -281,6 +289,8 @@ public class Main {
>> >         loadStartupProperties(configProps);
>> >         processAutoProperties(framework.getBundleContext());
>> >         framework.start();
>> > +        // Start custom activators
>> > +        startKarafActivators(classLoader);
>> >         // Start lock monitor
>> >         new Thread() {
>> >             public void run() {
>> > @@ -289,6 +299,46 @@ public class Main {
>> >         }.start();
>> >     }
>> >
>> > +    private void startKarafActivators(ClassLoader classLoader) throws
>> > IOException {
>> > +        Enumeration<URL> urls =
>> > classLoader.getResources("META-INF/MANIFEST.MF");
>> > +        while (urls != null && urls.hasMoreElements()) {
>> > +            URL url = urls.nextElement();
>> > +            String className = null;
>> > +            InputStream is = url.openStream();
>> > +            try {
>> > +                Manifest mf = new Manifest(is);
>> > +                className =
>> > mf.getMainAttributes().getValue(KARAF_ACTIVATOR);
>> > +                if (className != null) {
>> > +                    BundleActivator activator = (BundleActivator)
>> > classLoader.loadClass(className).newInstance();
>> > +                    activator.start(framework.getBundleContext());
>> > +                    karafActivators.add(activator);
>> > +                }
>> > +            } catch (Throwable e) {
>> > +                if (className != null) {
>> > +                    System.err.println("Error starting karaf activator
>> "
>> > + className + ": " + e.getMessage());
>> > +                    LOG.log(Level.WARNING, "Error starting karaf
>> > activator " + className + " from url " + url, e);
>> > +                }
>> > +            } finally {
>> > +                if (is != null) {
>> > +                    try {
>> > +                        is.close();
>> > +                    } catch (IOException e) {
>> > +                    }
>> > +                }
>> > +            }
>> > +        }
>> > +    }
>> > +
>> > +    private void stopKarafActivators() {
>> > +        for (BundleActivator activator : karafActivators) {
>> > +            try {
>> > +                activator.stop(framework.getBundleContext());
>> > +            } catch (Throwable e) {
>> > +                LOG.log(Level.WARNING, "Error stopping karaf activator
>> "
>> > + activator.getClass().getName(), e);
>> > +            }
>> > +        }
>> > +    }
>> > +
>> >     public void awaitShutdown() throws Exception {
>> >         if (framework == null) {
>> >             return;
>> > @@ -338,6 +388,7 @@ public class Main {
>> >                 }
>> >                 FrameworkEvent event = framework.waitForStop(step);
>> >                 if (event.getType() != FrameworkEvent.WAIT_TIMEDOUT) {
>> > +                    stopKarafActivators();
>> >                     return true;
>> >                 }
>> >             }
>> > @@ -457,7 +508,7 @@ public class Main {
>> >                 }
>> >             } catch (Throwable ex) {
>> >                 main.setExitCode(-2);
>> > -                System.err.println("Error occured shutting down
>> > framework: " + ex);
>> > +                System.err.println("Error occurred shutting down
>> > framework: " + ex);
>> >                 ex.printStackTrace();
>> >             } finally {
>> >                 if (!restart) {
>> > @@ -468,7 +519,7 @@ public class Main {
>> >     }
>> >
>> >     private static void processSecurityProperties(Properties
>> > m_configProps) {
>> > -        String prop =
>> > m_configProps.getProperty("org.apache.karaf.security.providers");
>> > +        String prop = m_configProps.getProperty(SECURITY_PROVIDERS);
>> >         if (prop != null) {
>> >             String[] providers = prop.split(",");
>> >             for (String provider : providers) {
>> > @@ -1072,7 +1123,6 @@ public class Main {
>> >      * Returns a path for an srtifact.
>> >      * Input: path (no ':') returns path
>> >      * Input: mvn:<groupId>/<artifactId>/<version>/<type>/<classifier>
>> > converts to default repo location path
>> > -//     * Input:  <groupId>:<artifactId>:<version>:<type>:<classifier>
>> > converts to default repo location path
>> >      * type and classifier are optional.
>> >      *
>> >      *
>> >
>> >
>> >
>>
>>
>> --
>>
>> Apache Karaf &lt;http://karaf.apache.org/&gt; Committer & PMC
>> OPS4J Pax Web &lt;http://wiki.ops4j.org/display/paxweb/Pax+Web/&gt;
>> Committer &
>> Project Lead
>> blog &lt;http://notizblog.nierbeck.de/&gt;
>>
> 
> 
> 
> -- 
> ------------------------
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
> ------------------------
> Open Source SOA
> http://fusesource.com
> 


-----
Mike Van  (All links open in new tabs)
Committer - Kalumet 

Atraxia Technologies 

NCI Inc 

Mike Van's Open Source Technologies Blog 
--
View this message in context: 
http://karaf.922171.n3.nabble.com/Re-svn-commit-r1204967-karaf-trunk-main-src-main-java-org-apache-karaf-main-Main-java-tp3527681p3528753.html
Sent from the Karaf - Dev mailing list archive at Nabble.com.

Reply via email to