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/19 20:29:32 UTC

svn commit: r1291046 - in /openejb/trunk/maven-plugins: ./ dd-maven-plugin/ dd-maven-plugin/src/ dd-maven-plugin/src/main/ dd-maven-plugin/src/main/java/ dd-maven-plugin/src/main/java/org/ dd-maven-plugin/src/main/java/org/apache/ dd-maven-plugin/src/m...

Author: rmannibucau
Date: Sun Feb 19 19:29:31 2012
New Revision: 1291046

URL: http://svn.apache.org/viewvc?rev=1291046&view=rev
Log:
adding dd-maven-plugin, removing properties plugin (sent to mvn) and adding embedded plugin

Added:
    openejb/trunk/maven-plugins/dd-maven-plugin/
    openejb/trunk/maven-plugins/dd-maven-plugin/pom.xml
    openejb/trunk/maven-plugins/dd-maven-plugin/src/
    openejb/trunk/maven-plugins/dd-maven-plugin/src/main/
    openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/
    openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/
    openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/
    openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/
    openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/
    openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/
    openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/
    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/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/
    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
    openejb/trunk/maven-plugins/dd-maven-plugin/src/test/
    openejb/trunk/maven-plugins/dd-maven-plugin/src/test/java/
Removed:
    openejb/trunk/maven-plugins/properties-maven-plugin/
Modified:
    openejb/trunk/maven-plugins/pom.xml

Added: 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=1291046&view=auto
==============================================================================
--- openejb/trunk/maven-plugins/dd-maven-plugin/pom.xml (added)
+++ openejb/trunk/maven-plugins/dd-maven-plugin/pom.xml Sun Feb 19 19:29:31 2012
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>maven-plugins-parent</artifactId>
+    <groupId>org.apache.openejb</groupId>
+    <version>0.0.1-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>dd-maven-plugin</artifactId>
+  <packaging>maven-plugin</packaging>
+  <name>OpenEJB Maven Plugins :: DD Maven Plugin</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-plugin-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-project</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>openejb-core</artifactId>
+    </dependency>
+  </dependencies>
+
+  <properties>
+    <maven-plugin.prefix>dd</maven-plugin.prefix>
+  </properties>
+</project>

Added: 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=1291046&view=auto
==============================================================================
--- openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/MergeDDForWebappMojo.java (added)
+++ openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/MergeDDForWebappMojo.java Sun Feb 19 19:29:31 2012
@@ -0,0 +1,174 @@
+package org.apache.openejb.maven.plugin.dd;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.project.MavenProject;
+import org.apache.openejb.config.NewLoaderLogic;
+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.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @goal merge
+ * @phase compile
+ * @requiresDependencyResolution runtime
+ */
+public class MergeDDForWebappMojo extends AbstractMojo {
+    private static final String[] MANAGED_DD = {
+            "ejb-jar.xml", "openejb-jar.xml",
+            "env-entries.properties",
+            "validation.xml"
+        };
+
+    /**
+     * @parameter expression="${project}"
+     * @required
+     * @readonly
+     */
+    private MavenProject project;
+
+    /**
+     * @parameter expression="${project.build.outputDirectory}/${project.build.finalName}/WEB-INF"
+     * @required
+     * @readonly
+     */
+    private File webInf;
+
+    /**
+     * @parameter
+     */
+    private List<String> includes;
+
+    /**
+     * @parameter
+     */
+    private List<String> excludes;
+
+    @Override
+    public void execute() throws MojoExecutionException, MojoFailureException {
+        initIncludeExclude();
+        final Map<String, Merger<?>> mergers = initMerger();
+
+        getLog().info("looking for descriptors...");
+        final List<Artifact> artifacts = getDependencies();
+
+        final ResourceFinder webInfFinder;
+        try {
+            webInfFinder = new ResourceFinder(webInf.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) {
+            int ddCount = 0;
+            Object reference;
+            final Merger<Object> merger = (Merger<Object>) mergers.get(dd);
+            try {
+                final URL ddUrl = webInfFinder.find(dd);
+                if (ddUrl != null) {
+                    reference = merger.read(ddUrl);
+                    ddCount++;
+                } else {
+                    reference = merger.createEmpty();
+                }
+            } catch (IOException e) {
+                reference = merger.createEmpty();
+            }
+
+            for (Artifact artifact : artifacts) {
+                try {
+                    final URL otherDD = finders.get(artifact).find("META-INF/" + dd);
+                    if (otherDD != null) {
+                        merger.merge(reference, merger.read(otherDD));
+                        ddCount++;
+                    }
+                } catch (IOException e) {
+                    // ignore since it means the resource was not found
+                }
+            }
+
+            // todo: dump it in web-inf...
+            if (ddCount > 0) {
+                getLog().info(dd = " => ");
+                getLog().info(reference.toString());
+            }
+        }
+    }
+
+    private Map<String, Merger<?>> initMerger() {
+        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";
+            try {
+                mergers.put(dd,
+                        (Merger<?>) Thread.currentThread().getContextClassLoader()
+                                            .loadClass(name)
+                                            .getConstructor(Log.class).newInstance(getLog()));
+            } catch (Exception e) {
+                e.printStackTrace(); // TODO
+            }
+        }
+        return mergers;
+    }
+
+    private Map<Artifact, ResourceFinder> finders(List<Artifact> artifacts) {
+        final Map<Artifact, ResourceFinder> map = new HashMap<Artifact, ResourceFinder>(artifacts.size());
+        for (Artifact artifact : artifacts) {
+            try {
+                map.put(artifact, new ResourceFinder(artifact.getFile().toURI().toURL()));
+            } catch (MalformedURLException e) {
+                getLog().warn("can't manage " + artifact);
+            }
+        }
+        return map;  //To change body of created methods use File | Settings | File Templates.
+    }
+
+    public List<Artifact> getDependencies() {
+        final List<Artifact> dependencies = new ArrayList<Artifact>(project.getArtifacts());
+        final Iterator<Artifact> it = dependencies.iterator();
+        while (it.hasNext()) {
+            final Artifact artifact = it.next();
+            if (!keep(artifact.getArtifactId())) {
+                it.remove();
+            }
+        }
+        return dependencies;
+    }
+
+    private boolean keep(final String str) {
+        return matches(includes, str) && !matches(excludes, str);
+    }
+
+    private void initIncludeExclude() {
+        if (includes == null) {
+            includes = new ArrayList<String>();
+            includes.add("");
+        }
+        if (excludes == null) {
+            excludes = Arrays.asList(NewLoaderLogic.getExclusions());
+        }
+    }
+
+    private static boolean matches(final List<String> includes, final String artifact) {
+        for (String pattern : includes) {
+            if (artifact.startsWith(pattern)) {
+                return true;
+            }
+        }
+        return false;
+    }
+}

Added: 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=1291046&view=auto
==============================================================================
--- openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/Merger.java (added)
+++ openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/Merger.java Sun Feb 19 19:29:31 2012
@@ -0,0 +1,9 @@
+package org.apache.openejb.maven.plugin.dd;
+
+import java.net.URL;
+
+public interface Merger<T> {
+    T merge(T reference, T toMerge);
+    T createEmpty();
+    T read(URL url);
+}

Added: 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/EjbjarxmlMerger.java?rev=1291046&view=auto
==============================================================================
--- openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EjbjarxmlMerger.java (added)
+++ openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EjbjarxmlMerger.java Sun Feb 19 19:29:31 2012
@@ -0,0 +1,62 @@
+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.maven.plugin.dd.Merger;
+
+import java.io.BufferedInputStream;
+import java.net.URL;
+
+public class EjbjarxmlMerger implements Merger<EjbJar> {
+    private final Log log;
+
+    public EjbjarxmlMerger(final Log logger) {
+        log = logger;
+    }
+
+    @Override
+    public EjbJar merge(final EjbJar reference, final EjbJar toMerge) {
+        for (EnterpriseBean bean : toMerge.getEnterpriseBeans()) {
+            if (reference.getEnterpriseBeansByEjbName().containsKey(bean.getEjbName())) {
+                log.warn("bean " + bean.getEjbName() + " already defined");
+            } else {
+                reference.addEnterpriseBean(bean);
+            }
+        }
+
+        for (Interceptor interceptor : toMerge.getInterceptors()) {
+            if (reference.getInterceptor(interceptor.getInterceptorClass()) != null) {
+                log.warn("interceptor " + interceptor.getInterceptorClass() + " already defined");
+            } else {
+                reference.addInterceptor(interceptor);
+            }
+        }
+
+        final AssemblyDescriptor descriptor = toMerge.getAssemblyDescriptor();
+        mergeAssemblyDescriptor(reference.getAssemblyDescriptor(), descriptor);
+
+        return reference;
+    }
+
+    private static void mergeAssemblyDescriptor(final AssemblyDescriptor assemblyDescriptor, final AssemblyDescriptor descriptor) {
+        // TODO
+    }
+
+    @Override
+    public EjbJar createEmpty() {
+        return new EjbJar();
+    }
+
+    @Override
+    public EjbJar read(URL url) {
+        try {
+            return JaxbOpenejb.unmarshal(EjbJar.class, new BufferedInputStream(url.openStream()));
+        } catch (Exception e) {
+            return createEmpty();
+        }
+    }
+}

Added: 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/EnventriespropertiesMerger.java?rev=1291046&view=auto
==============================================================================
--- openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EnventriespropertiesMerger.java (added)
+++ openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EnventriespropertiesMerger.java Sun Feb 19 19:29:31 2012
@@ -0,0 +1,45 @@
+package org.apache.openejb.maven.plugin.dd.merger;
+
+import org.apache.maven.plugin.logging.Log;
+import org.apache.openejb.maven.plugin.dd.Merger;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+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;
+    }
+
+    @Override
+    public Properties merge(final Properties reference, final Properties toMerge) {
+        for (Object key : toMerge.keySet()) {
+            if (reference.containsKey(key)) {
+                log.warn("property " + key + " found in multiple env-entries.properties, will be overriden");
+            }
+        }
+
+        reference.putAll(toMerge);
+        return reference;
+    }
+
+    @Override
+    public Properties createEmpty() {
+        return new Properties();
+    }
+
+    @Override
+    public Properties read(URL url) {
+        final Properties read = new Properties();
+        try {
+            read.load(new BufferedInputStream(url.openStream()));
+        } catch (IOException e) {
+            // ignored
+        }
+        return read;
+    }
+}

Added: 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/OpenejbjarxmlMerger.java?rev=1291046&view=auto
==============================================================================
--- openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/OpenejbjarxmlMerger.java (added)
+++ openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/OpenejbjarxmlMerger.java Sun Feb 19 19:29:31 2012
@@ -0,0 +1,47 @@
+package org.apache.openejb.maven.plugin.dd.merger;
+
+import org.apache.maven.plugin.logging.Log;
+import org.apache.openejb.jee.oejb3.EjbDeployment;
+import org.apache.openejb.jee.oejb3.JaxbOpenejbJar3;
+import org.apache.openejb.jee.oejb3.OpenejbJar;
+import org.apache.openejb.maven.plugin.dd.Merger;
+
+import java.io.BufferedInputStream;
+import java.net.URL;
+
+public class OpenejbjarxmlMerger implements Merger<OpenejbJar> {
+    private final Log log;
+
+    public OpenejbjarxmlMerger(final Log logger) {
+        log = logger;
+    }
+
+    @Override
+    public OpenejbJar merge(OpenejbJar reference, OpenejbJar toMerge) {
+        new EnventriespropertiesMerger(log).merge(reference.getProperties(), toMerge.getProperties());
+
+        for (EjbDeployment deployment : toMerge.getEjbDeployment()) {
+            if (reference.getDeploymentsByEjbName().containsKey(deployment.getEjbName())) {
+                log.warn("ejb deployement " + deployment.getEjbName() + " already present");
+            } else {
+                reference.addEjbDeployment(deployment);
+            }
+        }
+
+        return reference;
+    }
+
+    @Override
+    public OpenejbJar createEmpty() {
+        return new OpenejbJar();
+    }
+
+    @Override
+    public OpenejbJar read(URL url) {
+        try {
+            return JaxbOpenejbJar3.unmarshal(OpenejbJar.class, new BufferedInputStream(url.openStream()));
+        } catch (Exception e) {
+            return createEmpty();
+        }
+    }
+}

Added: 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/ValidationxmlMerger.java?rev=1291046&view=auto
==============================================================================
--- openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/ValidationxmlMerger.java (added)
+++ openejb/trunk/maven-plugins/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/ValidationxmlMerger.java Sun Feb 19 19:29:31 2012
@@ -0,0 +1,50 @@
+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.bval.PropertyType;
+import org.apache.openejb.jee.bval.ValidationConfigType;
+import org.apache.openejb.maven.plugin.dd.Merger;
+
+import javax.xml.bind.JAXBElement;
+import java.io.BufferedInputStream;
+import java.net.URL;
+
+public class ValidationxmlMerger implements Merger<ValidationConfigType> {
+    private final Log log;
+
+    public ValidationxmlMerger(final Log logger) {
+        log = logger;
+    }
+
+    @Override
+    public ValidationConfigType merge(final ValidationConfigType reference, final ValidationConfigType toMerge) {
+        for (PropertyType property : toMerge.getProperty()) {
+            if (reference.getProperty().contains(property)) {
+                log.warn("property " + property.getName() + " already present");
+            } else {
+                reference.getProperty().add(property);
+            }
+        }
+
+        for (JAXBElement<String> elt : toMerge.getConstraintMapping()) {
+            reference.getConstraintMapping().add(elt);
+        }
+
+        return reference;
+    }
+
+    @Override
+    public ValidationConfigType createEmpty() {
+        return new ValidationConfigType();
+    }
+
+    @Override
+    public ValidationConfigType read(URL url) {
+        try {
+            return JaxbOpenejb.unmarshal(ValidationConfigType.class, new BufferedInputStream(url.openStream()));
+        } catch (Exception e) {
+            return createEmpty();
+        }
+    }
+}

Modified: openejb/trunk/maven-plugins/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/maven-plugins/pom.xml?rev=1291046&r1=1291045&r2=1291046&view=diff
==============================================================================
--- openejb/trunk/maven-plugins/pom.xml (original)
+++ openejb/trunk/maven-plugins/pom.xml Sun Feb 19 19:29:31 2012
@@ -36,6 +36,8 @@
   <modules>
     <module>tomee-maven-plugin</module>
     <module>info-maven-plugin</module>
+    <module>dd-maven-plugin</module>
+    <module>openejb-embedded-maven-plugin</module>
   </modules>
 
   <dependencyManagement>