This post gives a brief idea about deploying a J2EE application in an OC4J instance of application server 10g. I am using a sample .ear file for deployment. This is a demo HR application available.
We can carry out the deployment using 2 methodes
- Using Application server enterprise manager (UI)
- Using dcmctl (Command line utility)
We will see both the options here.
Comparing JAR, WAR, and EAR Files
To deploy EJBs and other components in the J2EE application, you must package all the components together. This also includes JSP files, images, utility classes, and other files that are part of this package.
Java provides a utility for creating archives, called Java Application Archives (JAR). In addition to using JAR files for archiving and distribution, you can also use them for deployment and encapsulation of libraries, components, plug-ins, and other files (such as image files). The JAR file maintains the file subdirectories, and special files in the JAR, such as manifests and deployment descriptors, instruct how the JAR is to be treated. You can package standard JavaBeans and Enterprise JavaBeans or an entire application into JAR files that can be executed by the JVM.
You add Web components to a J2EE application in a package called a Web Archive (WAR) file. WAR files are similar to JAR files but contain a .war extension. You can include HTML documents, servlets, JSPs, and applet class files into WAR files. A WAR file has a specific hierarchical directory structure. The top-level directory of a WAR is the document-root directory of the application. JSP pages, client-side classes and archives, and static Web resources are stored in the document-root directory.
The document-root directory contains a subdirectory called WEB-INF, which contains the following files and directories:
- Tag library descriptor files
- classes: Directory that contains server-side classes: servlet, utility classes, and JavaBeans components
- Web.xml: The Web application deployment descriptor
- lib: Directory that contains JAR archives of libraries
An Enterprise Archive file or EAR is a JAR file that contains Web modules of a J2EE application. A Web module is an entity consisting of one or more resources such as HTML files, Java class files, and XML files. In other words, an EAR file is a JAR file that can contain JAR and WAR files in addition to other files, and ends with the .ear extension. An EAR file also contains an application descriptor called application.xml that describes its contents.
Deploying the application
You can deploy the application either in an exiting OC4J instance or you can cerate a new OC4J instance and deploy the application in that. This totally depends on the situation and business requirement. Creating an OC4J instance is for just organizing your application server and different application. Even we can create our application in OC4J_Portal instance. But in this case your application will get mixed up with portal application and things wont be organized.
In our case we will be creating a new OC4J instance and deploy a sample application in that.
Creating OC4J instance – Using Enterprise Manager
1) Login to your enterprise manager on the mid tier node and you can see a button “Create OC4J Instance” as shown below.
2) Next step, it will ask you for the name of OC4J instance. You can provide any name which you can identify later. Click on “Create”
3) Once OC4J instance gets created, you should be able to see the same in components home page as shown below. By default the instance will be down and you have to start the instance. You can do so using OPMN or form EM only. Just select the instance using checkbox and click on start.
The above steps are for creating an OC4J instance using Enterprise Manager. You can also create OC4J instance through command line using DCMCTL utility as shown below.
Creating OC4J instance – Using DCMCTL
Same OC4J instance can also be created using following command.
bash-2.05$ cd mid/dcm/bin
bash-2.05$ ls dcmctl
bash-2.05$ ./dcmctl CreateComponent -ct OC4J -co OC4J_AVDEO
Component Name: OC4J_AVDEO
Component Type: OC4J
Deploying Application in Oc4J instance – Using Enterprise Manager
1) Go to Enterprise Manager mid tier home page.
2) Click on OC4J instance that you created (OC4J_AVDEO in my case)
3) Click on Applications tab
4) Here you can see the “Deploy EAR” file button. Click on the button and provide the EAR file using Browse button. Also you need to provide application name.
Click on “Continue”
5) It will ask for URL mapping for Web Modules. This will be entry it will put in mod_oc4j.conf file of apache. You can keep the default setting.
6) Keep all other setting as default. It will show the confirmation screen. Click on deploy.
Deploying Application in Oc4J instance – Using DCMCTL
For deploying application using DCMCTL utility you can use the following command
./dcmctl deployApplication -f /dy/oracle/product/AS10g/hrapp.ear -a hrapp -co OC4J_AVDEO
Component Name: OC4J_AVDEO
Component Type: OC4J
Here -f /dy/oracle/product/AS10g/hrapp.ear is the EAR file name, -a hrapp is the application name and -co OC4J_AVDEO is the instance name where we are deploying the application.
Once the application is deployed. You can try to access the application using the URL
http://(mid tier hostname):(mid tier HTTP port)/(URL mapping)
In my case the URL becomes http://ap101fam.us.oracle.com:7778/hrapp/
However if you try to access the application, it might now work. This is because you need to set Data Source for this application.
Data Source is for connection to database. An application has to connect to database for saving application data of retrieving the application specific data from production database. Each OC4J instance has its set of data sources. These data sources belongs to some JNDI tree (Java Namespace directory interface). So connection between the application and database is through JNDI lookup tree.
When a developer does coding for an application he uses local database name in the form of database source. A deployer of the application has to map the local data source with physical database. This can be down using following steps.
Setting up Data Source
1) You can either create a Data Source or you can edit the existing default data source. The default data source will be OracleDS. You can also create/see data source specific to your application by going to Application tab and then click on your application. Then on application home page, you can see “Data Source” link at the bottom.
But this data source would be empty as we did not create any data source for the application.
5) We can use default data source in our case. For this we need to make changes in default data source (OracleDS) regarding the database connection details and the username/password it should use to connect to database.
For this you can go to
2) From the mid tier home page, go to the OC4J instance that you have created (OC4J_AVDEO in my case).
3) Click on Administration Tab
4) You will see a “Data Source” link. The default data source is seen here as OracleDS. Click on “Edit”
Here you need to change JDBC URL and provide the correct hostname, port and database name. Also you need to change Username and password. Other values you can keep default.
Once this is done, you can save and restart OC4J instance. Once that is done you should be able to access the application using your URL as given above (http://ap101fam.us.oracle.com:7778/hrapp/ in my case).
You must be having 1 doubt in your mind, regarding the whole process. At least I had when I learned this process. The question is how the application knows that it needs to use this data source (OracleDS) for making connection to database. Nothing must be defined in application level. Neither we planned to go with this name for data source. We can even create our own data source. Then how application knows that it should use this data source to access the application.
The answer to this is JNDI. For each OC4J instance as I explained there is a JNDI lookup tree. And we configure our application to use a particular data source in this JNDI.
If you go to your application home page (Mid tier home -> your OC4J Instance -> Applications Tab -> Click on your application) and then click on “General” link in the bottom, you can see “Default Data Source (JNDI Name)” field. This field is having a value of jdbc/OracleDS. This is where your application knows that it needs to use OracleDS data source. So if we create a new data source, we need to edit this entry as well.
Hope this help !!