You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cocoon.apache.org by Robin Rigby <ro...@gondolier.org.uk> on 2009/11/17 17:38:23 UTC

Tutorial and Tomcat deployment

Suffering great frustration deploying Cocoon 2.2 to Tomcat.   Reverted to
the tutorial to check the basics.  Hope following notes will help someone
else avoid pain.

Robin

- SUMMARY -------------------

A. Tutorial page 1.  Welcome page has a link to spring bean 
which fails if called from

  http://localhost:8888/myBlock1

but succeeds when called from   
 
  http://localhost:8888/myBlock1/
  
Link is not properly fixed up.  See #2 below.
  
B. Tutorial page 4. Parent POM fails to compile myCocoonWebapp.
Cannot find correct version of maven-war-plugin.  Solutions found 
on mailing list do not work.  See #5 below.

C. <servlet:context/@mount-path="" ...> is not sufficient to mount
the web app as ROOT in Tomcat.  The war file must be ROOT.war
(or the app must be deployed with a context fragment from
elsewhere in the file system).  See #7 below.

D. <finalName>ROOT</finalName> is not sufficient to mount
the web app as ROOT in Jetty.  Change <webAppSourceDirectory/>.  
See #9 below.

E. Tomcat does not unpack ROOT.war if there is a context 
fragment ROOT.xml.  Check and remove the conflicting file.
See #10 below.

F. <finalName>ROOT</finalName> is not sufficient to deploy
the web app as ROOT in Tomcat with tomcat-maven-plugin.  
Add context path. See #12 below.  

- START ----------------------

1.  Create new tutorial blocks

  {...}/myBlock1
  {...}/myBlock2

from 

  http://cocoon.apache.org/2.2/1159_1_1.html
  http://cocoon.apache.org/2.2/1290_1_1.html
  http://cocoon.apache.org/2.2/1291_1_1.html

2.  Run under Jetty + rcl

  cd {...}/myBlock1
  mvn compile jetty:run

browse to 

  http://localhost:8888/myBlock1/

works fine                      <--- OK

But note that 

  http://localhost:8888/myBlock1

works OK (without trailing slash) but then the
link to the Spring bean fails

  http://localhost:8888/spring-bean   <--- FAIL

instead of

  http://localhost:8888/myBlock1/spring-bean

This is not good on page one of the tutorial.

3.  Add webapp block and parent POM

  {...}/myCocoonWebApp
  {...}/pom.xml

from 

  http://cocoon.apache.org/2.2/1362_1_1.html

4.  Run under Jetty + war file

  cd {...}/myBlock1
  mvn install
  cd {...}/myBlock2
  mvn install
  cd {...}/myCocoonWebApp
  mvn package jetty:run

browse to 

  http://localhost:8888/

works fine                      <--- OK

5.  Reactor build from parent POM

  cd {...}
  mvn install

Build fails with           <-- FAIL

  Internal error in the plugin manager 
    executing goal 'org.apache.maven.plugins:maven-war-plugin:2.0.2:war': 
    Unable to find the mojo
'org.apache.maven.plugins:maven-war-plugin:2.0.2:war' 
    in the plugin 'org.apache.maven.plugins:maven-war-plugin'
  Component descriptor cannot be found in the component repository: 
 
org.apache.maven.plugin.Mojoorg.apache.maven.plugins:maven-war-plugin:2.0.2:
war.

This has been an unsolved problem since I first tested Cocoon 2.2.  There
are two 
issues here:  

  i.  The tutorial fails [on my machine] despite the standardisation offered
by Maven.
  ii. The requested plugin is not found in the (any?) repository.

6.  There two solutions at

  http://issues.apache.org/jira/browse/COCOON-2240

Neither one works.  The second solution changes the version number in the
above 
message from 2.0.2 to 2.1-beta-1.

7.  Work around.  Go back to 4 above and copy

  myCocoonWebApp-1.0.0.war

to {tomcat 5.5.20}/webapps. Browse to

  http://localhost:8080/           <-- FAIL

Get error 404 from Tomcat.  But browse to

  http://localhost:8080/myCocoonWebApp-1.0.0/

and it finds the page.  Tomcat ignores the servlet:context/@mount-path="" 
attribute in block-servlet-service.xml

8.  Rename the WAR file ROOT.xml by setting 

  <finalName>ROOT</finalName>

in the POM for myCocoonWebApp.  See

  http://mojo.codehaus.org/tomcat-maven-plugin/usage.html

9.  Test with

  cd {...}/myCocoonWebApp
  mvn clean install jetty:run

This fails with          <-- FAIL

  Webapp source directory 
    {...}\myCocoonWebApp\target\myCocoonWebApp-1.0.0 
    does not exist

Maven has built a ROOT directory and ROOT.war but installed
myCocoonWebApp-1.0.0.war
in the repository (which could be OK).  Jetty has not recognized the
<finalName/>. 
Fix this by changing maven-jetty-plugin in 

  {...}/myCocoonWebApp/pom.xml

under

  <build>
    <plugins>
      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
        <version>6.1.7</version>
        <configuration>

change

 
<webAppSourceDirectory>${project.build.directory}/${pom.artifactId}-${pom.ve
rsion}</webAppSourceDirectory>

to

 
<webAppSourceDirectory>${project.build.directory}/ROOT</webAppSourceDirector
y>

Browse to

  http://localhost:8080/           <-- OK

10. Test by copying 

  ROOT.war 

to {tomcat 5.5.20}/webapps. Browse to

  http://localhost:8080/           <-- FAIL

and Tomcat has not unpacked ROOT.war, though it unpacked the other 
(see #7, above).

Restart Tomcat.  No mention of ROOT.war in {tomcat 5.5.20}/logs.

Check {tomcat 5.5.20}/conf/{engineName}/{hostName} for ROOT.xml.  Remove it.
Tomcat unpacks ROOT.war. Browse to

  http://localhost:8080/           <-- SUCCESS

11. OK, now remove ROOT.war and ROOT subdirectory from {tomcat
5.5.20}/webapps.
Log in to the Tomcat manager

  http://localhost:8080/manager/html

Deploy 

  {...}\myCocoonWebApp\target\ROOT.war

Browse to

  http://localhost:8080/           <-- OK

12. Again, remove ROOT.war and ROOT subdirectory from {tomcat
5.5.20}/webapps.
Add in 

  {...}/myCocoonWebApp/pom.xml

under

  <build>
    <plugins>

a new plugin

      <plugin>
	<groupId>org.codehaus.mojo</groupId>
	<artifactId>tomcat-maven-plugin</artifactId>
	<version>1.0-beta-1</version>
	<configuration>
	  <url>http://localhost:8080/manager</url>
          <server>tomcat-local</server>
        </configuration>
      </plugin>

Set up the server tomcat-local in your Maven settings file

  {userHome}/.m2/settings.xml

under

  <settings> 
    <servers>
 
a new server

      <server>
        <id>tomcat-local</id>
        <username>uname</username>
        <password>pwd</password>
      </server>

All as given at

  http://mojo.codehaus.org/tomcat-maven-plugin/usage.html

Deploy with

  cd {...}/myCocoonWebApp
  mvn tomcat:deploy

Browse to

  http://localhost:8080/           <-- FAIL

The plugin has ignored <finalName/>.  Maven has again built a 
ROOT directory and ROOT.war but installed myCocoonWebApp.war
which works fine but is not required.

Browse to

  http://localhost:8080/myCocoonWebApp/       <-- OK but not useful

Add the context path

      <server>
        <id>tomcat-local</id>
        <username>uname</username>
        <password>pwd</password>
        <path>/ROOT</path>
      </server>

Redeploy with

  mvn tomcat:redeploy

Browse to

  http://localhost:8080/           <-- QED

- END -----------
   





---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org