Anyone who has installed OBIEE in the past few years knows that the default web/application server that comes with the installation binaries is OC4J. A lot of clients question having the application server and the BI Server on the same box, not only from an infrastructure standpoint but as well as a valid performance concern when implementing a distributed environment. You have probably heard some performance “red-flag” statements such as “don’t use OC4J if you plan to have more than 200+ users hitting the server”, etc. just like I have. And, that might be a valid statement, however, I have not personally benchmarked it with any performance testing software but it does make perfect sense once you uncover what OC4J really is.
OC4J is a slimmed down version of Oracle Application Server. For those that have done an OBIEE install, you are familiar with the one installation prompt where you can choose either the standard or advanced option. If you choose advanced you are prompted to provide Oracle Application Server connection information. Otherwise, you are defaulted to OC4J. And, this version of OC4J that you get with OBIEE is a pre-packaged “StandAlone” (or, unmanaged) version that only has a little more than the basic functionality that the full-blown Oracle Application Server (OAS) has. Think of OC4J as OAS-lite.
Now to some specifics. OC4J is entirely written in Java. It is a complete J2EE compliant environment that provides all the containers, APIs, and services that enable a J2EE product to run. It runs on the Java Virtual Machine (JVM) which is provided inside of the JDK (version 1.5 or higher). This is the reason why during the install you must actually reference where your JDK install directory exists. It is because it’s heavily used by OC4J. All of these relationships to Java is why OC4J stands for Oracle Containers for J2EE.
Most people don’t even know that OC4J standalone comes with a application server administration tool. You could re-deploy another instance of analytics or deploy any other J2EE compliant application just like you would with WebLogic or WebSphere using OC4J. Remember that password that you entered for OC4JAdmin during the installation? Well just navigate to the following URL on your OC4J installation box, http://<servername>:9704/em, enter that password, and presto, you are able to now manage the deployed analytics.war application that got deployed during your OBIEE installation.
As a side note, the default port for standalone OC4J is supposed to be 8888 but during the OBIEE install it is changed to 9704 in the following file, <OracleBI_Home>\oc4j_bi\j2ee\home\config\default-web-site.xml. Check it out for yourself sometime.
Ultimately OC4J is pretty awesome. It is merely a piece of the fully managed architecture of OAS wherein you can have many OC4J components running at the same time. However, below are my list of cons for the OC4J StandAlone version packaged with OBIEE when compared to OAS or any of the better well-known application servers like WebLogic and WebSphere:
- No backup, restore, or disaster recovery abilities
- Not able to scale well
- Not installed as a service (MS Windows)
- Administration console is lacking
- Does not split HTTP server from Application Server (They are a combined)
- Not part of most organization support matrix KB
For setting up a development environment, or for getting a POC out the door, using StandAlone OC4J with OBIEE is a great idea. If the implementation environment calls for a Test, QA, and Production environment, I would heavily suggest getting with the infrastructure or networking teams to see what their standard is for application servers and recommend a more robust application server. Most company’s already have a standard in place for an application server vendor as well as an application server environment or farm that will allow OBIEE to piggy-back on and have the WAR file deployed to it. If you don’t know how to deploy the analytics.war file to another server away from the presentation services server take a look at the OBIEE documentation. There’s a great example for deploying to WebLogic.
I hope that clears up a few things for you if you didn’t already know.