You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2011/05/03 09:18:38 UTC

svn commit: r1098946 - in /geronimo/server/branches/3.0-osgi: framework/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/ plugins/tomcat/tomcat7/

Author: djencks
Date: Tue May  3 07:18:37 2011
New Revision: 1098946

URL: http://svn.apache.org/viewvc?rev=1098946&view=rev
Log:
add capability to install and start features/kars in car-maven-plugin.  Try it out in tomcat7

Modified:
    geronimo/server/branches/3.0-osgi/framework/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/AbstractFrameworkMojo.java
    geronimo/server/branches/3.0-osgi/framework/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/PackageMojo.java
    geronimo/server/branches/3.0-osgi/plugins/tomcat/tomcat7/pom.xml

Modified: geronimo/server/branches/3.0-osgi/framework/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/AbstractFrameworkMojo.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/3.0-osgi/framework/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/AbstractFrameworkMojo.java?rev=1098946&r1=1098945&r2=1098946&view=diff
==============================================================================
--- geronimo/server/branches/3.0-osgi/framework/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/AbstractFrameworkMojo.java (original)
+++ geronimo/server/branches/3.0-osgi/framework/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/AbstractFrameworkMojo.java Tue May  3 07:18:37 2011
@@ -36,6 +36,7 @@ import org.apache.maven.plugin.MojoFailu
 import org.apache.maven.project.MavenProject;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleException;
+import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.launch.Framework;
 import org.sonatype.aether.RepositorySystem;
@@ -127,10 +128,27 @@ public class AbstractFrameworkMojo exten
         return framework;
     }
 
-    protected <T> T getService(Class<T> clazz) throws MojoExecutionException {
+    protected <T> T getService(Class<T> clazz, String componentName) throws MojoExecutionException {
+        String filter = null;
+        if (componentName != null) {
+            filter = "(osgi.service.blueprint.compname=" + componentName + ")";
+        }
         long timeout = this.timeout;
         while (timeout > 0) {
-            ServiceReference sr = framework.getBundleContext().getServiceReference(clazz.getName());
+            ServiceReference sr = null;
+            if (filter == null) {
+                sr = framework.getBundleContext().getServiceReference(clazz.getName());
+            } else {
+                ServiceReference[] refs = new ServiceReference[0];
+                try {
+                    refs = framework.getBundleContext().getServiceReferences(clazz.getName(), filter);
+                } catch (InvalidSyntaxException e) {
+                    throw new MojoExecutionException("filter syntax problem", e);
+                }
+                if (refs != null && refs.length == 1) {
+                    sr = refs[0];
+                }
+            }
             if (sr != null) {
                 services.add(sr);
                 return (T)framework.getBundleContext().getService(sr);
@@ -145,6 +163,10 @@ public class AbstractFrameworkMojo exten
         throw new MojoExecutionException("Could not get service " + clazz.getName() + " in " + this.timeout/1000 + " seconds");
     }
 
+    protected <T> T getService(Class<T> clazz) throws MojoExecutionException {
+        return getService(clazz, null);
+    }
+
     void initializeFramework() throws MojoFailureException {
         FrameworkHelper helper = new FrameworkHelper(karafHome, new AetherResolver());
         try {

Modified: geronimo/server/branches/3.0-osgi/framework/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/PackageMojo.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/3.0-osgi/framework/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/PackageMojo.java?rev=1098946&r1=1098945&r2=1098946&view=diff
==============================================================================
--- geronimo/server/branches/3.0-osgi/framework/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/PackageMojo.java (original)
+++ geronimo/server/branches/3.0-osgi/framework/buildsupport/car-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/car/PackageMojo.java Tue May  3 07:18:37 2011
@@ -21,12 +21,16 @@ package org.apache.geronimo.mavenplugins
 
 import java.io.File;
 import java.lang.reflect.Method;
+import java.net.URI;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.felix.fileinstall.ArtifactInstaller;
 import org.apache.geronimo.deployment.Deployer;
+import org.apache.karaf.features.FeaturesService;
 import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.util.FileUtils;
 import org.osgi.framework.Bundle;
@@ -130,6 +134,13 @@ public class PackageMojo extends Abstrac
      * @readonly
      */
     protected MavenProject project;
+
+    /**
+     * features to start
+     *
+     * @parameter
+     */
+    protected List<String> features;
     //
     // Mojo
     //
@@ -145,10 +156,38 @@ public class PackageMojo extends Abstrac
                 if (!planFile.exists()) {
                     return;
                 }
+                Object featuresService = getService(FeaturesService.class);
+                Object karService = getService(ArtifactInstaller.class, "karArtifactInstaller");
+                Method karInstallMethod;
+                Method featuresAddRepoMethod;
+                Method featuresInstallFeatureMethod;
+
+                try {
+                    karInstallMethod = karService.getClass().getMethod("install", new Class[]{File.class});
+                    featuresAddRepoMethod = featuresService.getClass().getMethod("addRepository", new Class[]{URI.class});
+                    featuresInstallFeatureMethod = featuresService.getClass().getMethod("installFeature", new Class[]{String.class});
+                } catch (NoSuchMethodException e) {
+                    throw new MojoFailureException("What class??", e);
+                }
+
                 List<Long> ids = new ArrayList<Long>();
                 Map<org.sonatype.aether.artifact.Artifact, String> artifacts = getTransitiveDependencies(project);
                 for (org.sonatype.aether.artifact.Artifact dependency : artifacts.keySet()) {
-                    if ("jar".equals(dependency.getExtension()) || "car".equals(dependency.getExtension())) {
+                    if ("kar".equals(dependency.getExtension())) {
+                        try {
+                            File file = resolve(dependency);
+                            karInstallMethod.invoke(karService, file);
+                        } catch (Exception e) {
+                            throw new MojoExecutionException("Cannot install kar " + dependency, e);
+                        }
+                    } else if ("xml".equals(dependency.getExtension()) && "features".equals(dependency.getClassifier())) {
+                        try {
+                            File file = resolve(dependency);
+                            featuresAddRepoMethod.invoke(featuresService, file.toURI());
+                        } catch (Exception e) {
+                            throw new MojoExecutionException("Could not install feature " + dependency, e);
+                        }
+                    } else if ("jar".equals(dependency.getExtension()) || "car".equals(dependency.getExtension())) {
                         getLog().info("starting dependency: " + dependency);
                         File file = resolve(dependency);
                         try {
@@ -158,7 +197,12 @@ public class PackageMojo extends Abstrac
                         }
                     }
                 }
-                for (Long id: ids) {
+                if (features != null) {
+                    for (String featureName: features) {
+                        featuresInstallFeatureMethod.invoke(featuresService, featureName);
+                    }
+                }
+                for (Long id : ids) {
                     try {
                         getFramework().getBundleContext().getBundle(id).start();
                     } catch (BundleException e) {
@@ -171,7 +215,7 @@ public class PackageMojo extends Abstrac
             } catch (Exception e) {
                 getLog().info("Exception, use console to investigate ", e);
                 listBundles();
-                for (Bundle b: getFramework().getBundleContext().getBundles()) {
+                for (Bundle b : getFramework().getBundleContext().getBundles()) {
                     if (b.getState() != 32) {
                         try {
                             b.start();

Modified: geronimo/server/branches/3.0-osgi/plugins/tomcat/tomcat7/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/branches/3.0-osgi/plugins/tomcat/tomcat7/pom.xml?rev=1098946&r1=1098945&r2=1098946&view=diff
==============================================================================
--- geronimo/server/branches/3.0-osgi/plugins/tomcat/tomcat7/pom.xml (original)
+++ geronimo/server/branches/3.0-osgi/plugins/tomcat/tomcat7/pom.xml Tue May  3 07:18:37 2011
@@ -60,10 +60,17 @@
         </dependency>
 
         <dependency>
-            <groupId>org.apache.geronimo.framework.config</groupId>
+            <groupId>org.apache.geronimo.framework.feature</groupId>
+            <artifactId>j2ee-system</artifactId>
+            <version>${project.version}</version>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.geronimo.framework.feature</groupId>
             <artifactId>server-security-config</artifactId>
             <version>${project.version}</version>
-            <type>car</type>
+            <type>kar</type>
         </dependency>
 
         <dependency>
@@ -127,6 +134,10 @@
                 <groupId>org.apache.geronimo.buildsupport</groupId>
                 <artifactId>car-maven-plugin</artifactId>
                 <configuration>
+                    <features>
+                        <feature>j2ee-system</feature>
+                        <feature>server-security-config</feature>
+                    </features>
                     <category>Tomcat</category>
                     <instance>
                         <plugin-artifact>