Chris,
Using Oracle's bridge and ADFm, you need to add Oracle's 10.1.3.2
lifecycle listeners to your portlet.xml. This "should" work, although
the Proof of Concept for Trinidad was used with JDeveloper 11 so I
haven't actually tested this out. I DO know that, for 11, Oracle
requires the AdfFaces Richclient framework for bindings to work
properly, but you can certainly use Trinidad as your renderkit since
it's just an extension of Trinidad.
Scott
Innes, Chris wrote:
Greetings,
I was wondering if I could leverage some knowledge / experiences out
there regarding exposing a Trinidad JSF app as a Portlet within
JDeveloper 10.1.3.2 & the pre-configured Webcenter OC4J.
I was easily able to expose a Sun Reference Implementation JSF
application as a Portlet, using the Faces Portlet Bridge, and then
consume using a Webcenter page and Portlet producer. However, when I
try this with the Trinidad App (no matter how trivial), I experience
the exception listed at the bottom of this e-mail when attempting to
consume it.
For both the Sun RI & Trinidad JSF apps I followed the same process to
expose (as documented on the Oracle Web Center site):
- Add the Portlet Faces Bridge library to each of the apps
- Create the Portlet.xml deployment descriptor and make the necessary
modifications
- Modify the web.xml file
- Deploy apps to the WebCenter preconfigured OC4J
- Create a WebCenter application, register the Portlet producers and
consume
For both apps, I can view the wsrp WSDL and all Portlet registrations
test successfully. I can run them as straight JSF apps without any
problems. So, I’m not sure where to go from here. I have read a couple
of forum entries for this particular exception, and they suggest
increasing the Portlet producer timeout durations, but this has not
seemed to help.
Interestingly, after some experimentation I can trigger the error on a
Sun RI app by just adding the Trinidad libraries to the project (not
using any of the components) which makes me think there is some kind
of incompatibility.
Does anybody have any thoughts as to where the issue might lay? Is it
likely on the consumption side or something to do with the Portlet
deployment? Does the preconfigured WebCenter OC4J support Trinidad? I
remember reading somewhere that Trinidad and ADF Faces don’t mix very
well and to consume the Portlets I think you need to use an ADF
Portlet library. I am planning to stand up a complete Oracle Portal
stack to test the producers also, but haven’t got that far yet.
Thanks in advance,
Here is the exception received when trying to consume the portlet:
SEVERE: oracle.adf.model.portlet.binding.PortletBindingException:
Unable to get portlet response (Internal Error) for portlet binding
ReallyEasyDemoPortlet1_1
at
oracle.adf.model.portlet.binding.PortletBinding.getPortletRendition(PortletBinding.java:514)
at
oracle.adfinternal.view.faces.renderkit.html.portlet.PortletRenderer.preRender(PortletRenderer.java:417)
at
oracle.adfinternal.view.faces.renderkit.html.customizable.ShowDetailFrameRenderer.encodeBegin(ShowDetailFrameRenderer.java:227)
at
oracle.adf.view.faces.component.UIXComponentBase.encodeBegin(UIXComponentBase.java:593)
at
oracle.adfinternal.view.faces.renderkit.RenderUtils.encodeRecursive(RenderUtils.java:39)
at
oracle.adfinternal.view.faces.renderkit.core.CoreRenderer.encodeChild(CoreRenderer.java:242)
at
oracle.adfinternal.view.faces.renderkit.core.CoreRenderer.encodeAllChildren(CoreRenderer.java:265)
at
oracle.adfinternal.view.faces.renderkit.core.xhtml.PanelPartialRootRenderer.renderContent(PanelPartialRootRenderer.java:65)
at
oracle.adfinternal.view.faces.renderkit.core.xhtml.BodyRenderer.renderContent(BodyRenderer.java:117)
at
oracle.adfinternal.view.faces.renderkit.core.xhtml.PanelPartialRootRenderer.encodeAll(PanelPartialRootRenderer.java:147)
at
oracle.adfinternal.view.faces.renderkit.core.xhtml.BodyRenderer.encodeAll(BodyRenderer.java:60)
at
oracle.adfinternal.view.faces.renderkit.core.CoreRenderer.encodeEnd(CoreRenderer.java:169)
at
oracle.adf.view.faces.component.UIXComponentBase.encodeEnd(UIXComponentBase.java:624)
at javax.faces.webapp.UIComponentTag.encodeEnd(UIComponentTag.java:645)
at javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:568)
at
oracle.adf.view.faces.webapp.UIXComponentTag.doEndTag(UIXComponentTag.java:100)
at
_mdssys._viewcontroller._public__html._untitled1_jspx._jspService(_untitled1_jspx.java:103)
at com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:59)
at
oracle.jsp.runtimev2.JspPageTable.compileAndServe(JspPageTable.java:724)
at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:414)
at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:598)
at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:522)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at
com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:64)
at oracle.mds.jsp.MDSJSPFilter.doFilter(Unknown Source)
at
com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:622)
at
com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:369)
at
com.evermind.server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:286)
at
com.evermind.server.http.ServletRequestDispatcher.access$100(ServletRequestDispatcher.java:50)
at
com.evermind.server.http.ServletRequestDispatcher$2.oc4jRun(ServletRequestDispatcher.java:192)
at oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:283)
at
com.evermind.server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:197)
at
com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:346)
at
com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:152)
at
oracle.adfinternal.view.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:157)
at
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:107)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:245)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:137)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:214)
at
com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:64)
at
oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._invokeDoFilter(AdfFacesFilterImpl.java:228)
at
oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._doFilterImpl(AdfFacesFilterImpl.java:197)
at
oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl.doFilter(AdfFacesFilterImpl.java:123)
at
oracle.adf.view.faces.webapp.AdfFacesFilter.doFilter(AdfFacesFilter.java:103)
at
com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:15)
at
oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:162)
at
com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:620)
at
com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:369)
at
com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:865)
at
com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:447)
at
com.evermind.server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:215)
at
com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:117)
at
com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:110)
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:298)
at java.lang.Thread.run(Thread.java:595)
Caused by: oracle.portlet.client.container.PortletRemoteException:
oracle.portlet.server.container.OperationFailedException:
oracle.portlet.wsrp.v1.OperationFailedException:
oracle.portlet.wsrp.v1.soap.OperationFailed
at
oracle.portlet.client.techimpl.wsrp.WSRPBaseTerminalPipe.processException(WSRPBaseTerminalPipe.java:37)
at
oracle.portlet.client.techimpl.wsrp.WSRPGetMarkupPipe.execute(WSRPGetMarkupPipe.java:185)
at
oracle.portlet.client.techimpl.wsrp.WSRPGetMarkupPipe.pre(WSRPGetMarkupPipe.java:52)
at
oracle.portlet.client.service.pipeline.PipeContext.internalExecute2(PipeContext.java:516)
at
oracle.portlet.client.service.pipeline.PipeContext.internalExecute(PipeContext.java:403)
at
oracle.portlet.client.service.pipeline.PipeContextRunnable.run(PipeContextRunnable.java:24)
at
edu.emory.mathcs.backport.java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:431)
at
edu.emory.mathcs.backport.java.util.concurrent.FutureTask.run(FutureTask.java:176)
at
oracle.portlet.client.service.pipeline.ModifiedThreadPoolExecutor$Worker.runTask(ModifiedThreadPoolExecutor.java:398)
at
oracle.portlet.client.service.pipeline.ModifiedThreadPoolExecutor$Worker.run(ModifiedThreadPoolExecutor.java:423)
... 1 more
Caused by: oracle.portlet.server.container.OperationFailedException:
oracle.portlet.wsrp.v1.OperationFailedException:
oracle.portlet.wsrp.v1.soap.OperationFailed
at
oracle.portlet.wsrp.v1.ServerToWSRPv1.getMarkup(ServerToWSRPv1.java:1093)
at
oracle.portlet.client.connection.wsrp.ActivityServerWrapper.getMarkup(ActivityServerWrapper.java:1330)
at
oracle.portlet.client.techimpl.wsrp.WSRPGetMarkupPipe.execute(WSRPGetMarkupPipe.java:116)
... 9 more
Caused by: oracle.portlet.wsrp.v1.OperationFailedException:
oracle.portlet.wsrp.v1.soap.OperationFailed
at
oracle.portlet.wsrp.v1.WSRP_v1_Markup_PortTypeJaxbToSoap.getMarkup(WSRP_v1_Markup_PortTypeJaxbToSoap.java:101)
at
oracle.portlet.wsrp.v1.ServerToWSRPv1.getMarkup(ServerToWSRPv1.java:977)
... 11 more
Caused by: oracle.portlet.wsrp.v1.soap.OperationFailed
at
oracle.portlet.wsrp.v1.soap.runtime.WSRP_v1_Markup_PortType_getMarkup_Fault_SOAPSerializer.deserializeDetail(WSRP_v1_Markup_PortType_getMarkup_Fault_SOAPSerializer.java:269)
at
oracle.j2ee.ws.common.encoding.SOAPFaultInfoSerializer.doDeserializeSOAP11(SOAPFaultInfoSerializer.java:132)
at
oracle.j2ee.ws.common.encoding.SOAPFaultInfoSerializer.doDeserialize(SOAPFaultInfoSerializer.java:94)
at
oracle.j2ee.ws.common.encoding.ObjectSerializerBase.deserialize(ObjectSerializerBase.java:180)
at
oracle.j2ee.ws.common.encoding.ReferenceableSerializerImpl.deserialize(ReferenceableSerializerImpl.java:147)
at
oracle.portlet.wsrp.v1.soap.runtime.WSRP_v1_Markup_Binding_SOAP_Stub._readBodyFaultElement(WSRP_v1_Markup_Binding_SOAP_Stub.java:456)
at
oracle.j2ee.ws.client.StreamingSender._sendImpl(StreamingSender.java:321)
at oracle.j2ee.ws.client.StreamingSender._send(StreamingSender.java:112)
at
oracle.portlet.wsrp.v1.soap.runtime.WSRP_v1_Markup_Binding_SOAP_Stub.getMarkup(WSRP_v1_Markup_Binding_SOAP_Stub.java:76)
at
oracle.portlet.wsrp.v1.WSRP_v1_Markup_PortTypeJaxbToSoap.getMarkup(WSRP_v1_Markup_PortTypeJaxbToSoap.java:78)
... 12 more
Portlet.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<portlet-app
xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd
http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
<portlet>
<description>Really Easy Demo Portlet</description>
<portlet-name>ReallyEasyDemo</portlet-name>
<display-name>Really Easy Demo portlet</display-name>
<portlet-class>oracle.portlet.server.bridges.jsf.FacesPortlet
</portlet-class>
<init-param>
<name>DefaultPage.view</name>
<value>/hello.jspx</value>
</init-param>
<init-param>
<name>BridgeLifecycleListeners</name>
<value>
oracle.portlet.server.bridges.jsf.adf.ADFFacesBridgeLifecycleListener
</value>
</init-param>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
</supports>
<supported-locale>en</supported-locale>
<portlet-info>
<title>Really Easy Demo Portlet</title>
<short-title>ReallyEasyDemo</short-title>
</portlet-info>
</portlet>
</portlet-app>
Web.xml
<?xml version = '1.0' encoding = 'ISO-8859-1'?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
<!--param-value>server</param-value-->
</context-param>
<context-param>
<param-name>org.apache.myfaces.trinidad.USE_APPLICATION_VIEW_CACHE</param-name>
<param-value>false</param-value>
</context-param>
<!--<filter>
<filter-name>adfBindings</filter-name>
<filter-class>oracle.adf.model.servlet.ADFBindingFilter</filter-class>
</filter>
-->
<context-param>
<param-name>org.apache.myfaces.trinidad.CHECK_FILE_MODIFICATION</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.trinidad.CHANGE_PERSISTENCE</param-name>
<param-value>session</param-value>
</context-param>
<filter>
<filter-name>trinidad</filter-name>
<filter-class>org.apache.myfaces.trinidad.webapp.TrinidadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>trinidad</filter-name>
<servlet-name>faces</servlet-name>
</filter-mapping>
<servlet>
<servlet-name>faces</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>resources</servlet-name>
<servlet-class>org.apache.myfaces.trinidad.webapp.ResourceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>faces</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>resources</servlet-name>
<url-pattern>/adf/*</url-pattern>
</servlet-mapping>
</web-app>
Faces-config.xml
<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD
JavaServer Faces Config 1.0//EN"
"http://java.sun.com/dtd/web-facesconfig_1_0.dtd" >
<faces-config>
<application>
<default-render-kit-id>
org.apache.myfaces.trinidad.core
</default-render-kit-id>
</application>
</faces-config>
Chris.