You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/02/20 12:12:20 UTC

svn commit: r1291195 - in /openejb/trunk/maven-plugins: dd-maven-plugin/ dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/ dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/ tomee-maven-plugin/src/main/java/org/apa...

Author: rmannibucau
Date: Mon Feb 20 11:12:19 2012
New Revision: 1291195

URL: http://svn.apache.org/viewvc?rev=1291195&view=rev
Log:
making merger plugin working (step 1 ;))

Added:
    openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EjbJarMerger.java
      - copied, changed from r1291046, openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EjbjarxmlMerger.java
    openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EnvEntriesMerger.java
      - copied, changed from r1291046, openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EnventriespropertiesMerger.java
    openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/OpenEJBJarMerger.java
      - copied, changed from r1291046, openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/OpenejbjarxmlMerger.java
    openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/ValidationMerger.java
      - copied, changed from r1291046, openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/ValidationxmlMerger.java
Removed:
    openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EjbjarxmlMerger.java
    openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EnventriespropertiesMerger.java
    openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/OpenejbjarxmlMerger.java
    openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/ValidationxmlMerger.java
Modified:
    openejb/trunk/maven-plugins/dd-maven-plugin/pom.xml
    openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/MergeDDForWebappMojo.java
    openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/Merger.java
    openejb/trunk/maven-plugins/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UnDeployMojo.java

Modified: openejb/trunk/maven-plugins/dd-maven-plugin/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/maven-plugins/dd-maven-plugin/pom.xml?rev=1291195&r1=1291194&r2=1291195&view=diff
==============================================================================
--- openejb/trunk/maven-plugins/dd-maven-plugin/pom.xml (original)
+++ openejb/trunk/maven-plugins/dd-maven-plugin/pom.xml Mon Feb 20 11:12:19 2012
@@ -26,6 +26,11 @@
       <groupId>org.apache.openejb</groupId>
       <artifactId>openejb-core</artifactId>
     </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>maven-util</artifactId>
+      <version>${project.version}</version>
+    </dependency>
   </dependencies>
 
   <properties>

Modified: openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/MergeDDForWebappMojo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/MergeDDForWebappMojo.java?rev=1291195&r1=1291194&r2=1291195&view=diff
==============================================================================
--- openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/MergeDDForWebappMojo.java (original)
+++ openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/MergeDDForWebappMojo.java Mon Feb 20 11:12:19 2012
@@ -7,13 +7,16 @@ import org.apache.maven.plugin.MojoFailu
 import org.apache.maven.plugin.logging.Log;
 import org.apache.maven.project.MavenProject;
 import org.apache.openejb.config.NewLoaderLogic;
+import org.apache.openejb.maven.util.MavenLogStreamFactory;
+import org.apache.xbean.finder.AbstractFinder;
+import org.apache.xbean.finder.ClassFinder;
 import org.apache.xbean.finder.ResourceFinder;
-import org.codehaus.plexus.interpolation.util.StringUtils;
 
 import java.io.File;
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.net.URLClassLoader;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -41,7 +44,14 @@ public class MergeDDForWebappMojo extend
     private MavenProject project;
 
     /**
-     * @parameter expression="${project.build.outputDirectory}/${project.build.finalName}/WEB-INF"
+     * @parameter expression="${project.build.sourceDirectory}/main/webapp/WEB-INF"
+     * @required
+     * @readonly
+     */
+    private File webInfSrc;
+
+    /**
+     * @parameter expression="${project.build.directory}/${project.build.finalName}/WEB-INF"
      * @required
      * @readonly
      */
@@ -59,21 +69,34 @@ public class MergeDDForWebappMojo extend
 
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
+        System.setProperty("openejb.log.factory", "org.apache.openejb.maven.util.MavenLogStreamFactory");
+        MavenLogStreamFactory.setLogger(getLog());
+
         initIncludeExclude();
-        final Map<String, Merger<?>> mergers = initMerger();
+        final Map<String, Merger<?>> mergers;
+        try {
+            mergers = initMerger();
+        } catch (Exception e) {
+            getLog().error("can't find mergers", e);
+            return;
+        }
 
         getLog().info("looking for descriptors...");
         final List<Artifact> artifacts = getDependencies();
 
         final ResourceFinder webInfFinder;
         try {
-            webInfFinder = new ResourceFinder(webInf.toURI().toURL());
+            webInfFinder = new ResourceFinder(webInfSrc.toURI().toURL());
         } catch (MalformedURLException e) {
             throw new MojoFailureException("can't create a finder for webinf", e);
         }
 
         final Map<Artifact, ResourceFinder> finders = finders(artifacts);
         for (String dd : MANAGED_DD) {
+            if (!mergers.containsKey(dd)) {
+                getLog().warn("ignoring " + dd + " because no merger found");
+            }
+
             int ddCount = 0;
             Object reference;
             final Merger<Object> merger = (Merger<Object>) mergers.get(dd);
@@ -101,25 +124,38 @@ public class MergeDDForWebappMojo extend
                 }
             }
 
-            // todo: dump it in web-inf...
             if (ddCount > 0) {
-                getLog().info(dd = " => ");
-                getLog().info(reference.toString());
+                if (!webInf.exists() && !webInf.mkdirs()) {
+                    getLog().error("can't create " + webInf.getPath());
+                }
+                final File dump = new File(webInf, dd);
+                try {
+                    merger.dump(dump, reference);
+                    getLog().info(dd + " merged on " + dump.getPath());
+                } catch (Exception e) {
+                    getLog().error("can't save " + dd + " in " + dump.getPath());
+                }
+            } else {
+                getLog().debug("no " + dd + " found, this descriptor will be ignored");
             }
         }
     }
 
-    private Map<String, Merger<?>> initMerger() {
+    private Map<String, Merger<?>> initMerger() throws Exception {
         final Map<String, Merger<?>> mergers = new HashMap<String, Merger<?>>();
-        for (String dd : MANAGED_DD) {
-            final String name = "org.apache.openejb.maven.plugin.dd.merger." + StringUtils.capitalizeFirstLetter(dd).replace(".", "").replace("-", "") + "Merger";
+        final ClassLoader cl = new URLClassLoader(new URL[] { getClass().getProtectionDomain().getCodeSource().getLocation() }, ClassLoader.getSystemClassLoader());
+        final AbstractFinder finder = new ClassFinder(cl, true).link();
+        final List<Class> foundMergers = finder.findSubclasses((Class) cl.loadClass(Merger.class.getName()));
+        
+        for (Class<? extends Merger> m : foundMergers) {
             try {
-                mergers.put(dd,
-                        (Merger<?>) Thread.currentThread().getContextClassLoader()
-                                            .loadClass(name)
-                                            .getConstructor(Log.class).newInstance(getLog()));
+                // reload the class with the current classloader to avoid to miss some dependencies
+                // excluded to scan faster
+                final Merger<?> instance = (Merger<?>) Thread.currentThread().getContextClassLoader().loadClass(m.getName())
+                                                .getConstructor(Log.class).newInstance(getLog());
+                mergers.put(instance.descriptorName(), instance);
             } catch (Exception e) {
-                e.printStackTrace(); // TODO
+                getLog().warn("can't instantiate " + m.getName() + ", does it provide a constructor with a maven logger?");
             }
         }
         return mergers;

Modified: openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/Merger.java
URL: http://svn.apache.org/viewvc/openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/Merger.java?rev=1291195&r1=1291194&r2=1291195&view=diff
==============================================================================
--- openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/Merger.java (original)
+++ openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/Merger.java Mon Feb 20 11:12:19 2012
@@ -1,9 +1,20 @@
 package org.apache.openejb.maven.plugin.dd;
 
+import org.apache.maven.plugin.logging.Log;
+
+import java.io.File;
 import java.net.URL;
 
-public interface Merger<T> {
-    T merge(T reference, T toMerge);
-    T createEmpty();
-    T read(URL url);
+public abstract class Merger<T> {
+    protected final Log log;
+
+    public Merger(final Log logger) {
+        log = logger;
+    }
+
+    public abstract T merge(T reference, T toMerge);
+    public abstract T createEmpty();
+    public abstract T read(URL url);
+    public abstract String descriptorName();
+    public abstract void dump(File dump, T object) throws Exception ;
 }

Copied: openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EjbJarMerger.java (from r1291046, openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EjbjarxmlMerger.java)
URL: http://svn.apache.org/viewvc/openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EjbJarMerger.java?p2=openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EjbJarMerger.java&p1=openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EjbjarxmlMerger.java&r1=1291046&r2=1291195&rev=1291195&view=diff
==============================================================================
--- openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EjbjarxmlMerger.java (original)
+++ openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EjbJarMerger.java Mon Feb 20 11:12:19 2012
@@ -1,21 +1,22 @@
 package org.apache.openejb.maven.plugin.dd.merger;
 
 import org.apache.maven.plugin.logging.Log;
-import org.apache.openejb.config.sys.JaxbOpenejb;
 import org.apache.openejb.jee.AssemblyDescriptor;
 import org.apache.openejb.jee.EjbJar;
 import org.apache.openejb.jee.EnterpriseBean;
 import org.apache.openejb.jee.Interceptor;
+import org.apache.openejb.jee.JaxbJavaee;
 import org.apache.openejb.maven.plugin.dd.Merger;
 
 import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
 import java.net.URL;
 
-public class EjbjarxmlMerger implements Merger<EjbJar> {
-    private final Log log;
-
-    public EjbjarxmlMerger(final Log logger) {
-        log = logger;
+public class EjbJarMerger extends Merger<EjbJar> {
+    public EjbJarMerger(final Log logger) {
+        super(logger);
     }
 
     @Override
@@ -54,9 +55,24 @@ public class EjbjarxmlMerger implements 
     @Override
     public EjbJar read(URL url) {
         try {
-            return JaxbOpenejb.unmarshal(EjbJar.class, new BufferedInputStream(url.openStream()));
+            return (EjbJar) JaxbJavaee.unmarshal(EjbJar.class, new BufferedInputStream(url.openStream()), false);
         } catch (Exception e) {
             return createEmpty();
         }
     }
+
+    @Override
+    public String descriptorName() {
+        return "ejb-jar.xml";
+    }
+
+    @Override
+    public void dump(final File dump, final EjbJar ejbJar) throws Exception {
+        final BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(dump));
+        try {
+            JaxbJavaee.marshal(EjbJar.class, ejbJar, stream);
+        } finally {
+            stream.close();
+        }
+    }
 }

Copied: openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EnvEntriesMerger.java (from r1291046, openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EnventriespropertiesMerger.java)
URL: http://svn.apache.org/viewvc/openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EnvEntriesMerger.java?p2=openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EnvEntriesMerger.java&p1=openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EnventriespropertiesMerger.java&r1=1291046&r2=1291195&rev=1291195&view=diff
==============================================================================
--- openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EnventriespropertiesMerger.java (original)
+++ openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EnvEntriesMerger.java Mon Feb 20 11:12:19 2012
@@ -4,15 +4,16 @@ import org.apache.maven.plugin.logging.L
 import org.apache.openejb.maven.plugin.dd.Merger;
 
 import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileWriter;
 import java.io.IOException;
+import java.io.Writer;
 import java.net.URL;
 import java.util.Properties;
 
-public class EnventriespropertiesMerger implements Merger<Properties> {
-    private final Log log;
-
-    public EnventriespropertiesMerger(final Log logger) {
-        log = logger;
+public class EnvEntriesMerger extends Merger<Properties> {
+    public EnvEntriesMerger(final Log logger) {
+        super(logger);
     }
 
     @Override
@@ -42,4 +43,19 @@ public class EnventriespropertiesMerger 
         }
         return read;
     }
+
+    @Override
+    public String descriptorName() {
+        return "env-entries.properties";
+    }
+
+    @Override
+    public void dump(final File dump, final Properties object) throws Exception {
+        final Writer writer = new FileWriter(dump);
+        try {
+            object.store(writer, "merged env-entries.properties");
+        } finally {
+            writer.close();
+        }
+    }
 }

Copied: openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/OpenEJBJarMerger.java (from r1291046, openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/OpenejbjarxmlMerger.java)
URL: http://svn.apache.org/viewvc/openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/OpenEJBJarMerger.java?p2=openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/OpenEJBJarMerger.java&p1=openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/OpenejbjarxmlMerger.java&r1=1291046&r2=1291195&rev=1291195&view=diff
==============================================================================
--- openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/OpenejbjarxmlMerger.java (original)
+++ openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/OpenEJBJarMerger.java Mon Feb 20 11:12:19 2012
@@ -7,18 +7,19 @@ import org.apache.openejb.jee.oejb3.Open
 import org.apache.openejb.maven.plugin.dd.Merger;
 
 import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
 import java.net.URL;
 
-public class OpenejbjarxmlMerger implements Merger<OpenejbJar> {
-    private final Log log;
-
-    public OpenejbjarxmlMerger(final Log logger) {
-        log = logger;
+public class OpenEJBJarMerger extends Merger<OpenejbJar> {
+    public OpenEJBJarMerger(final Log logger) {
+        super(logger);
     }
 
     @Override
     public OpenejbJar merge(OpenejbJar reference, OpenejbJar toMerge) {
-        new EnventriespropertiesMerger(log).merge(reference.getProperties(), toMerge.getProperties());
+        new EnvEntriesMerger(log).merge(reference.getProperties(), toMerge.getProperties());
 
         for (EjbDeployment deployment : toMerge.getEjbDeployment()) {
             if (reference.getDeploymentsByEjbName().containsKey(deployment.getEjbName())) {
@@ -44,4 +45,19 @@ public class OpenejbjarxmlMerger impleme
             return createEmpty();
         }
     }
+
+    @Override
+    public String descriptorName() {
+        return "openejb-jar.xml";
+    }
+
+    @Override
+    public void dump(File dump, OpenejbJar object) throws Exception {
+        final BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(dump));
+        try {
+            JaxbOpenejbJar3.marshal(OpenejbJar.class, object, stream);
+        } finally {
+            stream.close();
+        }
+    }
 }

Copied: openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/ValidationMerger.java (from r1291046, openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/ValidationxmlMerger.java)
URL: http://svn.apache.org/viewvc/openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/ValidationMerger.java?p2=openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/ValidationMerger.java&p1=openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/ValidationxmlMerger.java&r1=1291046&r2=1291195&rev=1291195&view=diff
==============================================================================
--- openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/ValidationxmlMerger.java (original)
+++ openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/ValidationMerger.java Mon Feb 20 11:12:19 2012
@@ -8,13 +8,14 @@ import org.apache.openejb.maven.plugin.d
 
 import javax.xml.bind.JAXBElement;
 import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
 import java.net.URL;
 
-public class ValidationxmlMerger implements Merger<ValidationConfigType> {
-    private final Log log;
-
-    public ValidationxmlMerger(final Log logger) {
-        log = logger;
+public class ValidationMerger extends Merger<ValidationConfigType> {
+    public ValidationMerger(final Log logger) {
+        super(logger);
     }
 
     @Override
@@ -47,4 +48,19 @@ public class ValidationxmlMerger impleme
             return createEmpty();
         }
     }
+
+    @Override
+    public String descriptorName() {
+        return "validation.xml";
+    }
+
+    @Override
+    public void dump(File dump, ValidationConfigType object) throws Exception {
+        final BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(dump));
+        try {
+            JaxbOpenejb.marshal(ValidationConfigType.class, object, stream);
+        } finally {
+            stream.close();
+        }
+    }
 }

Modified: openejb/trunk/maven-plugins/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UnDeployMojo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/maven-plugins/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UnDeployMojo.java?rev=1291195&r1=1291194&r2=1291195&view=diff
==============================================================================
--- openejb/trunk/maven-plugins/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UnDeployMojo.java (original)
+++ openejb/trunk/maven-plugins/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UnDeployMojo.java Mon Feb 20 11:12:19 2012
@@ -22,10 +22,6 @@ import org.apache.maven.plugin.MojoFailu
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.assembler.Deployer;
 
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
 /**
  * @goal undeploy
  */