Integrating ADF EA19 and beta2 CVS version
nusa Jan 5, 2006 10:04 AMHi,
I'm trying to integrate ADF Faces EA19, Seam beta2 CVS version, and MyFaces 1.1.1
using this guidelines ( http://www.oracle.com/technology/products/jdev/101/howtos/myfaces/index.html ).
To do that, I hack the issues example that come from Seam beta2 by keeping ONLY the java sources code.
This will create the same ejb3 file as if we build it originally.
For the war file, I just picked up the index.html, login.jsp, and home.jsp.
In order to build it, I have to modify the following files:
1. faces config :
<faces-config> <application> <!-- Oracle ADF Faces --> <default-render-kit-id>oracle.adf.core</default-render-kit-id> <locale-config> <default-locale>en_GB</default-locale> <supported-locale>fr</supported-locale> </locale-config> </application> <!-- Standard persistence lifecycle models for the Seam application --> <lifecycle> <phase-listener>org.jboss.seam.jsf.SeamExtendedManagedPersistencePhaseListener</phase-listener> </lifecycle> <navigation-rule> <navigation-case> <from-outcome>home</from-outcome> <to-view-id>/home.jsp</to-view-id> </navigation-case> </navigation-rule> </faces-config>
2. web.xml :
<web-app id="SimpleADF"> <display-name>SimpleADF</display-name> <context-param> <param-name>javax.faces.CONFIG_FILES</param-name> <param-value>/WEB-INF/simpleadf-config.xml</param-value> </context-param> <context-param> <param-name>javax.faces.STATE_SAVING_METHOD</param-name> <param-value>client</param-value> </context-param> <context-param> <param-name>org.apache.myfaces.AUTO_SCROLL</param-name> <param-value>true</param-value> </context-param> <!-- Needed to ensure safe tx cleanup when using Seam-managed sessions/persistence contexts --> <filter> <filter-name>Seam Exception Filter</filter-name> <filter-class>org.jboss.seam.servlet.SeamExceptionFilter</filter-class> </filter> <!-- Oracle ADF Faces Filter --> <filter> <filter-name>ADF Faces</filter-name> <filter-class>oracle.adf.view.faces.webapp.AdfFacesFilter</filter-class> </filter> <filter-mapping> <filter-name>Seam Exception Filter</filter-name> <servlet-name>Faces Servlet</servlet-name> </filter-mapping> <filter-mapping> <filter-name>ADF Faces</filter-name> <servlet-name>Faces Servlet</servlet-name> </filter-mapping> <!-- Seam listener --> <listener> <listener-class>org.jboss.seam.servlet.SeamListener</listener-class> </listener> <!-- MyFaces listener --> <listener> <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class> </listener> <!-- Oracle ADF resource loader servlet --> <servlet> <servlet-name>ADF Resources</servlet-name> <servlet-class>oracle.adf.view.faces.webapp.ResourceServlet</servlet-class> </servlet> <!-- Faces Servlet Mapping --> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!-- Faces Servlet Mapping --> <servlet-mapping> <servlet-name>ADF Resources</servlet-name> <url-pattern>/adf/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.jsf</url-pattern> </servlet-mapping> </web-app>
3. login.jsp modified to use the ADF syntax :
<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0" xmlns:f="http://java.sun.com/jsf/core" xmlns:af="http://xmlns.oracle.com/adf/faces"> <jsp:directive.page contentType="text/html;charset=utf-8" /> <f:view> <f:loadBundle basename="messages" var="msg"/> <af:document title="#{msg.BrowserTitle}"> <af:form> <af:panelPage title="#{msg.LoginTitle}"> <f:facet name="messages"> <af:messages /> </f:facet> <af:panelForm rows="4"> <af:inputText label="#{msg.Login}" value="#{login.instance.username}" /> <af:inputText label="#{msg.Password}" value="#{login.instance.password}" secret="true" /> <af:panelLabelAndMessage> <af:panelGroup layout="vertical"> <af:objectSpacer height="10" /> <af:panelGroup layout="horizontal"> <af:commandButton text="#{msg.LoginButton}" action="#{login.login}" /> </af:panelGroup> </af:panelGroup> </af:panelLabelAndMessage> </af:panelForm> </af:panelPage> </af:form> </af:document> </f:view> </jsp:root>
4. home.jsp modified as well :
<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:af="http://xmlns.oracle.com/adf/faces" > <jsp:directive.page contentType="text/html;charset=utf-8" /> <f:view> <f:loadBundle basename="messages" var="msg"/> <af:document title="#{msg.BrowserTitle}"> <af:form> <af:panelPage title="#{msg.LoginTitle}"> <f:facet name="messages"> <af:messages /> </f:facet> </af:panelPage> </af:form> </af:document> </f:view> </jsp:root>
Then I modify accordingly the messages.properties, persistence.xml, import.sql, etc.
As you can see in login.jsp, I keep using the same java sources as the original ( issues example ).
When I deploy the ear file, the entity bean are loaded correctly :
... 14:09:11,879 INFO [org.hibernate.ejb.Ejb3Configuration] found EJB3 Entity bean: org.jboss.seam.example.issues.Comment 14:09:11,879 INFO [org.hibernate.ejb.Ejb3Configuration] found EJB3 Entity bean: org.jboss.seam.example.issues.Issue 14:09:11,889 INFO [org.hibernate.ejb.Ejb3Configuration] found EJB3 Entity bean: org.jboss.seam.example.issues.Project 14:09:11,899 INFO [org.hibernate.ejb.Ejb3Configuration] found EJB3 Entity bean: org.jboss.seam.example.issues.User ...
the import.sql file is executed properly :
... 14:09:13,712 INFO [org.hibernate.tool.hbm2ddl.SchemaExport] Executing import script: /import.sql 14:09:13,712 DEBUG [org.hibernate.tool.hbm2ddl.SchemaExport] insert into user values ('gavin', 'Gavin King', 'foobar') 14:09:13,712 DEBUG [org.hibernate.tool.hbm2ddl.SchemaExport] insert into user values ('emmanuel', 'Emmanuel Bernard', 'secret') ...
the messages is loaded correctly :
... 14:09:14,523 DEBUG [org.jboss.seam.Component] instantiating Seam component: resourceBundle 14:09:14,543 INFO [org.jboss.seam.core.ResourceBundle] loaded resource bundle: messages 14:09:14,553 TRACE [org.jboss.seam.Component] class=class java.util.PropertyResourceBundle; keys=java.util.ResourceBundleEnumeration@e5376a; locale=; ...
But when I point to http://localhost:8080/SimpleADF/login.jsf, I got these strange error :
... 14:19:03,519 DEBUG [org.jboss.seam.jsf.SeamVariableResolver] resolving name: msg 14:19:03,519 ERROR [org.jboss.seam.servlet.SeamExceptionFilter] uncaught exception handled by Seam javax.servlet.ServletException: Cannot get value for expression '#{msg.BrowserTitle}' at javax.faces.webapp.FacesServlet.service(FacesServlet.java:121) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._invokeDoFilter(AdfFacesFilterImpl.java:356) at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._doFilterImpl(AdfFacesFilterImpl.java:325) at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl.doFilter(AdfFacesFilterImpl.java:190) at oracle.adf.view.faces.webapp.AdfFacesFilter.doFilter(AdfFacesFilter.java:87) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:44) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:39) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:159) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112) at java.lang.Thread.run(Thread.java:595) 14:19:03,519 DEBUG [org.jboss.seam.contexts.Lifecycle] After request, destroying contexts 14:19:03,519 DEBUG [org.jboss.seam.contexts.Lifecycle] <<< End web request 14:19:03,519 DEBUG [org.jboss.seam.util.NamingHelper] JNDI InitialContext properties:{} 14:19:03,519 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/SimpleADF].[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception javax.faces.el.EvaluationException: Cannot get value for expression '#{msg.BrowserTitle}' at org.apache.myfaces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:397) at oracle.adf.view.faces.bean.FacesBeanImpl.getProperty(FacesBeanImpl.java:55) at oracle.adf.view.faces.bean.util.ValueMap.get(ValueMap.java:54) at oracle.adf.view.faces.bean.util.ValueMap$EntryImpl.getValue(ValueMap.java:175) at org.apache.myfaces.util.DebugUtils.printComponent(DebugUtils.java:187) at org.apache.myfaces.util.DebugUtils.printComponent(DebugUtils.java:313) at org.apache.myfaces.util.DebugUtils.printView(DebugUtils.java:147) at org.apache.myfaces.util.DebugUtils.traceView(DebugUtils.java:139) at org.apache.myfaces.util.DebugUtils.traceView(DebugUtils.java:119) at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:363) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._invokeDoFilter(AdfFacesFilterImpl.java:356) at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._doFilterImpl(AdfFacesFilterImpl.java:325) at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl.doFilter(AdfFacesFilterImpl.java:190) at oracle.adf.view.faces.webapp.AdfFacesFilter.doFilter(AdfFacesFilter.java:87) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:44) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:39) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:159) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112) at java.lang.Thread.run(Thread.java:595) Caused by: java.lang.IllegalStateException: No active application scope at org.jboss.seam.core.Init.instance(Init.java:84) at org.jboss.seam.Component.getInstanceFromFactory(Component.java:1061) at org.jboss.seam.Component.getInstance(Component.java:1034) at org.jboss.seam.Component.getInstance(Component.java:1020) at org.jboss.seam.jsf.SeamVariableResolver.resolveVariable(SeamVariableResolver.java:43) at org.apache.myfaces.el.ValueBindingImpl$ELVariableResolver.resolveVariable(ValueBindingImpl.java:569) at org.apache.commons.el.NamedValue.evaluate(NamedValue.java:124) at org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:140) at org.apache.myfaces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:378) ... 38 more 14:19:13,995 DEBUG [org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager] Attempting to passivate; id=5c4om2l-qqny64-ei34tnw7-1-ei35c5fq-c 14:19:13,995 DEBUG [org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager] Saving session state to: C:\Java\Software\jboss-4.0.3\server\default\tmp\sessions\org.jboss.seam.example.issues.LoginBean-ei34zj0o-9\5c4om2l-qqny64-ei34tnw7-1-ei35c5fq-c.ser 14:19:14,015 INFO [STDOUT] Exception in thread "Timer-3" 14:19:14,015 INFO [STDOUT] javax.ejb.EJBException: Could not passivate; failed to save state; CausedByException is: org.jboss.seam.example.issues.LoginBean 14:19:14,015 INFO [STDOUT] at org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager.passivateSession(StatefulSessionFilePersistenceManager.java:333) 14:19:14,015 INFO [STDOUT] at org.jboss.ejb3.cache.simple.SimpleStatefulCache.passivate(SimpleStatefulCache.java:143) 14:19:14,015 INFO [STDOUT] at org.jboss.ejb3.cache.simple.SimpleStatefulCache$SessionTimeoutTask.run(SimpleStatefulCache.java:92) 14:19:14,015 INFO [STDOUT] at java.util.TimerThread.mainLoop(Timer.java:512) 14:19:14,015 INFO [STDOUT] at java.util.TimerThread.run(Timer.java:462) 14:19:14,015 INFO [STDOUT] java.io.NotSerializableException: org.jboss.seam.example.issues.LoginBean 14:19:14,015 INFO [STDOUT] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1075) 14:19:14,015 INFO [STDOUT] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291) 14:19:14,025 INFO [STDOUT] at org.jboss.aop.metadata.SimpleMetaData.writeExternal(SimpleMetaData.java:211) 14:19:14,025 INFO [STDOUT] at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1304) 14:19:14,025 INFO [STDOUT] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1282) 14:19:14,025 INFO [STDOUT] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073) 14:19:14,025 INFO [STDOUT] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291) 14:19:14,025 INFO [STDOUT] at java.rmi.MarshalledObject.<init>(MarshalledObject.java:92) 14:19:14,025 INFO [STDOUT] at org.jboss.ejb3.stateful.StatefulBeanContext.writeExternal(StatefulBeanContext.java:153) 14:19:14,025 INFO [STDOUT] at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1304) 14:19:14,025 INFO [STDOUT] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1282) 14:19:14,025 INFO [STDOUT] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073) 14:19:14,025 INFO [STDOUT] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291) 14:19:14,025 INFO [STDOUT] at org.jboss.ejb3.cache.simple.StatefulSessionFilePersistenceManager.passivateSession(StatefulSessionFilePersistenceManager.java:324) 14:19:14,025 INFO [STDOUT] at org.jboss.ejb3.cache.simple.SimpleStatefulCache.passivate(SimpleStatefulCache.java:143) 14:19:14,025 INFO [STDOUT] at org.jboss.ejb3.cache.simple.SimpleStatefulCache$SessionTimeoutTask.run(SimpleStatefulCache.java:92) 14:19:14,025 INFO [STDOUT] at java.util.TimerThread.mainLoop(Timer.java:512) 14:19:14,025 INFO [STDOUT] at java.util.TimerThread.run(Timer.java:462) 14:25:59,328 DEBUG [javax.faces.webapp.FacesServlet] service begin ...
Strange because the messages are displayed correctly and I still can navigate from login page to home page.
Just FYI, I'm using hibernate 3.1, Hibernate Annotation 3.1beta7, and Hibernate EntityManager 3.1beta5.
Do you have any comment/suggestion ? Do you want to give it a try ?
Thanks.