Oracle Application Server Containers for J2EE 10g (9.0.4) -- Frequently Asked Questions

FAQ  Oracle Application Server Logo
OC4J Servlet Container
November 2003

This FAQ addresses frequently asked questions relating to Servlet Container aspects of Oracle Application Server Containers for J2EE 10g (9.0.4).


1. How do I automatically load a Web application during OC4J startup?

You have to set the load-on-startup attibute to "true" in your http-web-site.xml for the <web-app> tag e.g.

<web-app application="default" name="lab02War" root="lab02" load-on-startup="true"/>

In the deployment descriptor for your Web application i.e. web.xml you can specify the priority of the servlets to be loaded e.g. <load-on-startup>priorityNumber</load-on-startup>

For values >= 0, pre-loading will occur in the specified order. Duplicate values will cause those servlets to be loaded in declaration order.

For values < 0, pre-loading will NOT occur.

For an empty element, the behavior is as if the element had been specified with Integer.MAX_VALUE. This ensures that these will be pre-loaded AFTER any with values >= 0.

2. How can I stop users from directly connecting to the OC4J and force them to come through the Oracle HTTP server ?

You can set access mask for a web application by making changes in the orion-web.xml for your web application to allow access to a particular host or IP address where your Oracle HTTP Server is running. For example you want to allow access only from host named dpanda-us and machine with IP address 192.168.1.100 you have to add the following in the orion-web.xml:

<access-mask default="deny">
<host-access domain="dpanda-us" mode="allow" />
<ip-access ip="192.168.1.100" mode="allow" />
</access-mask>

In OracleAS, OC4J and Oracle HTTP Server are tightly integrated with mod_oc4j and access control can be specified and enforced at the Oracle HTTP Server level.

3. How do I define an environment variable that can be accessed in all servlets in a Web application ?

A J2EE application may require one or more initialization parameters to be accessed by one or more servlets in a web application. An initialization parameter be for a context or for a specific servlet. The context level parameters can be accessed by any servlets in the web application.

a) To define a context parameter you have to add in the following in the web.xml as follows:

<context-param>
  <param-name>filedir</param-name>
  <param-value>/temp</param-value>
</context-param>

b)You have to use context.getInitParameter method to get the Context level parameter as in the following code:

javax.servlet.ServletContext context = getServletContext();
String fileDir = context.getInitParameter("filedir");

4. How do I deploy an application without building an EAR or WAR file?

For deploying a Web application like the default-web-app, please read the "Deploying With Exploded Directory Format" section of Getting Started Guide that comes with OC4J.

5. How do I configure OC4J to not to remove the generated servlet source code for JSPs during execution?

For OC4J 1022, you can set the attribute development to "true" for the orion-web-app in your orion-web.xml file and that will save your generated code in the persistence directory.

<orion-web-app
  deployment-version="9.0.2.0.0"
  development="true"
  jsp-cache-directory="./persistence"
  temporary-directory="./temp"
  directory-browsing="allow"
  servlet-webdir="/servlet/">
  ...
</orion-web-app>

If you want to save the generated code for all Web applications then you have to make this changes in global-web-application.xml.

For Oracle9iAS Release 2 and higher, the JSP translator will automatically save all translated JSP source text. Please see the JSP FAQ for details.

6. How do I setup the OC4J HTTP server to allow directory browsing?

The OC4J HTTP server can be configured to support directory browsing of deployed Web applications. The following steps will enable directory browsing for a deployed Web application.

a) Open the orion-web.xml for your Web application
b) Locate the <orion-web-app> tag
c) Add the attribute: directory-browsing="allow"

You should now be able to browse any directories that do NOT have a welcome file present. Welcome files are configured in your web.xml file, with the <welcome-file-list> attribute.

7. How do I set the session time out for a Web application?

Servlet sessions (and JSP sessions too since they're the same thing) have a timeout period controlled by a node in web.xml, in the following format:

<session-config>
  <session-timeout>60</session-timeout>
</session-config>

This represents the number of minutes since the session was last used, so each page that affects or accesses the session will reset this timer.

8. How do I use a pre-configured DataSource from Servlet?

Let us assume the DataSource name is OracleDS and the location is jdbc/OracleDS. These are defined in the j2ee/home/config/data-sources.xml file.

The following code demonstrates how to lookup the DataSource and obtain a connection.

try
{
  InitialContext context = new InitialContext();
  DataSource myDS = (DataSource) context.lookup("jdbc/OracleDS");
  Connection conn = myDS.getConnection();
  ...
  // Use connection as normal since it's a normal JDBC connection
}
catch(NamingException ne)
{
  ...
}

9. How do I set up a servlet chain for a specific mime type in a Web application in OC4J?

Assuming you have a servlet named ChainServlet that you want to establish as a chainer for mime type text/html you have to edit the orion-web.xml for your Web application to have the following entry:

<servlet-chaining mime-type="text/html" servlet-name="ChainServlet" />

Servlet Filters are recommended for servlet chaining.

10. How do I add a directory that doesn't physically reside below the document-root among the web-exposed files?

This can be performed by specifying a virtual-directory which maps a physical directory outside of your web application to a virtual path. Assuming all your images in a directory called e:\pictures and you want to add an access point to this as /img then edit the orion-web.xml file for your Web application and add a virtual-directory as follows:

<orion-web>
  ...
  <virtual-directory virtual-path="/img" real-path="/e:/pictures/" />
  ...
</orion-web>


11. How do I add a JSP file in the welcome-file-list if the jsp is in a sub-directory?

Let's assume the name of your file as xx.jsp and this sits inside your web\jsp\one sub-directory.

Assuming you are deploying your Web application using the standard J2EE WAR format, you may add the file to the welcome file list in the web deployment descriptor file, web.xml:

<welcome-file-list>
  ...
  <welcome-file>web/jsp/one/xx.jsp</welcome-file>
  ...
</welcome-file-list>

The directory web/jsp/one is relative to your web module home.

12. How do I setup HTTP-tunneling in OC4J?

Remote Method Invocation (RMI) in enables developers to build distributed applications in java. However RMI calls are normally blocked by firewalls. RMI HTTP tunneling is a RMI implementation to provide a way for RMI to get through firewalls using HTTP.

You can use the RMI HTTP Tunneling functionality through an HTTP Proxy.

It is run as a servlet - the RMIHttpTunnelProxyServlet.

Your global-web-application.xml should have this entry:

<servlet>
  <servlet-name>rmi</servlet-name>
  <servlet-class>com.evermind.server.rmi.RMIHttpTunnelServlet</servlet-class>
</servlet>

Run it by prepending the RMI URL with "http:". For example in your client program you access RMI object as Naming.Lookup("ormi://localhost/theapp") you have to modify that to Naming.Lookup("http:ormi://localhost/theapp")


13. How do I setup OC4J to use Class-Path attribute in WAR files Manifest to load class libraries?

OC4J has a configurable option to load class libraries included in the Manifest Class-Path entry. You have to include the following directive in the orion-web.xml to ask OC4J to load class libraries from the Manifest Class-Path:

<web-app-class-loader include-war-manifest-class-path="true" />

14. How do I setup OC4J to load local classes packaged in my Web Application overriding System classes or classes in the higher level?

OC4J has a configurable option to load local classes first, overriding classes at a higher level. You have to include the following to directive in the orion-web.xml for your web module to ask OC4J to load local classes:

<web-app-class-loader search-local-classes-first="true" />

15. Which classloader should I use to load a resource file in Servlet/JSP packaged in my WAR module?

You have to use the context classsloader to load properties or resource file.

For example you have a properties file called debu.properties in WEB-INF/classes of your web module, you have to use the following code to load the properties file:

InputStream is =   Thread.currentThread().getContextClassLoader().getResourceAsStream("debu.properties");

16. How do I configure OC4J to locate a URL resource by making a JNDI lookup ?

a) You have to define the resource in the deployment descriptor e.g. you are trying to access the URL resource from a web application then you have to have the following entry in the web.xml

<resource-ref>
  <res-ref-name>url/MyURL</res-ref-name>
  <res-type>java.net.URL</res-type>
  <res-auth>Container</res-auth>
  <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

b) You have to map the resource name e.g. url/MyURL into a location in your vendor specific deployment descriptor e.g. orion-web.xml as follows:

<resource-ref-mapping name="url/MyURL" location="http://debu.us.oracle.com" />

c) Now you can lookup the URL resource and connect using the following code:

HttpURLConnection connection = null;
Context context = new InitialContext();
URL url = (URL) context.lookup ("java:comp/env/url/MyURL");
connection = (HttpURLConnection)url.openConnection();

Top of Page


Oracle Corporation
World Headquarters
500 Oracle Parkway
Redwood Shores, CA 94065
U.S.A.

Worldwide Inquiries:
+1.650.506.7000
Fax +1.650.506.7200
http://www.oracle.com/

Copyright © Oracle Corporation 2003
All Rights Reserved

This document is provided for informational purposes only,
and the information herein is subject to change
without notice.  Please report any errors herein to
Oracle Corporation.  Oracle Corporation does not provide
any warranties covering and specifically disclaims any
liability in connection with this document.

Oracle is a registered trademark of Oracle Corporation.

All other company and product names mentioned are used
for identification purposes only and may be trademarks of
their respective owners.
 

E-mail this page
Printer View Printer View
Oracle Is The Information Company About Oracle | Oracle RSS Feeds | Careers | Contact Us | Site Maps | Legal Notices | Terms of Use | Privacy