Oracle® Containers for J2EE Deployment Guide
10g Release 3 (10.1.3) Part No. B14431-01 |
|
![]() Previous |
![]() Next |
This chapter provides guidelines for configuring OC4J and the Java compiler for deployment of large J2EE applications containing large numbers (~100) of Enterprise JavaBeans.
This chapter includes the following sections:
When an application containing EJB JAR files is deployed, OC4J automatically generates a wrapper class for each EJB that implements the various component interfaces packaged with the EJB application. OC4J then invokes the Java compiler to compile these generated EJB wrapper classes.
OC4J supports two modes for compiling EJB wrapper classes: Batch mode and non-batch mode. Each is discussed below.
Batch Mode
This is the default compilation mode used by OC4J. In general, batch mode provides faster time to deployment when deploying large EJB-heavy applications. However, it also requires a greater heap memory allocation than non-batch mode deployment.
In this mode, OC4J makes a single call to the Java compiler to compile all of the Java wrapper code for all of the EJBs within the EAR being deployed.
If the compiler is configured to run in out-of-process mode - which it is by default in OC4J - then OC4J will create a single JVM process to execute compilation of the wrapper code. See "Configuring Out-of-process Versus In-process Compiler Execution" for instructions on configuring the compiler to run out-of-process or in the same JVM process as OC4J.
Non-Batch Mode
If you find that OC4J throws java.lang.OutOfMemory
exceptions while compiling in batch mode, you may want to compile in non-batch mode instead, as it requires less memory allocation. However, using this mode will result in a longer time to deployment.
In this mode, OC4J makes multiple calls to the compiler—one for each EJB JAR file within the EAR being deployed.
If the Java compiler is configured to run in out-of-process mode, OC4J will create a JVM process for each EJB JAR file included in the EAR file being deployed.
To deploy in non-batch mode, set the batch-compile
attribute of the <orion-application>
element in application.xml
or orion-application.xml
to false
. For example:
<orion-application ... batch-compile="false" .../>
Note: Theejbdeploy.batch system property, which had previously been used to specify batch versus non-batch compilation mode, is de-supported in this release of OC4J.
|
This section provides guidelines on configuring the Java compiler that will compile the EJB wrapper classes, JSPs during deployment. It includes the following topics:
Note that all compiler configuration parameters are specified as attributes of the <java-compiler>
element in ORACLE_HOME
/j2ee/
instance
/config/server.xml
, the OC4J server configuration file.
By default, OC4J uses the javac
compiler packaged with the Sun Microsystems JDK to compile generated EJB wrapper classes, JavaServer Pages, Web Services classes and any .java
files packaged with an application. However, you can configure OC4J to use a different Java compiler by modifying the <java-compiler>
element in server.xml
with the alternative compiler configuration.
For example, the following notation will cause OC4J to use the Jikes compiler from IBM:
<java-compiler name="jikes" in-process="false"/>
The Java compiler can be configured within OC4J to execute in one of two modes: out-of-process or in-process.
Out-of-process
In this mode, a separate JVM process is spawned for the compiler to execute within. This is the default compiler execution mode used by OC4J, as it offers better management of memory resources. Once compilation of the EJB wrapper classes is complete, the memory allocated to the associated JVM will be released and made available to other processes.
Set the in-process
attribute of the <java-compiler>
element to false
to execute the compiler in this mode.
In-process
In this mode, the compiler executes within the same JVM process as OC4J. Set the in-process
attribute of the <java-compiler>
element to true
to execute in this mode.
Table 3-1 summarizes the attributes of the <java-compiler>
element, which defines the Java compiler configuration in server.xml
, the OC4J configuration file.
Table 3-1 Attributes of the <java-compiler> Element
Attribute | Description |
---|---|
name
|
Value: string
Specifies the compiler name. Set to |
bindir
|
Value: string
Specifies the absolute path to the compiler directory. This attribute does not need to be specified to use the default |
in-process
|
Value: Boolean Default: false
Indicates whether to execute the Java compiler in-process ( |
options
|
Used to pass command line options to the Java compiler. Separate multiple options with a space. For example:
<java-compiler name="javac" options="-J-Xmx2048m -J-Xss=8m"/> |
encoding
|
Value: string Default: ISO-8859-1
Specifies the source file encoding to use. |
extdirs
|
Indicates the compiler extension library location. |
debug
|
Value: Boolean Default: false
Set to |
In addition to setting the OC4J JVM heap size (young and old generations), you should also pay attention to the permanent generation size when deploying large applications.
The JVM permanent generation plays an important role when you are deploying large applications. Since a large application may contain hundreds or even thousands, of EJBs, the OC4J JVM needs to load a large number of classes, which requires a higher value for permanent generation size.
If the permanent generation size is set too low, you may see java.lang.OutOfMemoryError
errors from the JDK even if you have plenty of free memory in the heap. If this occurs, you can increase the permanent generation (Perm) size by setting the -XX:MaxPermSize
property.
For example, to set the total heap size to 768 MB, set the following at OC4J startup:
java -Xms512m -Xmx512m -XX:MaxPermSize=256m -jar oc4j.jar
To determine the value for the -XX:MaxPermSize
property - including young and old generation sizes - you can use visualgc
to monitor the OC4J JVM during application deployment. The visualgc
garbage collection monitoring tool is included with the free jvmstat 3.0
distribution available from Sun Microsystems. See the following link for more information and to download the tool:
http://java.sun.com/performance/jvmstat/