Hi Marc, Thanks for your patch. Here's the "canonical" way of submitting a patch for the Cactus project:
1/ Always create your patch against CVS HEAD 2/ Create a JIRA issue (http://issues.apache.org/jira) for the Cactus project 3/ Create a real patch, i.e. by calling "cvs patch" (or using your IDE/CVS client). Please use the unified diff format (usually the default). 4/ Attach the patch file to the JIRA issue In this manner it's easy for committer to both a/ see what's changed from the CVS HEAD as the diff clearly shows the differences b/ apply it as there are tools to apply a patch in unified diff format (i.e. no manual work involved). One comment though: I don't think anyone should put Cactus tests next to main code in the project directory structure. Thanks -Vincent > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] > Sent: lundi 20 septembre 2004 21:58 > To: [EMAIL PROTECTED] > Subject: RE: cactus:catifyear > > Vincent, > I have succesfully got the cactus:test-war-in-ear working. Below > are the modified and new targets created. Since this is my first > contribution to open source I don't know the procedure. If you can review > and let me know what you think. > > thanks, > Marc > > MODIFIED GOALS: > <!-- > > ======================================================================== > Compiles the Cactus tests. > > ======================================================================== > --> > <goal name="cactus:compile" prereqs="cactus:init,java:compile" > description="Compiles the Cactus tests"> > > <ant:mkdir dir="${cactus.target.classes.dir}"/> > > <j:choose> > <j:when test="${cactusSourcePresent == 'true'}"> > > <!-- MODIFICATION --> > <!-- added excludes and includes attributes when src and > cactus > test cases are in the same directory --> > <ant:javac destdir="${cactus.target.classes.dir}" > excludes="${cactus.test.excludes},**/package.html" > includes="${cactus.test.includes}" > > debug="${pom.getPluginContext('maven-java- > plugin').getVariable('maven.compil > e.debug')}" > > deprecation="${pom.getPluginContext('maven-java- > plugin').getVariable('maven. > compile.deprecation')}" > > target="${pom.getPluginContext('maven-java- > plugin').getVariable('maven.compi > le.target')}" > > optimize="${pom.getPluginContext('maven-java- > plugin').getVariable('maven.com > pile.optimize')}"> > > <ant:src path="${cactus.src.dir}"/> > > <ant:classpath> > <ant:path refid="maven.dependency.classpath"/> > <ant:path refid="cactus.classpath"/> > <ant:pathelement path="${maven.build.dest}"/> > </ant:classpath> > > <j:if > test="${pom.getPluginContext('maven-java- > plugin').getVariable('maven.compile > .compilerargs')}"> > <ant:compilerarg > line="${pom.getPluginContext('maven-java- > plugin').getVariable('maven.compile > .compilerargs')}"/> > </j:if> > > <j:if > test="${pom.getPluginContext('maven-java- > plugin').getVariable('maven.compile > .encoding')}"> > <ant:setProperty name="encoding" > value="${pom.getPluginContext('maven-java- > plugin').getVariable('maven.compil > e.encoding')}"/> > </j:if> > > <j:if > test="${pom.getPluginContext('maven-java- > plugin').getVariable('maven.compile > .executable')}"> > <ant:setProperty name="executable" > value="${pom.getPluginContext('maven-java- > plugin').getVariable('maven.compil > e.executable')}"/> > </j:if> > > <j:if > test="${pom.getPluginContext('maven-java- > plugin').getVariable('maven.compile > .fork')}"> > <ant:setProperty name="fork" > value="${pom.getPluginContext('maven-java- > plugin').getVariable('maven.compil > e.fork')}"/> > </j:if> > > <j:if > test="${pom.getPluginContext('maven-java- > plugin').getVariable('maven.compile > .source')}"> > <ant:setProperty name="source" > value="${pom.getPluginContext('maven-java- > plugin').getVariable('maven.compil > e.source')}"/> > </j:if> > > <j:if > test="${pom.getPluginContext('maven-java- > plugin').getVariable('maven.compile > .verbose')}"> > <ant:setProperty name="verbose" > value="${pom.getPluginContext('maven-java- > plugin').getVariable('maven.compil > e.verbose')}"/> > </j:if> > </ant:javac> > <!-- END MODIFICATION --> > > <!-- Copy non java source files --> > <ant:copy todir="${cactus.target.classes.dir}"> > <ant:fileset dir="${cactus.src.dir}"> > <ant:exclude name="**/*.java"/> > <ant:exclude name="**/*.html"/> > </ant:fileset> > </ant:copy> > > </j:when> > <j:otherwise> > <ant:echo>No Cactus source files to compile.</ant:echo> > </j:otherwise> > </j:choose> > > </goal> > > <!-- > > ======================================================================== > Creates ear descriptor - application.xml file > > ======================================================================== > --> > <goal name="cactus:generate-ear-descriptor" prereqs="cactus:init"> > > <mkdir dir="${maven.build.dir}"/> > > <ant:echo>Generating appxml file:[${maven.build.dir}/application.xml] > version ${cactus.j2ee.version}</ant:echo> > > <j:file name="${maven.build.dir}/application.xml" outputMode="xml" > prettyPrint="true" encoding="UTF-8"> > > <j:switch on="${cactus.j2ee.version}"> > <j:case value="1.3"> > <x:doctype name="application" > publicId="-//Sun Microsystems, Inc.//DTD J2EE Application > 1.3//EN" > systemId="http://java.sun.com/dtd/application_1_3.dtd"/> > </j:case> > <j:default> > <x:doctype name="application" > publicId="-//Sun Microsystems, Inc.//DTD J2EE Application > 1.2//EN" > > systemId="http://java.sun.com/j2ee/dtds/application_1_2.dtd"/> > </j:default> > </j:switch> > > <x:element name="application"> > <x:element name="display-name">${pom.name} for Cactus</x:element> > > <!-- cactus war file --> > <x:element name="module"> > <x:element name="web"> > <x:element name="web-uri">${cactus.war.name}</x:element> > <x:element name="context-root">${pom.artifactId}</x:element> > </x:element> > </x:element> > > <!-- ejb module under test --> > <!-- MODIFICATION --> > <!-- If war in ear then the ejb reference doesn't get included in > application.xml --> > <j:if test="${!isWarInEarProject}"> > <x:element name="module"> > <x:element name="ejb">${cactus.ejb.name}</x:element> > </x:element> > </j:if> > <!-- END MODIFICATION --> > > <j:forEach var="lib" items="${pom.artifacts}"> > <j:set var="dep" value="${lib.dependency}"/> > <j:if test="${dep.getProperty('ear.bundle')=='true' || > dep.getProperty('ear.module')=='true'}"> > <j:choose> > <j:when test="${dep.type=='war'}"> > <x:element name="module"> > <x:element name="web"> > <x:element > name="web-uri">${dep.getArtifact()}</x:element> > <x:element > name="context-root">${dep.getProperty('ear.appxml.war.context- > root')}</x:ele > ment> > </x:element> > </x:element> > </j:when> > <j:when test="${dep.type=='ejb'}"> > <x:element name="module"> > <x:element name="ejb">${dep.getArtifact()}</x:element> > > </x:element> > </j:when> > <j:when test="${dep.type=='jar'}"> > <j:if test="${dep.getProperty('ear.module')=='true'}"> > <x:element name="module"> > <x:element > name="java">${dep.getArtifact()}</x:element> > > </x:element> > </j:if> > </j:when> > <j:when test="${dep.type=='rar'}"> > <x:element name="module"> > <x:element > name="connector">${dep.getArtifact()}</x:element> > </x:element> > </j:when> > <j:when test="${dep.type=='sar'}"> > <x:element name="module"> > <x:element > name="connector">${dep.getArtifact()}</x:element> > </x:element> > </j:when> > </j:choose> > </j:if> > </j:forEach> > > </x:element> > </j:file> > > </goal> > > > NEW GOALS: > <!-- > > ======================================================================== > Initialization before cactifying the WAR in EAR > > ======================================================================== > --> > <goal name="cactus:cactifywar-in-ear-init"> > <j:set var="isWarInEarProject" value="true"/> > </goal> > > <!-- > > ======================================================================== > Generate a Cactified WAR in EAR > > ======================================================================== > --> > <goal name="cactus:cactifywar-in-ear" > > prereqs="cactus:cactifywar-in-ear-init,cactus:cactifywar,cactus:generate- > ear > -descriptor" > description="Create and cactify a WAR in EAR"> > > <ant:mkdir dir="${maven.build.dir}"/> > > <!-- Ensure that the ear properties are loaded in memory so that they > can be > referenced --> > <attainGoal name="ear:load"/> > > <ant:available property="cactus.ear.manifest.available" > > file="${pom.getPluginContext('maven-ear- > plugin').getVariable('maven.ear.mani > fest')}"/> > > <ant:available property="cactus.ear.src.available" > > file="${pom.getPluginContext('maven-ear- > plugin').getVariable('maven.ear.src' > )}"/> > > <!-- don't think this is necessary if this is in the plugin --> > <j:set var="cactus.ear" > value="${maven.build.dir}/${pom.artifactId}-cactus.ear"/> > > <ant:ear destfile="${cactus.ear}" > appxml="${maven.build.dir}/application.xml"> > > <j:if test="${cactus.ear.src.available}"> > <fileset > dir="${pom.getPluginContext('maven-ear- > plugin').getVariable('maven.ear.src') > }" > casesensitive="false" excludes="**/META-INF/application.xml"/> > </j:if> > > <!-- include cactus generated archives --> > <ant:fileset dir="${cactus.war.dir}"> > <ant:include name="${cactus.war.name}"/> > </ant:fileset> > > <!-- include marked dependencies --> > <j:forEach var="lib" items="${pom.artifacts}"> > <j:set var="dep" value="${lib.dependency}"/> > <j:if test="${dep.getProperty('ear.bundle')=='true' || > dep.getProperty('ear.module')=='true'}"> > <ant:fileset dir="${lib.file.parent}"> > <ant:include name="${lib.file.name}"/> > </ant:fileset> > </j:if> > </j:forEach> > > <j:if test="${cactus.ear.manifest.available}"> > <ant:setProperty name="manifest" > > value="${pom.getPluginContext('maven-ear- > plugin').getVariable('maven.ear.man > ifest')}"/> > </j:if> > > </ant:ear> > </goal> > > <!-- > > ======================================================================== > Execute the Cactus tests, packaging them in an EAR. > > ======================================================================== > --> > <goal name="cactus:test-war-in-ear" > prereqs="cactus:init,cactus:init-report,cactus:cactifywar-in-ear" > description="Run all Cactus tests (packaged in an EAR)"> > > <cactus earfile="${cactus.ear}" fork="yes" > errorproperty="cactustests.error" > failureproperty="cactustests.failure" > printsummary="${maven.cactus.printsummary}"> > > <!-- Configure the cactus task for logging --> > <j:if test="${context.getVariable('cactus.logging.config.client') != > null}"> > <cactusproperty server="false" > propertiesFile="${cactus.logging.config.client}"/> > </j:if> > <j:if test="${context.getVariable('cactus.logging.config.server') != > null}"> > <cactusproperty server="true" > propertiesFile="${cactus.logging.config.server}"/> > </j:if> > > <ant:classpath> > <ant:pathelement path="${maven.build.dest}"/> > <ant:pathelement location="${cactus.target.classes.dir}"/> > <ant:path refid="maven.dependency.classpath"/> > <ant:path refid="cactus.classpath"/> > </ant:classpath> > > <containerset> > > <!-- Note: The port attribute for JBoss is only used for custom > configs --> > <jboss3x if="cactus.home.jboss3x" port="${cactus.port}" > dir="${cactus.home.jboss3x}" > output="${cactus.reports.dir}/jboss3x.out" > todir="${cactus.reports.dir}/jboss3x" > config="${cactus.jboss3x.config.name}"> > <j:if test="${context.getVariable('cactus.tmp.dir') != null}"> > <ant:setProperty name="tmpdir" value="${cactus.tmp.dir}"/> > </j:if> > <j:if test="${context.getVariable('cactus.jboss3x.jndiport') != > null}"> > <ant:setProperty name="jndiport" > value="${cactus.jboss3x.jndiport}"/> > </j:if> > </jboss3x> > > <orion1x if="cactus.home.orion1x" port="${cactus.port}" > dir="${cactus.home.orion1x}" > output="${cactus.reports.dir}/orion1x.out" > todir="${cactus.reports.dir}/orion1x"> > <j:if test="${context.getVariable('cactus.tmp.dir') != null}"> > <ant:setProperty name="tmpdir" value="${cactus.tmp.dir}"/> > </j:if> > </orion1x> > > <orion2x if="cactus.home.orion2x" port="${cactus.port}" > dir="${cactus.home.orion2x}" > output="${cactus.reports.dir}/orion2x.out" > todir="${cactus.reports.dir}/orion2x"> > <j:if test="${context.getVariable('cactus.tmp.dir') != null}"> > <ant:setProperty name="tmpdir" value="${cactus.tmp.dir}"/> > </j:if> > </orion2x> > > <resin2x if="cactus.home.resin2x" port="${cactus.port}" > dir="${cactus.home.resin2x}" > output="${cactus.reports.dir}/resin2x.out" > todir="${cactus.reports.dir}/resin2x"> > <j:if test="${context.getVariable('cactus.tmp.dir') != null}"> > <ant:setProperty name="tmpdir" value="${cactus.tmp.dir}"/> > </j:if> > <j:if test="${context.getVariable('cactus.resin2x.config') != > null}"> > <ant:setProperty name="resinconf" > value="${cactus.resin2x.config}"/> > </j:if> > </resin2x> > > <resin3x if="cactus.home.resin3x" port="${cactus.port}" > dir="${cactus.home.resin3x}" > output="${cactus.reports.dir}/resin3x.out" > todir="${cactus.reports.dir}/resin3x"> > <j:if test="${context.getVariable('cactus.tmp.dir') != null}"> > <ant:setProperty name="tmpdir" value="${cactus.tmp.dir}"/> > </j:if> > <j:if test="${context.getVariable('cactus.resin3x.config') != > null}"> > <ant:setProperty name="resinconf" > value="${cactus.resin3x.config}"/> > </j:if> > </resin3x> > > <tomcat4x if="cactus.home.tomcat4x" port="${cactus.port}" > dir="${cactus.home.tomcat4x}" > output="${cactus.reports.dir}/tomcat4x.out" > todir="${cactus.reports.dir}/tomcat4x"> > <j:if test="${context.getVariable('cactus.tmp.dir') != null}"> > <ant:setProperty name="tmpdir" value="${cactus.tmp.dir}"/> > </j:if> > <j:if test="${context.getVariable('cactus.tomcat4x.config') != > null}"> > <ant:setProperty name="serverxml" > value="${cactus.tomcat4x.config}"/> > </j:if> > <j:if test="${context.getVariable('cactus.tomcat4x.tmpdir') != > null}"> > <ant:setProperty name="tmpdir" > value="${cactus.tomcat4x.tmpdir}"/> > </j:if> > <j:if test="${context.getVariable('cactus.tomcat4x.conf.dir') != > null}"> > <conf dir="${cactus.tomcat4x.conf.dir}" > includes="${cactus.tomcat4x.conf.includes}" > excludes="${cactus.tomcat4x.conf.excludes}"/> > </j:if> > </tomcat4x> > > <tomcat5x if="cactus.home.tomcat5x" port="${cactus.port}" > dir="${cactus.home.tomcat5x}" > output="${cactus.reports.dir}/tomcat5x.out" > todir="${cactus.reports.dir}/tomcat5x"> > <j:if test="${context.getVariable('cactus.tmp.dir') != null}"> > <ant:setProperty name="tmpdir" value="${cactus.tmp.dir}"/> > </j:if> > <j:if test="${context.getVariable('cactus.tomcat5x.config') != > null}"> > <ant:setProperty name="serverxml" > value="${cactus.tomcat5x.config}"/> > </j:if> > <j:if test="${context.getVariable('cactus.tomcat5x.tmpdir') != > null}"> > <ant:setProperty name="tmpdir" > value="${cactus.tomcat5x.tmpdir}"/> > </j:if> > <j:if test="${context.getVariable('cactus.tomcat5x.conf.dir') != > null}"> > <conf dir="${cactus.tomcat5x.conf.dir}" > includes="${cactus.tomcat5x.conf.includes}" > excludes="${cactus.tomcat5x.conf.excludes}"/> > </j:if> > </tomcat5x> > > <weblogic7x if="cactus.home.weblogic7x" port="${cactus.port}" > dir="${cactus.home.weblogic7x}" > output="${cactus.reports.dir}/weblogic7x.out" > todir="${cactus.reports.dir}/weblogic7x"> > <j:if test="${context.getVariable('cactus.tmp.dir') != null}"> > <ant:setProperty name="tmpdir" value="${cactus.tmp.dir}"/> > </j:if> > <j:if test="${context.getVariable('cactus.weblogic7x.beahome') > != > null}"> > <ant:setProperty name="beahome" > value="${cactus.weblogic7x.beahome}"/> > </j:if> > <j:if test="${context.getVariable('cactus.weblogic7x.config') != > null}"> > <ant:setProperty name="configxml" > value="${cactus.weblogic7x.config}"/> > </j:if> > </weblogic7x> > > </containerset> > > <ant:formatter type="plain" usefile="${cactus.junit.usefile}"/> > <ant:formatter type="xml"/> > > <ant:batchtest> > <ant:fileset dir="${cactus.src.dir}" > includes="${cactus.test.includes}" > excludes="${cactus.test.excludes}"/> > </ant:batchtest> > > </cactus> > > <!-- TODO: Change the Cactus stylesheet (cactus.jsl) to handle reports > for several containers --> > > <!-- Consolidate the reports into a single --> > <ant:junitreport todir="${cactus.reports.dir}" > tofile="TESTS-TestSuites-Cactus.xml"> > > <j:if test="${context.getVariable('cactus.home.jboss3x') != null}"> > <ant:fileset dir="${cactus.reports.dir}/jboss3x"> > <ant:include name="TEST-*.xml"/> > </ant:fileset> > </j:if> > > <j:if test="${context.getVariable('cactus.home.orion1x') != null}"> > <ant:fileset dir="${cactus.reports.dir}/orion1x"> > <ant:include name="TEST-*.xml"/> > </ant:fileset> > </j:if> > > <j:if test="${context.getVariable('cactus.home.orion2x') != null}"> > <ant:fileset dir="${cactus.reports.dir}/orion2x"> > <ant:include name="TEST-*.xml"/> > </ant:fileset> > </j:if> > > <j:if test="${context.getVariable('cactus.home.resin2x') != null}"> > <ant:fileset dir="${cactus.reports.dir}/resin2x"> > <ant:include name="TEST-*.xml"/> > </ant:fileset> > </j:if> > > <j:if test="${context.getVariable('cactus.home.resin3x') != null}"> > <ant:fileset dir="${cactus.reports.dir}/resin3x"> > <ant:include name="TEST-*.xml"/> > </ant:fileset> > </j:if> > > <j:if test="${context.getVariable('cactus.home.tomcat4x') != null}"> > <ant:fileset dir="${cactus.reports.dir}/tomcat4x"> > <ant:include name="TEST-*.xml"/> > </ant:fileset> > </j:if> > > <j:if test="${context.getVariable('cactus.home.tomcat5x') != null}"> > <ant:fileset dir="${cactus.reports.dir}/tomcat5x"> > <ant:include name="TEST-*.xml"/> > </ant:fileset> > </j:if> > > <j:if test="${context.getVariable('cactus.home.weblogic7x') != > null}"> > <ant:fileset dir="${cactus.reports.dir}/weblogic7x"> > <ant:include name="TEST-*.xml"/> > </ant:fileset> > </j:if> > > </ant:junitreport> > > <j:if test="${cactus.halt.on.failure}"> > <ant:fail if="cactustests.failure">At least one test had a > failure!</ant:fail> > </j:if> > <j:if test="${cactus.halt.on.error}"> > <ant:fail if="cactustests.error">At least one test had an > error!</ant:fail> > </j:if> > > </goal> > > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] > Sent: Friday, September 10, 2004 3:11 PM > To: [EMAIL PROTECTED] > Subject: RE: cactus:catifyear > > > Ran into a little issue. Since my source code, cactus tests are in the > same > source tree it is causing duplicate files to be added to the cactified > war. > > src (all code) > src\com\** (real code) > src\test\** (container tests) > > My properties are set to: > maven.war.classes.includes=com/** > maven.war.classes.excludes=test/** > cactus.test.includes=test/**/TestContainer*,test/**/*.xml > cactus.test.excludes=com/** > > The pre-cactified war doesn't include the test files (which is good), but > the cactified war includes the real code twice. My app server (weblogic > 8.1) complains during deployment about the duplicate files. > > I thought that this would fix it in cactus:cactifywar (I added the > <include > /> and <exclude />) but no luck. > <cactifywar version="2.3" destfile="${cactus.war}"> > > ... > > <ant:classes dir="${cactus.target.classes.dir}"> > <include name="${cactus.test.includes}" /> > <exclude name="${cactus.test.excludes}" /> > </ant:classes> > > ... > > </cactifywar> > > Any ideas? > > After this gets resolved I believe that cactus:test-war-in-ear will be > ready > to go. I will start looking at the code prior to building the war > (copying > of files into the target/test-cactus-classes now, and see if I can > pinpoint > it. > > Marc > > -----Original Message----- > From: Vincent Massol [mailto:[EMAIL PROTECTED] > Sent: Friday, September 10, 2004 1:13 PM > To: 'Cactus Users List' > Subject: RE: cactus:catifyear > > > > > > -----Original Message----- > > From: [EMAIL PROTECTED] > > [mailto:[EMAIL PROTECTED] > > Sent: vendredi 10 septembre 2004 19:54 > > To: [EMAIL PROTECTED] > > Subject: RE: cactus:catifyear > > > > OK, finally have time to attempt this. > > > > My plan is: > > 1) get cactus:test-war-in-ear working. This will build the cactified > war > > as > > normal, wrap the war in an ear including any dependencies that have > > ear.bundle > > 2) Look into modifying cactus:test to detect whether to call :test-war, > > :test-ear, or :test-war-in-ear > > Looks cool! Thanks Marc > > -Vincent > > > > > > > > > -----Original Message----- > > From: Vincent Massol [mailto:[EMAIL PROTECTED] > > Sent: Saturday, August 21, 2004 2:59 AM > > To: 'Cactus Users List' > > Subject: RE: cactus:catifyear > > > > > > Hi Marc, > > > > Yes, I think that would be very useful. Maybe the plugin can > automatically > > detect if it needs to deploy the WAR as an EAR or not? > > > > I'd suggest that the plugin checks to see if there are any ejb defined > as > > dependencies in the project.xml and that they are tagged with some > > property > > such as ear.bundle (this is the property used by the EAR plugin to > decide > > what artifact to bundle in the ear). If there are any the plugin could > > wrap > > the cactified war in an ear, adding to the ear the artifacts marked with > > ear.bundle. Another alternative is to name the property > cactus.ear.bundle. > > > > We can also have an explicitely named goal. We already have cactus:test- > > war > > and cactus:test-ear. We could have cactus:test-war-in-ear. > > > > Thanks > > -Vincent > > > > > -----Original Message----- > > > From: [EMAIL PROTECTED] > > > [mailto:[EMAIL PROTECTED] > > > Sent: mercredi 18 ao�t 2004 19:35 > > > To: [EMAIL PROTECTED] > > > Subject: cactus:catifyear > > > > > > I have been using cactus and ant extensively and now attempting to > > convert > > > to maven. I have been successful at the following: > > > > > > - run ejb tests > > > - run war tests (no ejb dependencies) > > > > > > Now I am trying to run war tests that have dependencies on ejbs (jsps > > call > > > Business Delegate which calls stateless session bean). In our current > > dev > > > process we bundle the ejb and war into one ear file and don't use ejb- > > ref > > > declarations in the web.xml. In other words, we don't use the > > > java:comp/env > > > approach when we look up our ejbs. This is causing problems for me as > I > > > want to test the servlet code that uses the ejbs, but at the same time > > > don't > > > want to change the code to support run the tests. I ran into the same > > > issues when using cactus and ant, and ended up writing a customer > target > > > to > > > do what I needed. > > > > > > I guess what I am looking for is cactus:cactifywarinear (war-in-ear): > > > - call cactus:cactifywar > > > - create an ear that contains the the cactified war as well as > depencies > > > with cactus.bundle = true > > > - do the normal startup, deploy the cactus-ear, run tests, shut down. > > > > > > Since the *.jelly file code is very straightforward I am gonna attempt > > to > > > create a new goal to test and see how it goes. Is this a feature that > > > others would like? I hope I explained things clearly. > > > > > > Marc > > > > > > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
