JBoss WAR deployment

From: Pierre Bernard (webobjects-list..oudah.com)
Date: Tue Mar 21 2006 - 04:09:07 EST

  • Next message: manumohedan..sal.es: "WOLips and WO 5.3"

    Hi!

    I just slaved days over getting Eclipse/WOLips to generate a WAR to
    JBoss' liking.

    Somehow the out-of-the-box WAR support in WOLips seems very broken. I
    ended up rewriting much of the involved Ant targets. Furthermore I
    had to patch the generated web.xml to get a classpath that NSBundle
    can work with.

    First, I had to add additional arguments to the WOApplication task:

                    <woapplication name="${project.name}" stdFrameworks="false"
                                                                                            destDir="${dest.dir}"
                                                                                            customInfoPListContent="${customInfoPListContent}"
                                                                                            principalClass="${principalClass}"
                                                                                            webXML="${webXML}"
                                                                                            webXML_CustomContent="${webXML_CustomContent}"
                                                                                            webXML_WOAINSTALLROOT="/tmp/${project.name}.dst/Library/
    WebObjects/Applications/"
                                                                                             webXML_WOtaglib="WOtaglib_1_0.tld"
                                                                                            webXML_WOAppMode="Development">

                    ...

                            <frameworks root="${wo.wosystemroot}" embed="true">
                                           <patternset>
                                               <includesfile name="woproject/ant.frameworks.wo.wosystemroot"/>
                                    </patternset>
                                </frameworks>
                                <frameworks root="${wo.wolocalroot}" embed="true">
                                           <patternset>
                                               <includesfile name="woproject/ant.frameworks.wo.wolocalroot"/>
                                    </patternset>
                                </frameworks>
                            <frameworks root="${user.home}" embed="true">
                                           <patternset>
                                               <includesfile name="woproject/ant.frameworks.user.home"/>
                                    </patternset>
                                </frameworks>

                    ...

                    </woapplication>

    I modified the ssdd target as follows:

         <target name="ssdd">
                 <mkdir dir="${dest.dir}/${project.name}/WEB-INF/tlds"/>
                 <copy todir="${dest.dir}/${project.name}/WEB-INF/">
                 <fileset dir="${dest.dir}/${project.name}.woa/Contents/">
                     <include name="web.xml"/>
                 </fileset>
             </copy>
                 <copy todir="${dest.dir}/${project.name}/WEB-INF/">
                 <fileset dir=".">
                     <include name="LICENSE"/>
                 </fileset>
             </copy>
             <copy todir="${dest.dir}/${project.name}/WEB-INF/">
                 <fileset dir="${dest.dir}">
                     <include name="${project.name}.woa/**"/>
                 </fileset>
             </copy>
                    <copy todir="${dest.dir}/${project.name}/WEB-INF">
                      <fileset dir="${dest.dir}/${project.name}.woa/Contents">
                     <include name="Frameworks/**"/>
                     <include name="Resources/**"/>
                 </fileset>
              </copy>
                    <copy todir="${dest.dir}/${project.name}/WEB-INF/lib">
                            <fileset dir="${dest.dir}/${project.name}/WEB-INF">
                                    <include name="**/Resources/**/*.jar"/>
                            </fileset>
                            <flattenmapper />
                    </copy>
                    <copy todir="${dest.dir}/${project.name}/WEB-INF/lib">
                            <fileset dir="/Library/WebObjects/Extensions">
                                    <include name="*.jar"/>
                                    <exclude name="servlet.jar"/>
                            </fileset>
                            <flattenmapper />
                    </copy>
                       <copy todir="${dest.dir}/${project.name}/WEB-INF/tlds">
                 <fileset dir="${wo.wosystemroot}/Library/Frameworks/
    JavaWOJSPServlet.framework/Resources/">
                     <include name="WOtaglib_1_0.tld"/>
                 </fileset>
                    </copy>
                    <fixcrlf srcdir="${dest.dir}/${project.name}/WEB-INF/" eol="unix"
    includes="web.xml" />
                    <patch originalfile="${dest.dir}/${project.name}/WEB-INF/web.xml"
    patchfile="web.diff" ignorewhitespace="true"/>
         </target>

    The last two steps patch the classpath. First we neet to strip Mac
    line endings for the patch task to work. The patch file looks like this:

    75c75,77
    < WEBINFROOT/Resources/Java/

    ---
     >
     > WEBINFROOT/HelloWorld.woa/Contents/Resources/Java/helloworld.jar
     >
    84d85
    < WEBINFROOT/Resources/Java/helloworld.jar
    

    BTW, having to work with a patch file is UGLY. I guess WOLips should be updated to generate a valid classpath.

    This changes the way we refer to the main JAR in a way that allows NSBundle to recognize it as a bundle.

    The WAR target could be greatly simplified by basing the WAR off the SSDD:

    <target name="war" depends="ssdd"> <war destfile="${dest.dir}/${project.name}.war" webxml="${dest.dir}/ ${project.name}/WEB-INF/web.xml" basedir="${dest.dir}/${project.name}"> <lib dir="${wo.wosystemroot}/Library/Frameworks/ JavaWOJSPServlet.framework/WebServerResources/Java/"> <include name="JavaWOJSPServlet_client.jar"/> </lib> </war> <copy todir="/tmp/${project.name}.dst/Library/WebObjects/ Applications/"> <fileset dir="${dest.dir}"> <include name="${project.name}.woa/**"/> </fileset> </copy> </target>

    All this buys me a self-contained WAR file with all frameworks embedded. This WAR works fine on JBoss 4.

    Pierre.



    This archive was generated by hypermail 2.0.0 : Tue Mar 21 2006 - 04:09:19 EST