<?xml version="1.0"?>
<document url="installation-wls5.html">

  <properties>
    <author>Robert Hayden</author>
    <author>Wong Kok Kai</author>
    <title>The Struts Framework Project - Installation - Weblogic 5.1 sp8</title>
  </properties>

  <body>
<chapter name="5.2 Installation" href="installation">
<section name="Installing Struts with your servlet container" href="Containers">

<h4 id="wls5">Weblogic 5.1 (service pack 8)</h4>
<ul>
  <li>Obtain and install the Xerces XML parser (problems have been reported with
    the Sun reference implementation). Put xerces.jar in your WebLogic system
    path.</li>
  <li>Obtain and unpack the Struts binary distribution (this procedure assumes
    it was extracted to <code>c:\jakarta-struts</code>).</li>
  <li>Add an entry to weblogic.properties for each of the Struts web applications
    that you would like to configure. For example, to make the struts-example
    application available, add the following line to weblogic.properties:<br/>
    <code>weblogic.httpd.webApp.strutsexample=<br/>
    c:/jakarta-struts/webapps/struts-example.war</code></li>
  <li>You do not need to include struts.jar or any of the application specific
    classes in the WebLogic classpath, since this will be done automatically (unless
    deploying an unpacked web archive- see below).</li>
  <li>Start WebLogic server and point your web browser to the struts application.
    For example, to connect to the example application added in step 3:<br/>
    <code>http://localhost:7001/strutsexample</code></li>
  <li>This example application depends on the Struts specific resource file ApplicationResources.properties
    to be present on the classpath. However, WebLogic only extracts *.class files
    from the archive so this file will not be found, resulting in an error the
    first time it is needed- something similar to: javax.servlet.ServletException:
    runtime failure in custom tag 'message'. Steps 6 &amp; 7 will need to be performed
    for this application, and any other that relies on ApplicationResources.properties.</li>
  <li>Extract ApplicationResources.properties from the *.war file, and manually
    copy it to the respective package in the _tmp_war_ directory WebLogic created
    for this application. Again referring to the struts-example application, this
    would be:<br/>
    <code>c:\jakarta-struts\webapps\WEB-INF\_tmp_war_strutsexample</code></li>
  <li>Restart WebLogic. You will now be able to run the application:<br/>
    <code>http://localhost:7001/strutsexample</code></li>
</ul>
<p>The above steps should be followed for applications deployed as *.war files.
  For unpacked web applications, configuration involves adding both <code>struts.jar</code>
  and <code>/WEB-INF/classes</code> to the WebLogic classpath. For this reason,
  I would suggest deploying applications as war files to WebLogic. However, the
  same example application can be successfully deployed in extracted format by
  modifying weblogic.properties (assuming the war was extracted to directory webapps/struts-example):</p>
<p><code>weblogic.httpd.webApp.strutsexample=<br/>
  c:/jakarta-struts/webapps/struts-example/</code></p>
<p>And starting WebLogic with the updated WebLogic classpath. For example:</p>
<p><code>c:\jdk1.3\bin\java -ms16m -mx64m<br/>
  -classpath c:\weblogic\lib\weblogic510sp8boot.jar;</code></p>
  <hr/>
  <h4>Additional Recommendations</h4>
  <ul>
  <li>Servlet and JSP-Reloading should be turned off. First, you pay a performance
    penalty. Depending on the number of JSPs, the number of requests and the
    configured checking interval, the server will slow down. Second, with JSP- and
    Servlet reloading, one opens the door for various Weblogic classloader problems,
    that are difficult to diagnose, difficult to handle and often lead to lost
    HTTP-sessions.</li>
  <li>Set the name of the <code>sessionid</code> to <code>JSESSIONID</code>, if cookies are used for session
    tracking and to jsessionid, if sessions are URL-based. (There are additional
    problems related to URL-based sessions, caused from BEA's way to encode the session
    id (J2EE-incompatible) as query-param. Especially &lt;bean:include&gt; will not work with
    URL-based sessions yet. However, using the correct session name solves at least some
    problems.)</li>
  <li>Configure the JSP-Servlet registration in <code>weblogic.properties</code> for
    maximum J2EE-compliance and/or for maximum performance.</li></ul>
  <p>The JSP-Servlet supports some initialization parameters that can be customized to get
    best performance, maximum compliance or (as shown below) easier debugging:</p>
<pre>
  weblogic.httpd.initArgs.*.jsp=\
       pageCheckSeconds=-1,\
        setEmptyStrings=false,\
         compileCommand=./_jspCompiler_.cmd,\
             workingDir=/weblogic/myserver/tmp_classfiles,\
          keepgenerated=true,\
                  debug=true,\
                verbose=true
</pre>
<p>In the above example, the batch file (<code>_jspCompiler_.cmd</code>) invokes jikes
   which results dramatically reduced startup times (jikes is about three times faster
   than javac.) The batchfile contains only a single line:</p>

<pre>@jikes -g -nowarn %*</pre>

<p>The next configuration could be used when all tests have been done and speed is the
major concern ...</p>

<pre>
  weblogic.httpd.initArgs.*.jsp=\
       pageCheckSeconds=-1,\
        setEmptyStrings=false,\
         compileCommand=./_jspCompiler_.cmd,\
             workingDir=/weblogic/myserver/tmp_classfiles,\
          keepgenerated=false,\
                  debug=false,\
                verbose=false
</pre>

<p>... together with ...</p>

<pre>@jikes -O -nowarn %*</pre>

<p>Weblogic supports similar settings through <code>&lt;context-params&gt;</code> in <code>web.xml</code>
(Please read the latest documentation at the BEA website for details.)</p>
<p>For additional issues, see also <a
href="http://www.mail-archive.com/struts-dev@jakarta.apache.org/msg00284.html">More
fixes for WLS 5.1 SP8</a> from the Struts Developer mailing list</p>
<hr/>
  <ul>
    <li>Author: Robert Hayden</li>
    <li>Author: Wong Kok Kai</li>
    <li>Author: Matthias Kerkhoff </li>
  </ul>
  <hr/>
  <p>Back to <a href="installation.html#Containers">Installation</a></p>
</section>
</chapter>
</body>
</document>
