Troubleshooting the OA Framework
Table Of Contents
FAQ and Troubleshooting Guide
- General
- When starting a framework application I get an HTML page with the following error:
The page cannot be displayed
The page you are looking for is currently unavailable.
The Web site might be experiencing technical difficulties, or you may need to adjust your browser settings". - How can I test the Webserver setup for Self Service Framework Applications?
- How can I test my Self Service Framework installation?
- How can I figure out the version of the Self Service Framework I am using?
- Which version of the JDK should I use?
- Which JDBC drivers (classes12.zip, jdbc12.zip etc.) should I use?
- Why do I need to set FND_TOP on the webserver? And how do I set it?
- How do I configure Self-Service Applications with Oracle Parallel Server?
- I have installed Self-Service Applications with NLS. After submitting a page I get garbage characters.
- I am getting a Framework exception raised associated with the servlet.framework.code property.
- AD patches prereq patch 2729622
- Why am I seeing the error "Request URI:/OA_HTML/OA.jsp Exception: oracle.jsp.parse.JspParseException:...."
- Why is the framework hanging?
- Why, when I try to run a self-service application I see an error similar to "
oracle.apps.fnd.framework.OAException: Application: FND, Message Name: FND_NO_REGION_CODE. Tokens: REGION = WFNTFWORKLISTFNPAGE; REGIONAPPLID = 601
"? - When applying OA 5.7H (2771817) D driver, I get an error:
FAILED: file CustMigrationTool.class on worker 1.
and the log file showsError: No database connection available. Io exception: Invalid number format for port number.
- When starting a framework application I get an HTML page with the following error:
- Dynamic Gif Generation / X (display) Server / Images, Buttons
- Why do I need to configure an X server for Framework applications?
- My framework application does not render or is missing a number of icons.
- My application page does not render Global buttons and tabs. And the submit buttons are being rendered as basic (gray) html buttons.
- I get a "Document contained no data" error when I try to launch the framework from the Personal Home Page.
- I see a oracle.apps.fnd.framework.OAException: java.lang.NullPointerException in my error log and my error stack resembles this sample error stack.
- I see "java.lang.IllegalArgumentException: /d1/db/apache139/apache/htdocs/html/cabo/styles/blaf.xss does not exist" in my error_log?
- I see "java.lang.IllegalArgumentException: Couldn't create /d1/dB/apache139/apache/htdocs/html/cabo/images/cache" in my error_log?
- Why do I get the error "Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable" when I try to run my Self Service Framework Application on Unix? (Everything works fine on Windows.)
- Buttons are not being rendered correctly with Simplified Chinese / Traditional Chinese / Japanese / Korean / Thai characters. When logging in to the Personal Home Page, I see that the buttons that are displayed on the page show every character as a rectangle, instead of the correct characters.
- Performance
- After restarting the server, the response time for the first user to log in is really slow. How can I fix it?
- Why am I getting java.lang.outOfMemory errors and what can I do to fix them?
- How can I limit middle-tier resource consumption by a user ?
- How can I setup and access the Application Module Pool Monitor?
- How can I setup and access the Application Module Pool Monitor in multiple (load-balanced) jserv environment?
- How do I know if the Application Modules are being released?
- How can I set up a load-balanced Jserv configuration for my http server?
- How do I enabling browser caching in OA Framework Applications in SSL Mode?
- How do I set the session timeout limit appropriately?
- Why am I getting horrible performance problems since I turned on statement level logging?
- Classpath
- I get the error : java.lang.NoClassDef FoundError:sun/tools/javac/Main
- I get the error : java.lang.NoClassDefFoundError: org/xml/sax/ContentHandler
- I get the error : java.lang.NoClassDefFoundError: oracle/xml/parser/v2/XMLParseException
- I get an FND_BAD_DBC_PARAMETER when I try to launch my framework application from the Personal Home Page.
- How to deal with NoClassDef... Exceptions?
- DBC File
- What is a DBC file? What is used for and how do I create one?
- I get an HTML page with the error message:
oracle.apps.fnd.framework.OAException: Application: FND, Message Name: FND_GENERIC_MESSAGE.
Tokens: MESSAGE = java.io.FileNotFoundException: /apps/vis115bappl/fnd/11.5.0/secure/ap506dbs_vis115b.dbc
(No such file or directory); - I get the error oracle.apps.fnd.framework.OAException: Application: FND, Message Name: FND_ONLY_ONE_DBC_ALLOWED_PER_JVM.
- I see the following error message when I try to launch my application from the Personal Home page :
oracle.apps.fnd.framework.OAException: Application: FND, Message Name: SECURITY_APPL_LOGIN_FAILED.
(NOTE: This message could not be looked up because an Application Module has not been set on the exception)
- Apache and Jserv
- Which apache log file(s) should I look at when looking for problems?
- I can't run my java applications and I see the following error messages in my mod_jserv.log file :
(EMERGENCY) ajp12 : ping: no reply error
Premature end of script headers: (null)
(EMERGENCY)ajp12[1]: cannot scan servlet headers - I am unable to start Apache/Jserv and I see the following exceptions in my log file :
ApacheJServ/1.1: Exception creating the server socket: java.net.BindException:
Address already in use: make_sock: could not bind to port <webserver_port_number> - How do I set the character set in Apache
General
When starting a framework application you get an HTML page with the following error:
The page cannot be displayed
Check to make sure your Apache Server has been started properly. Check your error_log, jserv.log and mod_jserv.log for any errors.Note: One user reported that he encountered"the page cannot be displayed" error even after following the above instructions. He reports that the error was resolved, by making sure his DISPLAY was set to an x-server that was working (his variable was set correctly , but the x-server was not working, tested by pointing to an active x-term on PC using reflections) and when he switched it, the advanced task page rendered correctly.
The page you are looking for is currently unavailable.
The Web site might be experiencing technical difficulties, or you
may need to adjust your browser settings.
How do I test my Webserver setup for Self Service Framework Applications?
To do this run the AOL test UI. This option consists of a collection of tests that you can run to determine if your web server is configured properly. You can access these tests via :
http://<Hostname:port>/OA_HTML/jsp/fnd/aoljtest.jsp
After you sign in, some preliminary information about your environment will be displayed. Click on the Enter Aol/J Setup Test link to get to the menu of tests. You must run the tests under the "Connection Test" and "Apps Framework Agent" categories.
Test Name | Comments |
Locate DBC File | Mandatory. Run this test first. |
Verify DBC Settings | Mandatory. Run this test second. |
AOL/J Connection test | Mandatory. Run this test third. |
Apps Framework Agent | Mandatory |
Virtual Directory Settings | Mandatory |
Jsp Ping | Mandatory |
Cabo Setup Tests | Mandatory |
X Server Accessibility Test | Mandatory |
OA Framework System Info | Mandatory |
Servlet Ping | Optional |
Versions for Loaded Classes | Optional |
How do I test my Self Service Framework installation?
To test your Self Service Framework installation and setup, use the following instructions
- Log in to Applications using the System Administrator responsibility.
- Using the Define User Form, add the following responsibility to any user who will access the Oracle Self Service Applications:
Preferences (This is the standard Oracle Self Service Preferences Responsibility.)
Workflow User Web Applications (This is the standard Workflow User Responsibility. This will allow your users to access the new Workflow Worklist Notification User Interface.) - To add Lookup Type/Lookup Codes HTML interface for a System Administrator who will add new lookup types of codes, use the Define User Form, add the following responsibilities
System Administration (This is the standard Oracle Self Service Administration Responsibility.) - Test the setup of your Self Service Framework Apache Environment.
- Add the "Workflow User Web Applications" responsibility to a test user, using the standard User Definition Form.
- Bring up a browser and log in to Self Service Applications using the test user name to which you just added the "Workflow User Web Applications" responsibility.
- From the Navigate Region on the Self Service Personal Home Page, click on the Workflow User Web Applications responsibility.
- From the list of Workflow functions under the Workflow User Web Applications on the right side of screen, click on the Advanced Worklist option.After a few seconds of initialization on the Http Server, the new Workflow Worklist will appear. If it does not, then please review the Troubleshooting guide below to ensure the various components are setup correctly.
- Add the "Workflow User Web Applications" responsibility to a test user, using the standard User Definition Form.
- Log in to Applications using the System Administrator responsibility.
How can I figure out the version of the Self Service Framework I am using?
Execute the following command to determine the version of OA.jsp :
ident $FND_TOP/html/OA.jsp and
The version of OA.jsp in $FND_TOP should be the same as the one in $OA_HTML. Use the table below to figure out the version of the Framework installation.
ident $OA_HTML/OA.jsp and
OA.jsp Version OA Framework Version ARU Patch Number 115.56 5.10 Patch:3875569. 115.36 5.7 Patch:2771817. 115.27 5.6 Patch:2278688. Which version of the JDK should I use?
You must use jdk 1.3. If you don't have this version follow the upgrade instructions found in MetaLink Note 130091.1, titled Upgrading to JDK 1.3 with Oracle Applications 11i.
Which JDBC drivers (classes12.zip, jdbc12.zip etc.) Should I use?
When you upgrade from JDK 1.1.8 you must use the jdbc drivers rehosted by Oracle Applications in jdbc12.zip. For complete details on this topic please refer to MetaLink Note 164317.1, titled Upgrading Oracle JDBC Drivers with Oracle Applications 11i and MetaLink Note 130091.1, titled Upgrading to JDK 1.3 with Oracle Applications 11i
Why do I need to set FND_TOP on the webserver? And how do I set it?
FND_TOP is used to derive the location of the dbc file which is then used to make connections to the appropriate database. If this is not set Oracle Applications will resort to using the old env.txt mechanism for figuring out FND_TOP so it can locate the dbc file. The env.txt mechanism for storing the location for FND_TOP will NOT work in an HTTPS environment.
How do I configure Self-Service Applications with Oracle Parallel Server?
If you are using Oracle Applications 11.5.6, please refer to the System Administrator's Guide, section G59.
- I have installed Self-Service Applications with NLS. After submitting a page I get garbage characters.For NLS Customers, if after submitting a page you get garbage characters then you need to install OJSP1.1.2 as the initial release of Oracle Applications 11iconfigures your web server to use Oracle JavaServer Pages (OJSP) version 1.0.0.6.1. Please check ARU release notes and metalink note 132604.1 for more details.
- I am getting a Framework exception raised associated with the servlet.framework.code property.Make sure in the root.zone you have the following:
servlet.framework.code = oracle.apps.fnd.framework.provider.OAFrameworkHttpProvider
notservlet.framework.code = oracle.apps.fnd.framework.provider.OAFrameworkHttpProvider Remove the two extra spaces around the " = " if present.
- AD patches prereq patch 2729622.When you apply AD patch 2708116 you will notice that it prereqs the FWK patch 2729622. If you apply this patch please be sure to do the following:
If you are using AutoConfig then obtain and apply the fix for bug 2715734.
If you are not using AutoConfig then make the following manual changes to your configuration files:
- Replace each <full location of JAVA_TOP>/apps.zip with <full location of JAVA_TOP> in the configuration files jserv.properties and zone.properties.
- If any of these files do not exist or do no not reference JAVA_TOP you do not need to modify them.
Why am I seeing the error "Request URI:/OA_HTML/OA.jsp Exception: oracle.jsp.parse.JspParseException:...."
This error will be seen if you haven't changed the apps.zip reference to JAVA_TOP. See "AD patches prereq patch 2729622." for more information. The exact text the error message you see will resemble the following:Why is the framework hanging?
Request URI:/OA_HTML/OA.jsp
Exception:
oracle.jsp.parse.JspParseException: Line # 13, scope = "request">
Error: Unable to find class for bean: pageBean defined by tag with class:
oracle.apps.fnd.framework.webui.OAPageBean
at oracle.jsp.parse.OpenJspTagHandler.defineBeans(OpenJspTagHandler.java:299)
at oracle.jsp.parse.OpenJspTagHandler.defineBeans(OpenJspTagHandler.java:258)
at oracle.jsp.parse.OpenJspTagHandler.validateTagAttributes(OpenJspTagHandler.java:221)
at oracle.jsp.parse.JspParseTag.parse(JspParseTag.java:672)
at oracle.jsp.parse.OpenJspTagHandler.parse(OpenJspTagHandler.java:467)
at oracle.jsp.parse.JspParseTag.parseNextTag(JspParseTag.java:548)
at oracle.jsp.parse.JspParseTagFile.parse(JspParseTagFile.java:100)
at oracle.jsp.parse.OracleJsp2Java.transform(OracleJsp2Java.java:40)
at oracle.jsp.app.JspAppLoader.translatePage(JspAppLoader.java:1513)
at oracle.jsp.app.JspAppLoader.reloadPage(JspAppLoader.java:1146)
at oracle.jsp.app.JspAppLoader.loadPage(JspAppLoader.java:1005)
at oracle.jsp.app.JspAppLoader.getPage(JspAppLoader.java:671)
at oracle.jsp.app.JspApplication.dispatchRequest(JspApplication.java:337)
at oracle.jsp.JspServlet.doDispatch(JspServlet.java:259)
at oracle.jsp.JspServlet.internalService(JspServlet.java:178)
at oracle.jsp.JspServlet.service(JspServlet.java:148)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:588)
at org.apache.jserv.JServConnection.processRequest(JServConnection.java:456)
at org.apache.jserv.JServConnection.run(JServConnection.java:294)
at java.lang.Thread.run(Thread.java:479)
Previously we had advised technical staff to set "wrapper.bin.parameters=-Djava.compiler=NONE" in their jserv.properties file in order to enable the error stack dumps to show line numbers, instead they display the literal "(compiled code)". If the java.compiler remains set to "NONE" it will cause the framework to hang.
Hanging could also be a result of logging. Please see "I have enabled logging and now the framework hangs or is horribly slow. What can I do?".
- Why, when I try to run a self-service application I see an error similar to "
oracle.apps.fnd.framework.OAException: Application: FND, Message Name: FND_NO_REGION_CODE. Tokens: REGION = WFNTFWORKLISTFNPAGE; REGIONAPPLID = 601
"?This can occur when the OS locale is set differently from the database locale. For example, if the OS locale setting is:LC_CTYPE=en_UK
and the Oracle locale setting is:NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
then you may see this error. To get around this error, in jserv.properties add the following line:
wrapper.env.copy=NLS_LANG
- When applying OA 5.7H (2771817) D driver, I get an error:
FAILED: file CustMigrationTool.class on worker 1.
and the log file showsError: No database connection available. Io exception: Invalid number format for port number.
This problem is related to running the customization migration tool on a 9.2.0.2 database on some platforms, one being Linux. The problem is resolved in a later version of jrad.zip which is included in the OAF 5.7 V1 rollup patch (2800986). The issue is that the copy driver for 2800986 needs to be installed before running the database driver for the base OAF 5.7 (2771817) installation. This step is required so that the database driver d2771817.drv will run the Customization Tool succussfully. The order that the patch drivers should be applied are: - c2771817.drv
- c2800986.drv
- d2771817.drv
- d2800986.drv
- g2771817.drv
- g2800986.drv
If you're in the middle of a d-driver and want to save your state then backup the applsys tablesfnd_install_processes
andad_deferred_jobs
( if you have it ). Then, rename the$APPL_TOP/admin/SID/restart
directory and kick off the c driver for the rollup patch's c-driver, restore the tables and the restart directory and you should be able to resume where you left off.
For more deatails please see bug # 2881752.
Dynamic Gif Generation / X (display) Server / Images, Buttons
To take advantage of the dynamic image generation support Framework applications require access to graphical capabilities on the middle tier. In practical terms this means you need to configure your Webserver to use an X server for dynamic gif generation.
Check for the following directory under <OA_HTML>
<OA_HTML>/cabo/jspsIf you do not see these directories, make sure you have applied the latest AD patch available on MetaLink. At the very minimum you should have applied patch 1238573 to ensure you can unzip the various image files that are required by the new Self Service Framework. Note, that this AD patch is from a while back and you most likely have the correct version of AD by now.
<OA_HTML>/cabo/styles
<OA_HTML>/cabo/images
<OA_HTML>/cabo/OAImages
<OA_HTML>/cabo/jsLibs
The zip files containing the images that are not rendering are included in the framework patch you applied. Once you have confirmed that you have the correct version of AD you should run the copy driver for your patch to ensure these files are unpackaged.
The <FND_TOP>/html/marlin_html.zip <FND_TOP>/media/marlin_media.zip must be unzipped in your <OA_HTML> directory to lay down all the required html, javascript, and image files.
This can happen for one of the following reasons :
- The web server that is running framework applications does not have access to an X Server, so it cannot do dynamic gif generation.
- The /OA_HTML/cabo/images and /OA_HTML/cabo/styles directories are not writable by the user who owns the apache process.
- The /OA_HTML/cabo/styles directory is either missing oa.xss and/or blaf.xss or it contains old or corrupt versions of them. We provide a collection for jsps for testing X server accessibility and the setup for the cabo directories. For details on how to use these tests refer to Test your Webserver setup for Self Service Framework Applications step in the section above Configuring Http Server for Self Service Framework Applications.
This could happen for a number of reasons. The most common ones are : your apache server is down; jserv is down; jserv is pointing to an X server that is down; jserv is pointing to an X server that is not configured properly.
In order to fix this please make sure both apache and jserv are up and running.
This can happen if you didn't configure your Webserver to use an X server; or if the X server is down or otherwise not accessible by your Webserver. You may also see the following related error :
Request URI:/OA_HTML/OA.jsp
Exception:
java.lang.NoClassDefFoundError:sun/awt/X11GraphicsEnvironment
If you get the following error stack check the file system permissions for the physical directory structure that is referenced as OA_HTML in your httpd.conf or httpds.conf file. Make sure that this physical directory structure is writeable by the user who is launching the apachectl command. We write dynamic gifs to this location at runtime, so the user who launches Apache must be able to write to that directory. You must also run the test called "Cabo Setup Tests" listed under Test your Webserver setup for Self Service Framework Applications
oracle.apps.fnd.framework.OAException: java.lang.NullPointerException at oracle.apps.fnd.framework.OAException.wrapperException (OAException.java, Compiled Code) at oracle.apps.fnd.framework.webui.OAPageBean.prepareException (OAPageBean.java, Compiled Code) at oracle.apps.fnd.framework.webui.OAPageBean.renderBody (OAPageBean.java, Compiled Code) at oa_html.OA._jspService(OA.java, Compiled Code) at oracle.jsp.runtime.HttpJsp.service(HttpJsp.java, Compiled Code) at oracle.jsp.app.JspApplication.dispatchRequest (JspApplication.java, Compiled Code) at oracle.jsp.JspServlet.doDispatch(JspServlet.java, Compiled Code) at oracle.jsp.JspServlet.service(JspServlet.java, Compiled Code) at javax.servlet.http.HttpServlet.service(HttpServlet.java, Compiled Code) at org.apache.jserv.JServConnection.processRequest (JServConnection.java, Compiled Code) at org.apache.jserv.JServConnection.run(JServConnection.java, Compiled Code) at java.lang.Thread.run(Thread.java, Compiled Code) java.lang.NullPointerException at oracle.cabo.ui.laf.browser.TabBarRenderer._getImage (TabBarRenderer.java, Compiled Code) at oracle.cabo.ui.laf.browser.TabBarRenderer.prerender (TabBarRenderer.java, Compiled Code) at oracle.cabo.ui.BaseRenderer.render(BaseRenderer.java, Compiled Code) at oracle.cabo.ui.BaseUINode.render(BaseUINode.java, Compiled Code) at oracle.cabo.ui.BaseRenderer.renderChild(BaseRenderer.java, Compiled Code) at oracle.cabo.ui.BaseRenderer.renderNamedChild(BaseRenderer.java, Compiled Code) at oracle.cabo.ui.laf.browser.PageHeaderLayoutRenderer.renderContent (PageHeaderLayoutRenderer.java, Compiled Code) at oracle.cabo.ui.BaseRenderer.render(BaseRenderer.java, Compiled Code) at oracle.cabo.ui.BaseUINode.render(BaseUINode.java, Compiled Code) at oracle.cabo.ui.BaseRenderer.renderChild(BaseRenderer.java, Compiled Code) at oracle.cabo.ui.BaseRenderer.renderNamedChild(BaseRenderer.java, Compiled Code) at oracle.cabo.ui.laf.browser.BorderLayoutRenderer._renderStackedChild (BorderLayoutRenderer.java, Compiled Code) at oracle.cabo.ui.laf.browser.BorderLayoutRenderer.prerender (BorderLayoutRenderer.java, Compiled Code) at oracle.cabo.ui.BaseRenderer.render(BaseRenderer.java, Compiled Code) at oracle.cabo.ui.BaseUINode.render(BaseUINode.java, Compiled Code) at oracle.cabo.ui.BaseRenderer.renderChild(BaseRenderer.java, Compiled Code) at oracle.cabo.ui.BaseRenderer.renderIndexedChild (BaseRenderer.java, Compiled Code) at oracle.cabo.ui.BaseRenderer.renderIndexedChild (BaseRenderer.java, Compiled Code) at oracle.cabo.ui.BaseRenderer.renderContent(BaseRenderer.java, Compiled Code) at oracle.cabo.ui.BaseRenderer.render(BaseRenderer.java, Compiled Code) at oracle.cabo.ui.BaseUINode.render(BaseUINode.java, Compiled Code) at oracle.apps.fnd.framework.webui.OAPageBean.renderBody (OAPageBean.java, Compiled Code) at oa_html.OA._jspService(OA.java, Compiled Code) at oracle.jsp.runtime.HttpJsp.service(HttpJsp.java, Compiled Code) at oracle.jsp.app.JspApplication.dispatchRequest (JspApplication.java, Compiled Code) at oracle.jsp.JspServlet.doDispatch(JspServlet.java, Compiled Code) at oracle.jsp.JspServlet.service(JspServlet.java, Compiled Code) at javax.servlet.http.HttpServlet.service(HttpServlet.java, Compiled Code) at org.apache.jserv.JServConnection.processRequest (JServConnection.java, Compiled Code) at org.apache.jserv.JServConnection.run(JServConnection.java, Compiled Code) at java.lang.Thread.run(Thread.java, Compiled Code)
Same as answer to question #6 above.
Same as answer to question 6 above.
- Buttons are not being rendered correctly with Simplified Chinese / Traditional Chinese / Japanese / Korean / Thai characters. When logging in to the Personal Home Page, I see that the buttons that are displayed on the page show every character as a rectangle, instead of the correct language characters.If you encounter this problem you need to copy Albany WTJ font file into
<JRE_TOP>/lib/fonts
directory to support characters for these languages for images generated at server side. i.e. copy the Albany fonts fromFND_TOP/resource
to thejre/lib/fonts
subdirectory of your JDK directory (/usr/java/jdk*.*.*/jre/lib/fonts
). After restarting the apache server, the icons should now be rendered with the correct language characters.
For more information on this topic please refer to the document "How to install Unicode fonts for Apps 11i" in Oracle's Metalink.
Performance
You can use a servlet that will load a large of chunk of most commonly used Framework classes at server startup time. This servlet is currently available via patch 2342925 for 5.5.2, 5.6 and 5.7 customers. It will be available for 5.6 customer shortly. Here's how you can use the servlet.
- Update the the following parameter in the context file using the Oracle Applications Manager Context Editor from:
<oafwkstartup oa_var="s_oafwkstartup">#</oafwkstartup>to
<oafwkstartup oa_var="s_oafwkstartup"></oafwkstartup>
- Run AutoConfig to propagate the change.
Note: For more information about AutoConfig, refer to MetaLink Note 165195.1 "Using AutoConfig to Manage System Configurations with Oracle Applications 11i".
OutOfMemory exceptions are thrown when the JVM runs out of heap space. Make sure that you have allocated enough memory for your JVM. Check the following entry in the jserv.properties file to make sure you the appropriate heap size range was specified. Here's an example of the how the heap size is specified in the jserv.properties file.
wrapper.bin.parameters=-Xms255m -Xmx400mYou should also make use of the AM Pool monitor to keep track of memory consumption as various applications are used. It will help you determine if the application is misbehaving or if the JVM heap size needs to be tweaked.
The Self Service Framework includes a profile option for limiting the number of rows that any user can return to an HTML application through a query operation. The profile name is "FND: View Object Max Fetch Size". The default site level value for this profile is 200 rows. This profile ensures that no single user can consume all the memory of a Jserv Listener through a wide open search in an inquiry or LOV. You can reduce this number to ensure that the middle tier resources (memory) are shared evenly across all your users. When you hit this limit, you are not allowed to fetch the next set of rows by clicking on a Next button or some other UI control. Unfortunately we are not able to display a warning to the user when this limit is reached. They simply cannot get to the next set of rows. The next version of the Self Service Framework will be able to display such a good warning showing the current limit.
How can I setup and access the Application Module Pool Monitor?
- Make sure you have <JAVA_TOP> in the repositories directive in the zone.properties file.
- Add the following servlet alias for the pool monitor servlet, to the zone.properties file.
servlet.OAAppModPoolMonitor.code=oracle.apps.fnd.framework.webui.perf.OAAppModPoolMonitor
- Stop and start Apache.
- Access the pool monitor via the following url. Please note that Rapid Install creates a a default servlet zone for you. It is called "servlets" and can be used as the servlet_zone_name in the following url.
http://<Hostname:port>/<servlet_zone_name>/OAAppModPoolMonitor
- Make sure you have <JAVA_TOP> in the repositories directive in the zone.properties file.
How can I access the Application Module Pool Monitor in multiple (load-balanced) jserv environment?
The Application Module Pool Monitor setup steps (described above) still apply.
If your server has a load-balanced jserv configuration and all servlets use the same servlet zone name, you cannot choose what JVM the pool monitor servlet will connect to. In fact, it turns out that in such a configuration the pool monitor will eventually connect to all active JVMs and will hence show different results almost every time it is run.
In order to get a consistent view from the pool monitor you will have to alter your jserv configuration so that the pool monitor is forced to connect to the JVM of your choice. You can achieve this by creating unique zone names. Following is an example configuration.
Load-balanced configuration where the pool monitor chooses the JVM it will connect to
ApJServMount /servlets balance://set1/rootIf you have configuration similar to the above example, then when you access the pool monitor via http://<hostname:port>/servlets/OAAppModPoolMonitor, the monitor can connect to Jserv1 or Jserv2. It will randomly switch between the two every time you access the monitor.
ApJServBalance set1 Jserv1
ApJServBalance set1 Jserv2
ApJServHost Jserv1 ajpv12://127.0.0.1:9001
ApJServHost Jserv2 ajpv12://127.0.0.1:9002
ApJServRoute JS1 Jserv1
ApJServRoute JS2 Jserv2
If however, you use the following configuration then instead of using the generic zone name as in :
http://<hostname:port>/servlets/OAAppModPoolMonitoryou can use following :
http://<hostname:port>/monitor1/OAAppModPoolMonitorLoad-balanced configuration where you choose what JVM the pool monitor will connect to
http://<hostname:port>/monitor2/OAAppModPoolMonitor
ApJServMount /servlets balance://set1/rootAttention : You should keep the generic servlet zone name around if you are using any applications like CRM that use the Apps Servlet Agent profile option. The reason being that the value of this profile option is usually set to http://<hostname:port>/servlet_zone_name. Let's say that, as in our example above, the servlet zone name is "servlets" so your profile option is set to http://<hostname:port>/servlets. If you take away the "servlets" zone name your CRM applications would suddenly stop working. More importantly, even if you now changed the profile option to one http://<hostname:port>/monitor1 or http://<hostname:port>/monitor2 then the CRM application would work but they could no longer take advantage of the load-balanced Jserv configuration. CRM users will always connect to the same JVM, the one that the Apps Servlet Agent profile option points to.
ApJServMount /monitor1 ajpv12://127.0.0.1:9001/root
ApJServMount /monitor2 ajpv12://127.0.0.1:9002/root
ApJServBalance set1 Jserv1
ApJServBalance set1 Jserv2
ApJServHost Jserv1 ajpv12://127.0.0.1:9001
ApJServHost Jserv2 ajpv12://127.0.0.1:9002
ApJServRoute JS1 Jserv1
ApJServRoute JS2 Jserv2
In other words, the generic servlet name is necessary to keep the jserv load-balancing working properly. The new ApJServMount points are simply additions to control the am pool monitor behavior.
Look for the following diagnostics in the error_log file:
BC4J HTTP Container was timed outYou should also rely on the AM Pool monitor to get detailed information.
The binding listenerfor <:your_ApplicationModule_name> was timed out
There are many ways to balance the load of your applications across many Apache Listeners and Jserv (Java Servlet Listener) instances. Setting the Framework Agent profile at different profile levels is one method. The Apache Web Server itself has the ability to load balance many different JServ (Java Servlet Listener) instances for high volume usage. Load balancing Jserv instances under one Apache Listener is a more robust approach than setting up numerous Apache Listeners. You can learn more about load balancing an Apache Java Servlet engine from a variety of sources. The most thorough discussion on this topic can be found at:
http://java.apache.org/jserv/howto.load-balancing.htmlFuture versions of the Self Service Framework will provide HTML Configuration User Interfaces that will assist you setting up a load balanced Apache/Jserv Listener.
We are planning to use an Apache module called mod_expires to enable browser caching under SSL. Mod_expires controls the setting of the HTTP Expires header field in server responses. Please note this caching technique currently works under IE only. We are still investigating why Netscape is unable to make use of this Apache capability.
To enable caching under SSL the following directives should be added to the httpd.conf file of the Apache configuration. The expiration should be set relative to the time of the source document's last client access. In addition, the expiration date should be specialized by the content type and applied only to the documents under the virtual directory mapping /OA_HTML/.
<Directory "<physical_path_corresponding_to_the_alias_/OA_HTML/>">
#enable the generation of the Expires header for files under /OA_HTML/ ExpiresActive On
#expire images one month after last client access ExpiresByType image/gif "access plus 1 month"
#expire stylesheets one week after the last client access ExpiresByType text/css "access plus 1 weeks"
#expire javascript libraries one day after the last client access ExpiresByType text/javascript "access plus 1 days"
</Directory>
- How do I set the session timeout limit appropriately?In order to appropriately set the session timeout limit for Self Service Framework Applications you need to synchronize the value used by the webserver with the value specified in an Oracle Applications profile option called ICX: Session Timeout. For a list of session related options please refer to the section below on profile options.
The ICX: Session Timeout option sets the the maximum number of minutes to wait before invalidating an idle ICX Session. The default value is null. The web server session timeout value, or more appropriately the Apache Jserv Session value is used to specify the number of milliseconds to wait before invalidating an unused session. The default value is 1800000 or 30 minutes.
We recommend that you set the ICX: Session Timeout and the Apache Jserv Session to be the same. It's better to be consistent and let the ICX session and the Apache Jserv (middle tier) session expire at the same time. If the ICX session expires before the Jserv session, the user will be presented with a login page even though the Jserv session is still active. If the user logs back in before the Jserv session expires, they will see the old state of their middle-tier transaction. This can be confusing, since from the point of view of the user there is no distinction between the ICX session and the Jserv session.
We also recommend that you do not set the Apache Jserv Session timeout to be any higher than 30 minutes. Longer idle sessions will drain the JVM resources and can also cause out of memory errors.
The session timeout for the webserver is specified via the following directive in the <ORAHTTP_TOP>/Jserv/etc/zone.properties file. - Why am I getting horrible performance problems since I turned on statement level logging?Turning on the profile for statement level logging without setting the module name logging profile can result in horrendous performance problems. The profile option names are in the profile reference in this document.
session.timeout=180000
Classpath
Check jserv.properties for the following entries:
wrapper.classpath=<location of tools.jar under your JDK 1.3 installation>Make sure the value is pointing to the correct java directory based on the JDK 1.3 upgrade instructions found in MetaLink Note 130091.1, titled Upgrading to JDK 1.3 with Oracle Applications 11i.
wrapper.classpath=<location of rt.jar under your JDK 1.3 installation>
Check wrapper.classpath settings in jserv.properties. Make sure they include:
wrapper.classpath=<JAVA_TOP>/sax2.zip
Check wrapper.classpath settings in jserv.properties. Make sure they include:
wrapper.classpath=<JAVA_TOP>/xmlparserv2.zip
This can occur if in your classpath $OA_JAVA/jdbc12.zip is placed after the JAVA_TOP. To fix this reverse the order - put JAVA_TOP before jdbc12.zip in your classpath. Bounce the server and run the application again.
Such exceptions usually indicate that the classpath is either not complete or it is incorrect. Check and double-check to ensure that the classpath has all the required components and in the right order. Usually such exceptions are informative enough to let you know which component is missing. For instance, when you see an exception like java.lang.NoClassDefFoundError: org/xml/sax/ContentHandler - it is safe to conclude that sax2.jar is either missing from your classpath or that you are looking at an incorrect version.
DBC File
A DBC (Database Connection) file is a text file which stores all the information required to connect to a particular database. It allows a user or administrator to easily load groups of environment variable settings. At the minimum it contains the value of the GWYUID, FNDNAM, TWO_TASK and GUEST_USER_PWD.
Location: $FND_TOP/secure
How it is created : Please refer to "Oracle Applications System Administrator's Guide" How to test it: Please refer to Test your Webserver setup for Self Service Framework Applications in the section Configuring Http Server for Self Service Framework Applications.
You will see this error message when you try to access more than one database within the same JVM. The dbc file is used by the middle-tier to figure out which database to connect to. If User A and User B point to the same webserver and User A launches framework applications by using a dbc file that points to database1, then User B cannot launch framework applications by using a dbc file that points to a different database. The only way to get around this problem is to bounce the web server and to make sure all users of your server point to the same dbc file. Some examples scenarios which lead to such an error include :
- User A launches framework applications using dbc1 which connects to database1. The file dbc1 is changed to point to database2 and the webserver is not bounced. When a new user connects or User A reconnects they will now try to connect to database2 within the JVM.
- Applications Database ID profile option for framework users isn't set to the same database. This profile option is set to null by default.
- Your users launch framework applications via local test JSPs and/or the Personal Home Page. Since the test JSPs have the dbc file name hardcoded in them, it is possible that the user who connects through the test.jsp uses a different dbc file than the user who connects through the Personal Home Page. It is also possible that you have various test JSPs and each of them points to a different database.
Note : The dbc file is located under the $FND_TOP/secure directory of your $APPL_TOP.
Check jserv.properties for the following entry:
wrapper.bin.parameters=-DFND_TOP=<Your physical path to FND_TOP>Make sure this FND_TOP setting is correct so Oracle Applications can load your dbc file to make connections to the appropriate database. There are more details on testing DBC file in #1 above.
- I see the following error message when I try to launch my application from the Personal Home page :
oracle.apps.fnd.framework.OAException: Application: FND, Message Name: SECURITY_APPL_LOGIN_FAILED. (NOTE: This message could not be looked up because an Application Module has not been set on the exception)
This happens when the GUEST_USER_PWD parameter in the dbc file contains an invalid user/password combination. Please make sure that you specify an existing applications user with a valid password.
Debugging and Using Diagnostics
The Self Service Framework ARU includes context sensitive help on the following topics. To access this information use the Help global button on the framework pages.
Setting the FND : Diagnostics (FND_DIAGNOSTICS) profile option to "Yes" will enable the diagnostics global button to be rendered on the screen. Pressing this button brings the user to an interface where the user can choose what type of logged messages to display.
Refer to the Logging Options described under Profile Options Reference.
- I have enabled logging and now the framework hangs or is horribly slow. What can I do?When you enabling logging at the statement level (AFLOG_LEVEL=STATEMENT) without applying a module filter (AFLOG_MODULE=%) you are asking for thousands of messages to be logged a minute. This should only be done in extreme situations where more selective filters have failed. Even if you can live with the horrible performance, you are going to have a hard time wading through all the messages produced to find what you're looking for.
Note: this is only a problem if Statement is set at the Site level. The hanging will not occur if Statement is set at the User level.
HTTPS/SSL Problems
Yes. Remember to set the Apps Framework Agent profile option to point to https instead of http, once you have configured SSL.
FND_TOP is used to derive the location of the dbc file which is then used to make connections to the appropriate database. If this is not set APPS will resort to using the old env.txt (hyperlink it) mechanism for figuring out FND_TOP so it can locate the dbc file. The env.txt mechanism is no longer supported and will NOT work in an HTTPS environment. You may also see the following error message in error_log :
mod_ssl: SSL handshake failed: HTTP spoken on HTTPS port; trying to send HTML error page (OpenSSL library error follows) OpenSSL: error:1407609C:SSL routines:SSL23_GET_CLIENT_HELLO:http request [Hint: speaking HTTP to HTTPS port!?]
Note: a common mistake is to forget to change the jserv.properties and zone.properties to change apps.zip reference to JAVA_TOP.
Apache and Jserv
For Apache specific errors please refer to the error_log. For unhanded application exceptions it is useful to look at both error_log and jserv.log as these two my contain more detailed appropriate error messages then the ones displayed on the browser. For Jserv specific problems, for instance when you are unable to start/access Jserv, refer to mod_jserv.log file.
I can't run my java applications and I see the following error messages in my mod_jserv.log file :
(EMERGENCY) ajp12 : ping: no reply error Premature end of script headers: (null) (EMERGENCY) ajp12[1]: cannot scan servlet headers
The most common causes for this problem are:
- Incomplete and/or incorrect JServ classpath. Check to make sure that the ApacheJServ.jar is being pointed to in wrapper.classpath. Also make sure that it is the right version.
- If Apache/Jserv is running on a heavily loaded system, the JVM can take a long time to start up. Set the ApJServVMTimeout in the jserv.conf file to a higher number. The default is 10 seconds. Change it to 20 seconds or higher to see if it gets around this error.
I am unable to start Apache/Jserv and see the following exceptions in my log file :
ApacheJServ/1.1: Exception creating the server socket: java.net.BindException: Address already in use: make_sock: could not bind to port <webserver_port_number>
Such errors usually mean that Apache and/or Jserv did not shutdown properly. It is best to wait for a few minutes for the various processes to clear up before restarting the server and/or the JVM.
Add the following line to apps.conf.
<IfModule mod_mime.c> AddType "text/html; charset=us7ascii" html </IfModule>
Profile Options Reference
Quick Reference
Type | Name | Code | Description | Default Value | Suggested Setting |
WebServer | Application Framework Agent | APPS_FRAMEWORK_AGENT | Http server to be used by the framework applications | ||
Session | ICX: Limit Time | ICX_LIMIT_TIME | Determines maximum session length | 4 hours | |
ICX:Session Timeout | ICX_SESSION_TIMEOUT | Maximum idle time for user session (specified in minutes) | Should be set to the same value as the Jserv session timeout. | ||
Logging | FND: Debug Log Enabled | AFLOG_ENABLED | Enables/Disables Logging | No | Yes |
FND: Debug Log Filename | AFLOG_FILE_NAME | Specifies location of log file; when undefined logs to database | null | ||
FND: Debug Log Module | AFLOG_MODULE | Log all modules (package+classname) that match this parameter | % | % | |
FND: Debug Log Level | AFLOG_LEVEL | Log all messages with level equal to or greater than this setting | Unexpected | Unexpected | |
FND: Diagnostics | FND_DIAGNOSTICS | Enable the Diagnostics global button | No | No | |
FND: Developer Mode | FND_DEVELOPER_MODE | Enable the Edit Region global button | Yes | No | |
Performance | ICX: MatchCase View | ICX_MATCHCASE_VIEW | Used for avoiding poor performing queries | Unchecked | |
FND: View Object Max Fetch Size | VO_MAX_FETCH_SIZE | Truncates result set returned from a query. | 200 | ||
Personalization Framework | Personalize Self-Service Defn | FND_CUSTOM_OA_DEFINITION | Enables the Personalize global button | No | Yes for administrators; No for users |
Disable Self-Service Personal | FND_DISABLE_OA_CUSTOMIZATIONS | Displays only the original base definition of a page | No | No | |
Dates & Timezone | Server Timezone | SERVER_TIMEZONE_ID | Specifies the TimeZone for the database | ||
Client Timezone | CLIENT_TIMEZONE_ID | Specifies TimeZone for the client(user) | |||
ICX: Date format mask | ICX_DATE_FORMAT_MASK | User's date format | 31-12-1999 | ||
Application Module Pool & Passivation Framework | FND: Application Module Pool Monitor Sleep Interval | AMPOOL_MONITOR_SLEEP_INTERVAL | Sets the application module pool monitor sleep interval | ||
FND: Application Module Pool Minimum Available Size | AMPOOL_MIN_AVAIL_SIZE | Sets the number of minimum available application modules allowed per pool | |||
FND: Application Module Pool Maximum Available Size | AMPOOL_MAX_AVAIL_SIZE | Sets the number of maximum available application modules allowed per pool | |||
FND: Application Module Pool Maximum Inactive Age | AMPOOL_MAX_INACTIVE_AGE | Sets the timeout value for the available inactive application module | |||
FND: Application Module Pool Enabled | AMPOOL_ENABLED | Enables application module pooling | Yes | ||
FND: Application Module Pool Recycle Threshold | AMPOOL_RECYCLE_THRESHOLD | Sets the number of application modules the pool will create before recycling the application modules for reuse by other threads. | |||
FND: Passivation Level | PASSIVATION_LEVEL | Passivation level for state persistence. If this is None then there will be no passivation (state persistence) support. | None | ||
FND: Session Failover Enabled | SESSION_FAILOVER_ENABLED | Indicates whether the default session failover handling is enabled. If this is Yes then the user will be taken to a generic error page when failover occurs. | Yes | ||
Branding | FND: Branding Size | FND_BRANDING_SIZE | Controls the size of the global buttons | Medium |
User's Guide
All the profile options listed below need to be updated via the Applications Profile form. The only exception is the ICX_DATE_FORMAT profile option, which can be updated via the Preferences function on the Personal Home Page. In the near future, we will allow the user to update the Client Timezone profile option via the Preferences function as well.
Webserver Options
Application Framework Agent (APPS_FRAMEWORK_AGENT)
This profile option specifies the host and port of the web server that will be used by the framework applications. It can be set at the site and the user level. The Application Framework Agent represents the java listener for your http Server. Both the http server and the java listener should be properly configured and started before the framework applications can be launched.
User Session (Time Related) Options
ICX: Limit Time (ICX_LIMIT_TIME)
Determines the maximum number of hours a user can be logged on per session. Default Value is 4 hours.
ICX: Session Timeout (ICX_SESSION_TIMEOUT)
Sets the maximum number of minutes to wait before invalidating an idle ICX session. Default value is null. Set this value to be same as the Apache/Jserv session timeout which is usually set to 30 minutes or 1800000 milliseconds.
Logging Options
Profiles used by the logging APIs can be set at any profiling level include application, responsibility, user, etc. The profiles that are used include the following:
FND: Debug Log Enabled (AFLOG_ENABLED)
Setting for whether to log any messages. Valid values are Yes or No. This option is set to No by default. Logging is an expensive operation and should not be enabled unless necessary. However, if the FND: Debug Log Level Profile option is set to Unexpected, then it makes sense to enable logging as well since only unexpected exceptions will get logged.
FND: Debug Log Level (AFLOG_LEVEL)
The log level for messages that you would like to write to the database. Valid values are from 0 - 7. The framework will log all messages with log level higher than this profile option, so the higher this value is set to the fewer and more specific the messages will be that are logged. When this level is set then we will only log messages that are greater than or equal to the current log level. We log all message levels by default.
FND: Debug Log Module (AFLOG_MODULE)
The module names that you would like to log. This profile relates to the module parameter that is passed to the writeAppsLog function. You can use wildcards for this value like oracle.apps.fnd.% to show all log messages created by fnd java classes. We log all modules by default.
FND: Debug Log Filename (AFLOG_FILE_NAME)
Use this profile option to write the log messages to a file instead of the databases.
FND: Diagnostics (FND_DIAGNOSTICS)
Setting this to "Yes" causes the Diagnostics global button to be rendered on the screen. Pressing this button brings the user to an interface where the user can choose what type of messages to log and what modules to log. The settings made here are only valid for the current user session.
Usage guidelines for logging profile options
In normal operations, only UNEXPECTED errors, those that require administrator attention, should be logged. Also, normal users should not be accessing the Diagnostics page. These settings should be used at the site level:
- FND_DIAGNOSTICS : No
- AFLOG_ENABLED : Yes
- AFLOG_MODULE : %
- AFLOG_FILENAME: null
- AFLOG_LEVEL : Unexpected
Performance Options
ICX: Match case View (ICX_MATCHCASE_VIEW)
This profile option is available for pages that are rendered by ICX Web Inquiries from Phase 5.2.2: This profile option operates on the "Match Case" checkbox in the "Advanced Search" region of Web Inquiries. Setting this profile option value to "Checked" or "Hidden" would avoid poor performing product team's queries which would normally disable indexes via the upper() clause in Advanced Search. This profile option can be set at all levels and has three options:
FND: View Object Max Fetch Size (VO_MAX_FETCH_SIZE)
- Unchecked (Default - Match Case will be rendered and unchecked)
- Checked (Match Case will be rendered and checked)
- Hidden (Match Case will NOT be rendered but checked) - instead of the match case checkbox you would have a message that says "Match Case has been selected for you".
The Self Service Framework includes this profile option for limiting the number of rows that any user can return to an HTML application through a query operation. The default site level value for this profile is 200 rows. This profile ensures that no single user can consume all the memory of a Jserv Listener through a wide open search in an inquiry or LOV. You can reduce this number to ensure that the middle-tier resources (memory) are shared evenly across all your users. When you hit this limit, you are not allowed to fetch the next set of rows by clicking on a Next button or some other UI control. Unfortunately we are not able to display a warning to the user when this limit is reached. They simply cannot get to the next set of rows. The next version of the Self Service Framework will be able to display such a good warning showing the current limit.
Usage guidelines for View Object Max Fetch Size
This profile option can be set at the application level. If you are running applications for which the default 200 rows limit is low, you can set a higher value for the profile option at the the application level.
Personalization Framework Options
Personalize Self-Service Defn (FND_CUSTOM_OA_DEFINTION)
This profile option is intended for administrators who wish to perform admin personalizations for AK regions at the localization, site, verticalization, org and responsibility levels. On enabling this profile option for the administrator, every self-service web application page will contain a global Personalize button. By clicking on this global button, the administrator can personalize the regions available on that page.
Disable Self-Service Personal (FND_DISABLE_OA_CUSTOMIZATIONS)
This is a system profile option specifically created for use by Oracle Support. You can set this profile option to Yes or No at the site or application level. If this system profile option is set to Yes, any personalizations made by the customer, regardless of the level at which the personalizations were made, will not be applied. All pages using the Self Service Framework will now display the regions based on the base AK definitions they were shipped with.
Dates & Timezone options
ICX: Date format mask (ICX_DATE_FORMAT_MASK)
The format to be used when displaying date fields. When a field displays both date and time, the date component will be displayed in the format specified here and the time component will be displayed in a 24 hour format including hours, minutes and seconds, e.g. 14:45:30 for 45 1/2 minutes past 2:00 pm.
Server Timezone (SERVER_TIMEZONE_ID)
The time zone in which the database server is running. It is assumed that all dates stored in the database will be interpreted as per this time zone. This profile is only updatable at the Site level.
Client Timezone (CLIENT_TIMEZONE_ID)
The time zone in which the client, or user, is located. This profile is updatable at all levels - Site, Application, Responsibility and User. Fields that specify a date and time will be queried and displayed to the user after automatically applying a time zone conversion as indicated by the Server Timezone profile and the particular Client Timezone profile. Conversely, a date and time entered by the user will undergo the opposite conversion before being stored into the database.
Application Module Pool options (Available as of Framework release 5.6E)
FND: Application Module Pool Monitor Sleep Interval (AMPOOL_MONITOR_SLEEP_INTERVAL)
Sets the application module pool monitor sleep interval in milliseconds. Default value is 600000 (10 minutes). The monitor thread will wake up every 10 minutes to clean up unused AMs. Only available AMs will be cleaned up.
FND: Application Module Pool Minimum Available Size (AMPOOL_MIN_AVAIL_SIZE)
Sets the number of minimum available application modules allowed per pool. Default value is 0. If an AM timeout value is set for the available application modules, BC4J framework tries to clean up those timed out AMs until the minimum size is reached.
FND: Application Module Pool Maximum Inactive Age (AMPOOL_MAX_INACTIVE_AGE)
Sets the timeout value for the available inactive application module in milliseconds. Default value 600000 (10 minutes).
FND: Application Module Pool Enabled (AMPOOL_ENABLED)
Indicates whether AM pooling is enabled or not. Default value is "Yes". If AM pooling is disabled, set to "No" application module pool instance will be destroyed instead of being checked into the pool. In other words, if AM pooling is disabled, application module instance will not be reused by another thread.
Branding
FND: Branding Size (FND_BRANDING_SIZE)
Controls the size of the global buttons found at the top of an OA Framework page. "Regular" is larger than the default size which is "Medium". "Small" has not yet been implemented but will result in text only global buttons.