Friday, August 23, 2013

oracle.portal.page BaseMetaData.parseBlocks Exception

I run into an issue that gives the same exception as described later. I found this document in Oracle's support site. This resolved my problem.












Applies to:

Portal - Version 9.0.4 and later
Information in this document applies to any platform.
Checked for relevance on 10-Jun-2013


Symptoms

Some portlets show the following error sporadically:
<PROVIDER NAME> is not currently available for maintenance reasons

This problem only occurs to Web Providers that use the session, so the Login Frequency is set to Once Per User Session, or Always.
The Portal database is in a RAC.

The Portal's application.log shows the following errors while the problem occurs:

07/08/07 16:56:20 portal: id=144115363668272548,2 Exception in BaseMetaData.parseBlocks
java.lang.ArrayIndexOutOfBoundsException: 402
at oracle.webdb.page.v2.BaseMetaData.parseBlocks(Unknown Source)
at oracle.webdb.page.v2.LoginMetaData.<init>(Unknown Source)
at oracle.webdb.page.v2.DataProcessor903.getLoginMetaData(Unknown Source)
at oracle.webdb.page.v2.DataProcessor903.process(Unknown Source)
at oracle.webdb.page.PageBuilder.process(Unknown Source)
at oracle.webdb.page.Main.doRequest(Unknown Source)
at oracle.webdb.page.ParallelServlet.doGet(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:765)
at
com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:317)
at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:793)
at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:208)
at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:125)
at
com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.jav
a:192)
at java.lang.Thread.run(Thread.java:534)

07/08/07 16:56:20 portal: id=144115363668272548,2 Page '713,1604790' metadata dump:
<FONT CLASS=PortletText1>Error: The listener returned the following Message: 504 Origin
Server Timeout </FONT>
07/08/07 16:56:20 portal: id=144115363668272548,2 Exception processing LMD:
oracle.webdb.page.v2.MetaDataParseException: Error parsing Meta Data: end of input whilst parsing
blocks
typeOffset='0'
typeLength='11'
idOffset='12'
idLength='-1'
mPrevBlockType='null'
mPrevBlockId='null'
c='0'
buffer.length='402'
offset='403' : last valid block was 'null'/'null'
at oracle.webdb.page.v2.BaseMetaData.parseError(Unknown Source)
at oracle.webdb.page.v2.BaseMetaData.parseBlocks(Unknown Source)
at oracle.webdb.page.v2.LoginMetaData.<init>(Unknown Source)
at oracle.webdb.page.v2.DataProcessor903.getLoginMetaData(Unknown Source)
at oracle.webdb.page.v2.DataProcessor903.process(Unknown Source)
at oracle.webdb.page.PageBuilder.process(Unknown Source)
at oracle.webdb.page.Main.doRequest(Unknown Source)
at oracle.webdb.page.ParallelServlet.doGet(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:765)
at
com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:317)
at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:793)
at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:208)
at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:125)
at
com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.jav
a:192)
at java.lang.Thread.run(Thread.java:534)

07/08/07 16:56:20 portal: id=144115363668272548,2 Invalid status code encountered : status=504
reason=Origin Server Timeout name=content-fetcher1 label=loginMeta
url=http://www.xxx.yy.zz/pls/portal/!PORTAL.wwpro_app_provider.do_object_signon?page_objects=10556:1
055622&prov1055622=1055622 time=41798ms content=<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html> <head>
<title>No Response from Application Web Server</title>
</head>

<body bgcolor="white">
<font color="red">
<h1>No Response from Application Web Server</h1>
</font>

There was no response from the application web server for the page you requested. <br>Please
notify the site's webmaster and try your request again later.
<hr>

</body> </html>

Another symptom may be that URL Portlets show the following error sporadically:
Error:
Unknown exception: (WWV-13056)
The preference path does not exist: ORACLE.WEBVIEW.PARAMETERS.20117871020 (WWC-51000)

Steps To Reproduce:
1. Have a Portal installation where the Portal database is in a mulit-node RAC.
2. Register a Web Provider that uses a session and set the Login Frequency to Once Per User Session.
3. Add some portlets from this provider to a page.
4. Refresh the page multiple times and notice that sometimes the following error is shown in place of some portlets:
<PROVIDER NAME> is not currently available for maintenance reasons

Changes


Cause

One of the RAC node is not able to resolve the hostname in the Portlet requests.

When a provider uses the session, then the Portal database tries to call the initSession call of the provider, while generating the Login Meta Data (LMD).
If the particular Portal database node cannot access the provider with the hostname that appears in the URL in the provider registration, then essentially Portal thinks that the particular provider is down when requesting the page, and hence the error is shown.

Solution

To implement the solution, please execute the following steps::

1.  Modify the hosts file on all RAC nodes of the Portal database so that the hostname of the provider (as shown in the URL of the Provider Registration) can be correctly resolved to the middle tier machine where the provider is running.

Note:
When the provider URL correctly resolves to the middle tier from all RAC nodes of the Portal database then Portal always will be able to ping the provider and the error message will not be shown any more.

No comments:

Post a Comment