Background
----------
Customers using 9iAS with less than v1.0.2.2.x should upgrade.
NOTE: Starting Apache JServ manually, or starting multiple Apache Jserv
processes is quite error prone. Starting with Oracle9iAS 1.0.2.2 a new module
(mod_oprocmgr) has been included to simplify this process.
The Process Manager module can start and manage multiple Jserv processes. It
handles death detection and will restart dead or hung JVMs.
For more information on this new feature before considering manual Apache JServ
configuration.
Reference:
Note 155661.1 Introduction to the Process Manager mod_oprocmgr
Note Contents/ Index
--------------------
1. Architecture to be implemented
2. Files to be modified
3. Pre-configuration Requirements
4. Configuration of the HTTP Server machine
5. Configuration of the Application Servers machines
6. For a Static HTML Configuration
7. Notes
8. Other documentation to read
9. Possible errors
1. Architecture to be implemented :
-----------------------------------
(Load Balancing through the JServ machines)
---------------
| HTTP Server | machine #1 (9iAS HTTP Server only)
--------------- Valid Workaround : $OH/forms60/java/*
/ \ ^
/ \ |
---------------------- ---------------------- |
| Application Server | | Application Server | (9iAS Enterprise Edition)
| Jserv #1 | | JServ #2 |
---------------------- ----------------------
machine #2 machine #3
There is also another architecture that may be more reliable... but the principle it's the same.
(if you use this architecture you don't need to copy the Java - $OH/forms60/java/)
------------------------------------ ---------------------------
| HTTP Server + Application Server | | Application Server |
| 9iAS Enterprise Edition |------| 9iAS Enterprise Edition |
| Jserv #1 | | JServ #2 |
------------------------------------ ---------------------------
same configuration for same configuration for
machine #1 and #2 machine #3
If you want to start more than one JServ machine on each machine... it can be done, by just creating
the files to start and stop the JServ machines.
2. Files to be modified :
-------------------------
- httpd.conf --> \Apache\Apache\conf (machine #1)
- jserv.conf --> \Apache\JServ\conf (machine #1)
- jserv.properties --> \Apache\JServ\conf (machine #2 and #3)
- zone.properties --> \Apache\JServ\servlets (machine #2 and #3)
- default.env --> \forms60\server (machine #2 and #3)
- formsweb.cfg --> \forms60\server (machine #2 and #3)
3. Pre-configuration Requirements :
-----------------------------------
-> environment PATH variable
# Windows Environment
PATH must include \bin
# Solaris Environment
LD_LIBRARY_PATH must include /lib
# HP Environment
SHLIB_PATH must include /lib
# AIX Environment
LIBPATH must include /lib
4. Configuration of the HTTP Server machine :
---------------------------------------------
-> httpd.conf
...
# Please be aware of this value - number of requests to both JServ machines
# 9iAS 1.0.0 no more than 256 ; 9iAS 1.0.2.X no more than 1024
MaxClients 150
...
# It's needed a virtual directory to map the whole part of the JAVA Client, on the HTTP Server
#
# VERY IMPORTANT :
# A copy of the $OH/forms60/java from the Application Servers. Be aware that each time is applied a patchset of
# Developer 6i, you'll need to re-copy the $OH/forms60/java to the HTTP Server.
Alias /forms60java/ "D:\\forms60/java/"
Order allow,deny
Allow from all
...
-> jserv.conf => working
# Windows Environment
...
# Because this architecture only works, by lifting the JServ machines manually on...
# This is an extract from the Manual for Patchset 5 of Developer 6i to Load Balance both JServ machine, from a
# "root" zone (set by default).
ApJServManual on
ApJServMount /servlet balance://set/root
ApJServBalance set JServ1
ApJServBalance set JServ2
ApJServHost JServ1 ajpv12://:8001
ApJServHost JServ2 ajpv12://:8002
ApJServRoute JS1 JServ1
ApJServRoute JS2 JServ2
...
# Solaris Environment
...
LoadModule jserv_module /Apache/Jserv/libexec/mod_jserv.so
# Because this architecture only works, by lifting the JServ machines manually on...
# This is an extract from the Manual for Patchset 5 of Developer 6i to Load Balance both JServ machine, from a
# "root" zone (set by default).
ApJServManual on
ApJServMount /servlet balance://set/root
ApJServBalance set JServ1
ApJServBalance set JServ2
ApJServHost JServ1 ajpv12://:8001
ApJServHost JServ2 ajpv12://:8002
ApJServRoute JS1 JServ1
ApJServRoute JS2 JServ2
...
5. Configuration of the Application Servers machines :
------------------------------------------------------
-> Create a file start.bat and stop.bat (to start and stop manually the JServ's machines)
# Windows Environment -> start.bat
set FORMS60_PATH=D:\myapp;D:\\Forms60
set properties1=D:\\Apache\Jserv\conf\jserv.properties
set log=D:\\Apache\Apache\logs\jserv_manual
set CLASSPATH=%CLASSPATH%;D:\\Apache\JServ\ApacheJServ.jar;D:\\Apache\Jsdk\lib\jsdk.jar;D:\\jdbc\lib\classes111.zip;D:\\Apache\Apache\htdocs\_pages;D:\\Apache\Apache\htdocs\OnlineOrders_html;D:\\Apache\Apache\htdocs\OnlineOrders_html\OnlineOrders.jar;D:\\Apache\BC4J\lib\connectionmanager.zip;D:\\forms60\java\f60srv.jar;D:\\forms60\java
set
JAVA=D:\\Apache\jdk\bin\java
%JAVA% -classpath %CLASSPATH% org.apache.jserv.JServ %properties1% >> %log%1.log
# Windows Environment -> stop.bat
set properties1=D:\\Apache\Jserv\conf\jserv.properties
set CLASSPATH=%CLASSPATH%;D:\\Apache\JServ\ApacheJServ.jar;D:\\Apache\Jsdk\lib\jsdk.jar;D:\\jdbc\lib\classes111.zip;D:\\Apache\Apache\htdocs\_pages;D:\\Apache\Apache\htdocs\OnlineOrders_html;D:\\Apache\Apache\htdocs\OnlineOrders_html\OnlineOrders.jar;D:\\Apache\BC4J\lib\connectionmanager.zip;D:\\forms60\java\f60srv.jar;D:\\forms60\java
set
JAVA=D:\\Apache\jdk\bin\java
%JAVA% -classpath %CLASSPATH% org.apache.jserv.JServ %properties1% -s
# Solaris Environment -> start.sh
#!/bin/sh
ORACLE_HOME=/; export ORACLE_HOME
IAS_HOME=/; export IAS_HOME
APACHE=$IAS_HOME/Apache; export APACHE
APACHE_HOME=$APACHE/Apache; export APACHE_HOME
JSERV_HOME=$APACHE/Jserv; export JSERV_HOME
JSERV_CONF=$JSERV_HOME/etc; export JSERV_CONF
JAVA_HOME=$APACHE/jdk; export JAVA_HOME
CLASSPATH=$CLASSPATH:$APACHE/Jsdk/lib/jsdk.jar:$IAS_HOME/jdbc/lib/classes12.zip:$JSERV_HOME/libexec/ApacheJServ.jar:$ORACLE_HOME/forms60/java\f60srv.jar:$ORACLE_HOME/forms60/java; export CLASSPATH
JAVA=$JAVA_HOME/bin/java; export JAVA
LD_LIBRARY_PATH=$ORACLE_HOME/lib; export LD_LIBRARY_PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
FORMS60_PATH=$ORACLE_HOME/forms60; export FORMS60_PATH
nohup $JAVA -classpath $CLASSPATH org.apache.jserv.JServ $JSERV_CONF/jserv.properties >> $JSERV_HOME/logs/jserv.startup.log 2>&1 &
# Solaris Environment -> stop.sh
#!/bin/sh
ORACLE_HOME=/; export ORACLE_HOME
IAS_HOME=/; export IAS_HOME
APACHE=$IAS_HOME/Apache; export APACHE
APACHE_HOME=$APACHE/Apache; export APACHE_HOME
JSERV_HOME=$APACHE/Jserv; export JSERV_HOME
JSERV_CONF=$JSERV_HOME/etc; export JSERV_CONF
JAVA_HOME=$APACHE/jdk; export JAVA_HOME
CLASSPATH=$CLASSPATH:$APACHE/Jsdk/lib/jsdk.jar:$IAS_HOME/jdbc/lib/classes12.zip:$JSERV_HOME/libexec/ApacheJServ.jar:$ORACLE_HOME/forms60/java\f60srv.jar:$ORACLE_HOME/forms60/java; export CLASSPATH
JAVA=$JAVA_HOME/bin/java; export JAVA
LD_LIBRARY_PATH=$ORACLE_HOME/lib; export LD_LIBRARY_PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
FORMS60_PATH=$ORACLE_HOME/forms60; export FORMS60_PATH
nohup $JAVA -classpath $CLASSPATH org.apache.jserv.JServ $JSERV_CONF/jserv.properties -s
-> jserv.properties
...
# Windows Environment
# CLASSPATH for Forms 6i Listener Servlet
wrapper.classpath=D:\\forms60\java\f60srv.jar
wrapper.path=D:\\bin;D:\\bin
# Solaris Environment
# CLASSPATH for Forms 6i Listener Servlet
wrapper.classpath=//forms60/java/f60srv.jar
wrapper.path=//bin://bin
wrapper.env=LD_LIBRARY_PATH=//lib://lib
...
# Put the bindaddress and port equal to the entry in the "ApJServHost" from jserv.conf, in the HTTP Server machine
bindaddress=
port=
# Please be aware that the zones should include the one that you've included on "ApJServMount" from jserv.conf,
# in the HTTP Server machine
zones=root
...
# The log file of the particulary JServ machine
log.file=D:\\Apache\Jserv\logs\jserv1.log
...
-> default.env (it must be created on D:\\forms60\server\default.env)
(configuration file for the Forms Listener Servlet)
# Windows Environment
ORACLE_HOME=D:\
PATH=D:\\bin
FORMS60_PATH=D:\\forms60
# Solaris Environment
ORACLE_HOME=/
PATH=//bin
LD_LIBRARY_PATH=//lib://network/jre11/lib/sparc/native_threads
FORMS60_PATH=//forms60
# FORMS60_OUTPUT, FORMS60_REPFORMAT, REPORTS60_PATH, etc. also can be defined here
-> zone.properties
...
# This is the repository for the Forms Servlet
repositories=D:\\forms60\java\f60srv.jar
...
# This is an alias to the f60servlet
servlet.f60servlet.code=oracle.forms.servlet.FormsServlet
...
# This is the entry to the Forms Listener Servlet environment file
servlet.oracle.forms.servlet.ListenerServlet.initArgs=EnvFile=D:\\forms60\server\default.env
-> formsweb.cfg
...
serverURL=/servlet/oracle.forms.servlet.ListenerServlet
6. For a Static HTML Configuration :
------------------------------------
7. Notes :
----------
The Forms Listener Servlet is only to be implemented in HTTP or HTTPS mode.
The Forms Listener Servlet does not use Forms-specific load balancing (Load Balancer Server and
Load Balancer Client). However, it supports standard load balancing methods.
8. Other documentation to read :
--------------------------------
For further informations it's advised to read the following documentation :
Oracle9iAS Forms Services - Forms6i Patch 10: Forms Listener Servlet for
Deployment of Forms on the Internet
Oracle9i Application Server Documentation Release 1 (v1.0.2.2.2a)
Oracle9i Application Server Oracle HTTP Server powered by Apache Performance
Guide
Chapter 5 Optimizing Apache JServ
Section: How to Perform Load Balancing
Load-Balancing (JServ) - [url]http://java.apache.org/jserv/howto.load-balancing.html
9.[/url] Possible errors :
--------------------
A. "Internal Server Error" -> Reference:
Note 133171.1 Forms Servlet - Internal error
B. "Exception in thread "main" java.lang.NoClassDefFoundError: "
Reference:
Bug 1858489 IAS1021 CAN'T START JSERV MANNUALLY FOR FORMS LISTENER SERVLET
LOAD BALANCING
Work-around/ solution: Put dms2Server.jar, in the start JServ script
C. "Connections from / are not allowed"
Edit the jserv.properties of each Application Server and do the following :
security.allowedAddresses=



