You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ol...@apache.org on 2012/04/05 23:40:38 UTC

svn commit: r1310083 - /tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/AbstractRunMojo.java

Author: olamy
Date: Thu Apr  5 21:40:37 2012
New Revision: 1310083

URL: http://svn.apache.org/viewvc?rev=1310083&view=rev
Log:
[MTOMCAT-135] tomcat7:run does not load HandlesTypes in application classes

Modified:
    tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/AbstractRunMojo.java

Modified: tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/AbstractRunMojo.java
URL: http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/AbstractRunMojo.java?rev=1310083&r1=1310082&r2=1310083&view=diff
==============================================================================
--- tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/AbstractRunMojo.java (original)
+++ tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/AbstractRunMojo.java Thu Apr  5 21:40:37 2012
@@ -32,6 +32,8 @@ import org.apache.maven.artifact.resolve
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.project.MavenProject;
+import org.apache.naming.NamingEntry;
+import org.apache.naming.resources.FileDirContext;
 import org.apache.tomcat.maven.common.run.EmbeddedRegistry;
 import org.apache.tomcat.maven.common.run.ExternalRepositoriesReloadableWebappLoader;
 import org.apache.tomcat.maven.plugin.tomcat7.AbstractTomcat7Mojo;
@@ -49,6 +51,7 @@ import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.xml.sax.SAXException;
 
+import javax.naming.NamingException;
 import javax.servlet.ServletException;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -60,6 +63,7 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -254,14 +258,15 @@ public abstract class AbstractRunMojo
      * @since 1.1
      */
     private String keystorePass;
-    
+
     /**
      * Override the type of keystore file to be used for the server certificate. If not specified, the default value is "JKS".
+     *
      * @parameter default-value="JKS"
      * @since 2.0.1
      */
     private String keystoreType;
-    
+
     /**
      * <p>
      * Enables or disables naming support for the embedded Tomcat server.
@@ -388,6 +393,10 @@ public abstract class AbstractRunMojo
         {
             throw new MojoExecutionException( e.getMessage(), e );
         }
+        catch ( NamingException e )
+        {
+            throw new MojoExecutionException( e.getMessage(), e );
+        }
         finally
         {
             if ( useSeparateTomcatClassLoader )
@@ -420,10 +429,15 @@ public abstract class AbstractRunMojo
      * @throws MojoExecutionException in case of an error creating the context
      */
     protected Context createContext( Tomcat container )
-        throws IOException, MojoExecutionException, ServletException
+        throws IOException, MojoExecutionException, ServletException, NamingException
     {
         String contextPath = getPath();
+
         Context context = container.addWebapp( contextPath, getDocBase().getAbsolutePath() );
+
+        context.setResources(
+            new MyDirContext( new File( project.getBuild().getOutputDirectory() ).getAbsolutePath() ) );
+
         //Tomcat.initWebappDefaults( context );
 
         if ( useSeparateTomcatClassLoader )
@@ -437,10 +451,41 @@ public abstract class AbstractRunMojo
         {
             context.setConfigFile( getContextFile().toURI().toURL() );
         }
+
         return context;
 
     }
 
+    private static class MyDirContext
+        extends FileDirContext
+    {
+        String buildOutputDirectory;
+
+        MyDirContext( String buildOutputDirectory )
+        {
+            this.buildOutputDirectory = buildOutputDirectory;
+        }
+
+        @Override
+        protected List<NamingEntry> doListBindings( String name )
+            throws NamingException
+        {
+            if ( "/WEB-INF/classes".equals( name ) )
+            {
+                if ( !new File( buildOutputDirectory ).exists() )
+                {
+                    return Collections.emptyList();
+                }
+                FileDirContext fileDirContext = new FileDirContext();
+                fileDirContext.setDocBase( buildOutputDirectory );
+                NamingEntry namingEntry = new NamingEntry( "/WEB-INF/classes", fileDirContext, -1 );
+                return Collections.singletonList( namingEntry );
+            }
+
+            return null;
+        }
+    }
+
     /**
      * Gets the webapp loader to run this web application under.
      *
@@ -659,7 +704,7 @@ public abstract class AbstractRunMojo
      * @throws MojoExecutionException if the server could not be configured
      */
     private void startContainer()
-        throws IOException, LifecycleException, MojoExecutionException, ServletException
+        throws IOException, LifecycleException, MojoExecutionException, ServletException, NamingException
     {
         String previousCatalinaBase = System.getProperty( "catalina.base" );
 
@@ -695,6 +740,9 @@ public abstract class AbstractRunMojo
                 CatalinaProperties.getProperty( "foo" );
 
                 Tomcat embeddedTomcat = new Tomcat();
+
+                Context ctx = createContext( embeddedTomcat );
+
                 if ( useNaming )
                 {
                     embeddedTomcat.enableNaming();
@@ -735,8 +783,6 @@ public abstract class AbstractRunMojo
                     embeddedTomcat.getEngine().setParentClassLoader( getTomcatClassLoader() );
                 }
 
-                Context ctx = createContext( embeddedTomcat );
-
                 AccessLogValve alv = new AccessLogValve();
                 alv.setDirectory( new File( configurationDir, "logs" ).getAbsolutePath() );
                 alv.setPattern( "%h %l %u %t \"%r\" %s %b %I %D" );
@@ -761,7 +807,7 @@ public abstract class AbstractRunMojo
                     }
                     if ( keystoreType != null )
                     {
-                    	httpsConnector.setAttribute( "keystoreType", keystoreType);
+                        httpsConnector.setAttribute( "keystoreType", keystoreType );
                     }
                     embeddedTomcat.getEngine().getService().addConnector( httpsConnector );
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org