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/06/22 16:14:45 UTC

svn commit: r1352897 - in /openejb/trunk/openejb/maven: ./ tomee-embedded-maven-plugin/ tomee-embedded-maven-plugin/src/ tomee-embedded-maven-plugin/src/main/ tomee-embedded-maven-plugin/src/main/java/ tomee-embedded-maven-plugin/src/main/java/org/ tom...

Author: rmannibucau
Date: Fri Jun 22 14:14:44 2012
New Revision: 1352897

URL: http://svn.apache.org/viewvc?rev=1352897&view=rev
Log:
TOMEE-255 tomee embedded maven plugin

Added:
    openejb/trunk/openejb/maven/tomee-embedded-maven-plugin/
    openejb/trunk/openejb/maven/tomee-embedded-maven-plugin/pom.xml
    openejb/trunk/openejb/maven/tomee-embedded-maven-plugin/src/
    openejb/trunk/openejb/maven/tomee-embedded-maven-plugin/src/main/
    openejb/trunk/openejb/maven/tomee-embedded-maven-plugin/src/main/java/
    openejb/trunk/openejb/maven/tomee-embedded-maven-plugin/src/main/java/org/
    openejb/trunk/openejb/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/
    openejb/trunk/openejb/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/
    openejb/trunk/openejb/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/
    openejb/trunk/openejb/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/
    openejb/trunk/openejb/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java
Modified:
    openejb/trunk/openejb/maven/pom.xml

Modified: openejb/trunk/openejb/maven/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/maven/pom.xml?rev=1352897&r1=1352896&r2=1352897&view=diff
==============================================================================
--- openejb/trunk/openejb/maven/pom.xml (original)
+++ openejb/trunk/openejb/maven/pom.xml Fri Jun 22 14:14:44 2012
@@ -35,6 +35,7 @@
 
   <modules>
     <module>tomee-maven-plugin</module>
+    <module>tomee-embedded-maven-plugin</module>
     <module>dd-maven-plugin</module>
     <module>openejb-embedded-maven-plugin</module>
     <module>maven-util</module>

Added: openejb/trunk/openejb/maven/tomee-embedded-maven-plugin/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/maven/tomee-embedded-maven-plugin/pom.xml?rev=1352897&view=auto
==============================================================================
--- openejb/trunk/openejb/maven/tomee-embedded-maven-plugin/pom.xml (added)
+++ openejb/trunk/openejb/maven/tomee-embedded-maven-plugin/pom.xml Fri Jun 22 14:14:44 2012
@@ -0,0 +1,37 @@
+<?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">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <artifactId>maven</artifactId>
+    <groupId>org.apache.openejb.maven</groupId>
+    <version>1.0.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>tomee-embedded-maven-plugin</artifactId>
+  <packaging>maven-plugin</packaging>
+  <name>OpenEJB :: Maven Plugins :: TomEE Embedded 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>tomee-embedded</artifactId>
+      <version>${tomee.version}</version>
+    </dependency>
+  </dependencies>
+
+  <properties>
+    <maven-plugin.prefix>tomee-embedded</maven-plugin.prefix>
+  </properties>
+
+</project>

Added: openejb/trunk/openejb/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java?rev=1352897&view=auto
==============================================================================
--- openejb/trunk/openejb/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java (added)
+++ openejb/trunk/openejb/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java Fri Jun 22 14:14:44 2012
@@ -0,0 +1,143 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ */
+package org.apache.openejb.maven.plugins;
+
+import java.io.File;
+import java.lang.reflect.Field;
+import java.util.concurrent.CountDownLatch;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.tomee.embedded.Configuration;
+import org.apache.tomee.embedded.Container;
+
+/**
+ * @goal run
+ * @requiresDependencyResolution runtime
+ */
+public class TomEEEmbeddedMojo extends AbstractMojo {
+    /**
+     * @parameter expression="${project.packaging}"
+     */
+    protected String packaging;
+
+    /**
+     * @parameter default-value="${project.build.directory}/${project.build.finalName}"
+     * @readonly
+     */
+    protected File warFile;
+
+    /** config of the container itself -> match 1-1 Configuration attributes -->
+
+    /**
+     * @parameter expression="${tomee-embedded-plugin.http}" default-value="8080"
+     */
+    private int httpPort;
+
+    /**
+     * @parameter expression="${tomee-embedded-plugin.ajp}" default-value="8009"
+     */
+    private int ajpPort = 8009;
+
+    /**
+     * @parameter expression="${tomee-embedded-plugin.stop}" default-value="8005"
+     */
+    private int stopPort;
+
+    /**
+     * @parameter expression="${tomee-embedded-plugin.host}" default-value="localhost"
+     */
+    private String host;
+
+    /**
+     * @parameter expression="${tomee-embedded-plugin.lib}" default-value="${project.build.directory}/apache-tomee-embedded"
+     * @optional
+     */
+    protected String dir;
+
+    /**
+     * @parameter
+     * @optional
+     */
+    private File serverXml;
+
+    @Override
+    public void execute() throws MojoExecutionException, MojoFailureException {
+        if ("pom".equals(packaging)) {
+            getLog().warn("this project is a pom, it is not deployable");
+            return;
+        }
+
+        final CountDownLatch latch = new CountDownLatch(1);
+
+        final Container container = new Container();
+        final Configuration config  = getConfig();
+        container.setup(config);
+        try {
+            container.start();
+
+            Runtime.getRuntime().addShutdownHook(new Thread() {
+                @Override
+                public void run() {
+                    try {
+                        container.undeploy(warFile.getAbsolutePath());
+                        container.stop();
+                    } catch (Exception e) {
+                        getLog().error("can't stop TomEE", e);
+                    } finally {
+                        latch.countDown();
+                    }
+                }
+            });
+
+            container.deploy(warFile.getName(), warFile);
+
+            getLog().info("TomEE embedded started on " + config.getHost() + ":" + config.getHttpPort());
+        } catch (Exception e) {
+            getLog().error("can't start TomEE", e);
+        }
+
+        try {
+            latch.await();
+        } catch (Exception e) {
+            Thread.interrupted();
+        }
+    }
+
+    private Configuration getConfig() { // lazy way but it works fine
+        final Configuration config = new Configuration();
+        for (Field field : getClass().getDeclaredFields()) {
+            try {
+                final Field configField = Configuration.class.getDeclaredField(field.getName());
+                field.setAccessible(true);
+                configField.setAccessible(true);
+
+                final Object value = field.get(this);
+                if (value != null) {
+                    configField.set(config, value);
+                    getLog().info("using " + field.getName()  + " to " + value);
+                }
+            } catch (NoSuchFieldException nsfe) {
+                // ignored
+            } catch (Exception e) {
+                 getLog().warn("can't initialize attribute " + field.getName());
+            }
+
+        }
+        return config;
+    }
+}