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>