Business Intelligence – Oracle

Oracle BI EE 10.1.3.3/2 – Deploying JSR 168 Portlets – Displaying Reports in Web Center Suite using JDeveloper

Posted by Venkatakrishnan J on December 20, 2007

I have been thinking about blogging about this for quite some time now. I got some time today to work on this and here is the result. As you would probably know, BI EE by default comes pre-bundled with JSR-168 portlets that can be deployed in any standard Portal that complies with WSRP and JSR-168 standards. So basically one can access the BI EE reports from any standard compliant portal. Today we shall see how to go about using these compliant portlets to retrieve a sample report into Web Center Suite using JDeveloper. The entire process can be divided into 3 main phases. They are

1.   Deploying WSRP Java Containers in an Oracle Application Server   –   Phase 1
2.   Deploying BI EE JSR 168 portlets into the above WSRP Java container   –   Phase 2
3.   Calling BI EE reports from Web Center suite using the above deployed Portlet   –   Phase 3

In my case, i have the following list of components.

   1.   BI EE running on a standalone OC4J in a laptop (say Machine A)
   2.   A standard Oracle Application Server (10.1.2 or above) running on a seperate Machine (say Machine B. This is where we will deploy the Portlets). This Application Server has Portal and Wireless installed.
   3.   JDeveloper (10.1.3.2 or above since they get bundled with a Web Center Suite OC4J) on Machine A.

Phase 1:

   For Phase 1 ie to install the WSRP container, the documentation is very clear and you can get the list of the step by step instructions here

Phase 2:

1.   Once the WSRP container has been created (in my case i have created a container called wsrp), go to {OracleBI}\web\sdk. There you would find a file called sawjsr168portlets.war. Copy this file to a local folder like D:\Portlets.

      

2.   Open a command prompt and navigate to D:\Portlets folder( the folder to which we copied the jsr168portlets.war file). Now type in the following command

jar -xf sawjsr168portlets.war

What this would do is it would open up the war file and will expose the contents in the same directory. So, you basically can see new directories like WEB-INF that would get created.

3.   Now go to D:\Portlets\WEB-INF and open the Portlets.xml file in a text editor. Search for oracle.bi.presentation.sawserver.URL and in the “value” tag enter the URL of the BI EE presentation services.

For example

<preference>
            <name>oracle.bi.presentation.sawserver.URL</name>
            <value>http://10.176.246.99:9704/analytics/saw.dll</value&gt;
            <read-only>false</read-only>
         </preference>

Search for oracle.bi.presentation.portlets.jsr168.reportui.AdminUserName and enter Administrator in the value tag. For example

<preference>
            <name>oracle.bi.presentation.portlets.jsr168.reportui.AdminUserName</name>
            <value>Administrator</value>
            <read-only>false</read-only>
         </preference>

Search for oracle.bi.presentation.portlets.jsr168.reportui.AdminPwd and enter the password for the Administrator user. For example

<preference>
            <name>oracle.bi.presentation.portlets.jsr168.reportui.AdminPwd</name>
            <value>welcome1</value>
            <read-only>false</read-only>
         </preference>

Search for oracle.bi.presentation.report.Path and enter a report URL. For example

<preference>
            <name>oracle.bi.presentation.report.Path</name>
            <value>/shared/paint demo/demo report</value>
            <read-only>false</read-only>
         </preference>

      

4.   Now open up web.xml in a text editor. Search for com.siebel.analytics.web.SAWServer.Host and enter the machine name/ip where BI EE is hosted. For example,

<init-param>
            <param-name>com.siebel.analytics.web.SAWServer.Host</param-name>
            <param-value>10.176.246.99</param-value>
         </init-param>

5.   Now go back to D:\portlets via command prompt and enter the following commands.

jar -uf sawjsr168portlets.war WEB-INF\portlet.xml
jar -uf sawjsr168portlets.war WEB-INF\web.xml

This would update the war file with the changes that we made above.

6.   Now go to the Application Server enterprise manager and Deploy this war file inside the WSRP container that was created above. i have used biee and /biee for the application name and its URL. Ensure that you are able to access the WSDL using the URL http://MIDTIERHOST:PORT/biee/portlets?WSDL

      

      

Now our Phase 2 is complete.

Phase 3:

1.   Open JDeveloper 10.1.3.2 and create a sample application using Webcenter Application as the template.

      

2.   Now lets register the portlet that we deployed above. Give it some name and enter the WSDL url while doing the registration. After that click on finish (keep everything else default).

      

      

3.   Once registered create a simple JSF-JSP page and include this portlet that we registered from the Component Pallette. Ensure that you are exposing the UI components with some sample class names.

      

      

4.   Now execute this JSP. You should see the sample report output.

      

You can also pass the report path dynamically from within web center suite. You need to bind the parameter to the URL.

Advertisements

8 Responses to “Oracle BI EE 10.1.3.3/2 – Deploying JSR 168 Portlets – Displaying Reports in Web Center Suite using JDeveloper”

  1. Oleg said

    I’m deploy portlet as described with some additional actions – after deploy wsrp-samples and sawjsr168portlets I install wsrp-install.jar

    cd OC4J_wsrp
    cp PATH/wsrp-install.jar .
    java -jar wsrp-install.jar

    Only after this action I can get WSDL info.

    On Phase 3 step 3 in IDeveloper I get error message:

    oracle.portlet.client.container.PortletHttpRuntimeException: Http request to url http://MYHOST:7777/biee/portlets?WSDL failed with status code 500 reason Internal Server Error.
    SOAP call returned the fault : Internal Server Error (java.lang.NoClassDefFoundError: oracle/ias/cache/ObjectNotFoundException). Check that the producer URL has been correctly specified, that the producer server machine and producer container are running, that the producer application is deployed correctly, and that the client can reach the server if behind a firewall.
    at oracle.portlet.client.connection.wsrp.ActivityServerWrapper.checkAndReturnHttpException(ActivityServerWrapper.java:61)
    at oracle.portlet.client.connection.wsrp.ActivityServerWrapper.getServiceDescription(ActivityServerWrapper.java:2459)

  2. Venkatakrishnan J said

    Where are you deploying this? By any chance are you deploying this on a Oracle Portal. You need to have 10.1.0.4 version of Portal. Also, if you are using JDev then you must have a minimum of 10.1.3.2 version of JDev.

  3. Oleg said

    I use Oracle WebCenter based on Oracle AS 10.1.3.2.
    I have this error in JDev 10.1.3.2 and 10.1.3.3

    In the browser I get successfully response for http://MYHOST:7777/biee/portlets?WSDL

    But request from JDev receive error.

    tcpdump (dirty text)
    jdev request:
    POST./biee/portlets/WSRPServiceDescriptionService.
    HTTP/1.1..
    Host:.MYHOST:7777..
    Connection:.close,.TE..TE:.trailers,.deflate,.gzip,.compress..
    User-Agent:.Oracle.HTTPClient.Version.10h..
    SOAPAction:.”urn:oasis:names:tc:wsrp:v1:getServiceDescription”..
    Authorization:.Basic.UFVCTElDOm51bGw=..
    Oracle-ECID:.null,0..
    Accept-Encoding:.gzip,.x-gzip,.compress,.x-compress..Content-type:.text/xml..
    Content-length:.481….

    ..

    uk

    Server response:
    HTTP/1.1.500.Internal.Server.Error..
    Date:.Mon,.24.Dec.2007.11:47:32.GMT..
    Server:.Oracle-Application-Server-10g/10.1.3.1.0.Oracle-HTTP-Server..
    Connection:.close..
    Transfer-Encoding:.chunked..
    Content-Type:.text/xml….11b..

    env:Server
    Internal.Server.Error.(java.lang.NoClassDefFoundError:.oracle/ias/cache/ObjectNotFoundException)

    Thanks

  4. Joe said

    I followed all the steps given. When I executed the JSP page in the last step, I got….

    “An error occurred during communication with the producer. This could be due to a WSDL mismatch between the consumer and the producer. Ensure the consumer and producer are using the same version of the WSRP v2 WSDL.”

    Any ideas?

    On one end is JDeveloper Studio Edition 10.1.3.3
    On the other end is Web Center with the wsrp-install.jar deployd, connected to Oracle Business Intelligence 10.1.3.3.1

    All the tests along the way worked out fine.

  5. Aneesh said

    I got a report to display on my page, but was getting the below error on my server logs:

    2008-01-21 15:08:18.531 WARNING Error in Siebel Analytics ReportUI portlet
    Jan 21, 2008 3:08:18 PM org.apache.axis.client.Call invoke
    SEVERE: Exception:
    org.xml.sax.SAXException: Bad types (class java.lang.String -> class com.siebel.analytics.web.soap.AuthResult)
    at org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:286)
    at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
    at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
    at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
    at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
    at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
    at org.apache.axis.client.Call.invoke(Call.java:2448)
    at org.apache.axis.client.Call.invoke(Call.java:2347)
    at org.apache.axis.client.Call.invoke(Call.java:1804)
    at com.siebel.analytics.web.soap.SAWSessionServiceStub.impersonateex(SAWSessionServiceStub.java:540)
    at com.siebel.analytics.web.portlets.jsr168.SAWConnection.init(SAWConnection.java:80)
    at com.siebel.analytics.web.portlets.jsr168.ReportUI.getSAWConnection(ReportUI.java:905)
    at com.siebel.analytics.web.portlets.jsr168.ReportUI.getSAWPage(ReportUI.java:1010)
    at com.siebel.analytics.web.portlets.jsr168.ReportUI.doViewIFrameWithActionLinks(ReportUI.java:422)
    at com.siebel.analytics.web.portlets.jsr168.ReportUI.doView(ReportUI.java:178)
    at javax.portlet.GenericPortlet.doDispatch(GenericPortlet.java:235)
    at com.siebel.analytics.web.portlets.jsr168.ReportUI.doDispatch(ReportUI.java:1052)
    at javax.portlet.GenericPortlet.render(GenericPortlet.java:163)
    at oracle.portlet.server.containerimpl.ServerImpl.getMarkup(ServerImpl.java:161)
    at oracle.portlet.wsrp.v2.WSRPv2ToServer.getMarkup(WSRPv2ToServer.java:867)
    at oracle.portlet.wsrp.v2.WSRP_v2_Markup_PortTypeSoapToJaxb.getMarkup(WSRP_v2_Markup_PortTypeSoapToJaxb.java:70)
    at oasis.names.tc.wsrp.v2.bind.runtime.WSRP_v2_Markup_Binding_SOAP_Tie.invoke_getMarkup(WSRP_v2_Markup_Binding_SOAP_Tie.java:675)
    at oasis.names.tc.wsrp.v2.bind.runtime.WSRP_v2_Markup_Binding_SOAP_Tie.processingHook(WSRP_v2_Markup_Binding_SOAP_Tie.java:1448)
    at oracle.j2ee.ws.server.StreamingHandler.handle(StreamingHandler.java:297)
    at oracle.j2ee.ws.server.JAXRPCProcessor.doEndpointProcessing(JAXRPCProcessor.java:413)
    at oracle.j2ee.ws.server.WebServiceProcessor.invokeEndpointImplementation(WebServiceProcessor.java:349)
    at oracle.j2ee.ws.server.JAXRPCProcessor.doRequestProcessing(JAXRPCProcessor.java:277)
    at oracle.j2ee.ws.server.WebServiceProcessor.processRequest(WebServiceProcessor.java:114)
    at oracle.j2ee.ws.server.JAXRPCProcessor.doService(JAXRPCProcessor.java:134)
    at oracle.j2ee.ws.server.WebServiceServlet.doPost(WebServiceServlet.java:177)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65)
    at oracle.portlet.server.service.ContextFilter.doFilter(ContextFilter.java:86)
    at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:623)
    at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370)
    at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:871)
    at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:453)
    at com.evermind.server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:221)
    at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:122)
    at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:111)
    at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
    at oracle.oc4j.network.ServerSocketAcceptHandler.procClientSocket(ServerSocketAcceptHandler.java:239)
    at oracle.oc4j.network.ServerSocketAcceptHandler.access$700(ServerSocketAcceptHandler.java:34)
    at oracle.oc4j.network.ServerSocketAcceptHandler$AcceptHandlerHorse.run(ServerSocketAcceptHandler.java:880)
    at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
    at java.lang.Thread.run(Thread.java:595)

    Also when I click on a filter list box in the report, the portlet breaks. It tries to call the below url
    http://xx.yy.zz.zz1:yyyy/biee/sawbridge?SAWServer=Enc_f90c1fd07336dfa8f51c4dc19eb2efe516fc155234bba315c39fa2dada94a1f0d879a0bcb4100abce14e85a9f576c6f5&RedirectURL=saw.dll%3fNoAuthGo

    Any help would be appreciated.

  6. Mike Guthrie said

    Has this been resolved? I have the same exact issue. I published an item in a forum (http://forums.oracle.com/forums/thread.jspa?messageID=2264558) but have not found an answer yet. Any help would be tremendously appreciated!! We cannot do any portlet development because of this.
    Thanks,
    Mike

  7. John Watson said

    The details for phase one are not clear; or they are incorrect. I have followed them completely for applying to OC4J Standalone and the installation errors with error messages similar to some described above. For those people struggling with the same problem it may be helpful to know that there is a bug acknowledged by Oracle with applying wsrp-installer.jar to JRE 1.6.

  8. Tara said

    I followed your instructions, which worked. However my Bi Report has a parameter prompt. How do I pass webcenter session variable value to bi portlet parameter? I tried adding parameters to report path in portlet but this does not work.

    Thanks.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: