I'm installing my app on the websphere application server, Version 6.1 After having issues of both adf and myfaces not working, I came accross this link which helped me somewhat. http://wiki.apache.org/myfaces/Websphere_Installation .
By "not working" I mean that my jsp would have <h:commandLink>'s and <af:commandButton/> however the html was never actually generated. (You could view the pages source and the resulting html page was blank).
After following those instructions, ADF components are correctly rendered, and the html works. However, I can not use any <h:> or <h:> components.
Keep in mind, every single part of this used to work while using Tomcat (I think it was 5.5, not 6).
faces-config-app.xml (our replacement for faces-config).
<?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 wide settings **************** -->
<application>
<!-- Spring resolve allows access to spring managed beans from <managed-bean> tags -->
<variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver>
<!-- Local setup -->
<locale-config>
<default-locale>en</default-locale>
<supported-locale>en</supported-locale>
</locale-config>
<!-- Message bundle base name -->
<message-bundle>messages</message-bundle>
<!-- Use the ADF Faces render kit -->
<default-render-kit-id>oracle.adf.core</default-render-kit-id>
</application>
<lifecycle>
<phase-listener id="responseHeaderController">com.unyric.cias.cm.web.util.HttpResponseHeaderController</phase-listener>
</lifecycle>
</faces-config>
web.xml (Yes there is a lot of extra things in there such as application context params, but I wanted to paste the whole thing. Please bear with me).
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" 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">
<display-name>CIAS Case Management Web</display-name>
<context-param>
<description>JSF state setting: Keep state of views on client</description>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<description>JSF configuration files</description>
<param-name>javax.faces.CONFIG_FILES</param-name>
<!-- faces-config.xml contains applicaiton level configuration
faces-config-nav.xml contains screen flow configuration
faces-config-beans.xml contains managed bean definitions -->
<param-value>/WEB-INF/faces-config-app.xml,/WEB-INF/faces-config-nav.xml,/WEB-INF/faces-config-beans.xml</param-value>
</context-param>
<context-param>
<description>Spring configuration files</description>
<param-name>contextConfigLocation</param-name>
<!-- presentationContext.xml contains presentation tier object configuration
applicationContext.xml contains Service & Dao object configuration as well as transaction demarcation
securityContext.xml contains Acegi Security configuration
hibernate.cfg.xml contains Hibernate specific configuration -->
<param-value>/WEB-INF/presentationContext.xml classpath*:spring/applicationContext.xml classpath*:spring/validationContext.xml classpath*:spring/securityContext.xml classpath*:spring/hibernate.cfg.xml</param-value>
</context-param>
<context-param>
<description>Validates JSF configuration files on startup</description>
<param-name>org.apache.myfaces.validate</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<description>Timmer Setting for Case Queue screen</description>
<param-name>pollingTimer</param-name>
<!-- Units are milliseconds -->
<param-value>60000</param-value>
</context-param>
<context-param>
<description>Maximum number of rows shown in tables.</description>
<param-name>tableRowsPerPage</param-name>
<param-value>25</param-value>
</context-param>
<servlet>
<description>JSF controller</description>
<servlet-name>FacesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Requests handled by JSF -->
<servlet-mapping>
<servlet-name>FacesServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet>
<description>Serves up ADF Faces resources</description>
<servlet-name>AdfResourceServlet</servlet-name>
<servlet-class>oracle.adf.view.faces.webapp.ResourceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AdfResourceServlet</servlet-name>
<url-pattern>/adf/*</url-pattern>
</servlet-mapping>
<listener>
<description>Initializes Spring on application startup.</description>
<display-name>Spring context loader</display-name>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<description>Enables Acegi Security framework integration. Acegi is used to secure services.
Standard J2EE is used to secure web requests.</description>
<filter-name>AcegiFilterChainProxy</filter-name>
<filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
<init-param>
<param-name>targetClass</param-name>
<param-value>org.acegisecurity.util.FilterChainProxy</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>AcegiFilterChainProxy</filter-name>
<servlet-name>FacesServlet</servlet-name>
</filter-mapping>
<filter>
<description>Pre-processes requests to enable MyFaces extensions</description>
<filter-name>MyFacesExtensionsFilter</filter-name>
<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
<init-param>
<!-- Set the size limit for uploaded files.
Format: 10 - 10 bytes
10k - 10 KB
10m - 10 MB
1g - 1 GB
-->
<param-name>uploadMaxFileSize</param-name>
<param-value>6m</param-value>
</init-param>
<init-param>
<param-name>uploadThresholdSize</param-name>
<param-value>100k</param-value>
</init-param>
</filter>
<!-- MyFaces extension mapping for adding <script/>, <link/>, and other resource tags to JSF-pages -->
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<servlet-name>FacesServlet</servlet-name>
</filter-mapping>
<!-- MyFaces extension mapping for serving page-independent resources (javascript, stylesheets, images, etc.) -->
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<url-pattern>/faces/myFacesExtensionResource/*</url-pattern>
</filter-mapping>
<filter>
<description>Pre-processes requests to enable ADF Faces functionality</description>
<filter-name>AdfFacesFilter</filter-name>
<filter-class>oracle.adf.view.faces.webapp.AdfFacesFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AdfFacesFilter</filter-name>
<servlet-name>FacesServlet</servlet-name>
</filter-mapping>
<!-- Sitemesh Template Filter -->
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Keep Hibernate sessions open until request completes. This allows lazy loading
of data in all tiers. -->
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value>ciasSessionFactory</param-value>
</init-param>
<init-param>
<param-name>singleSession</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<servlet-name>FacesServlet</servlet-name>
</filter-mapping>
<!-- The application automatically sends requests at timed intervals. This causes
the standard J2EE session to be refreshed at the timed intervals and thus it will
never timeout. This filter is used to distinguish between user prompted and
automatic requests. -->
<filter>
<filter-name>SessionTimeout Filter</filter-name>
<filter-class>com.unyric.cias.cm.web.filter.SessionTimeoutFilter</filter-class>
<init-param>
<!-- URL to be displayed after session timeout -->
<param-name>redirectUrl</param-name>
<param-value>timeOut.jsp</param-value>
</init-param>
<init-param>
<param-name>sessionTimeout</param-name>
<!-- Units are in minutes -->
<param-value>20</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SessionTimeout Filter</filter-name>
<url-pattern>/secure/*</url-pattern>
</filter-mapping>
<!-- Session Timeout (in minutes)
We are essentially disabling container session
handling in favor of SessionTimout Filter -->
<session-config>
<session-timeout>99</session-timeout>
</session-config>
<!-- Security Configuration -->
<security-constraint>
<web-resource-collection>
<web-resource-name>FacesServlet security</web-resource-name>
<url-pattern>*.do</url-pattern>
<!-- No <http-method> tag implies all methods -->
</web-resource-collection>
<web-resource-collection>
<web-resource-name>View security</web-resource-name>
<url-pattern>/secure/*</url-pattern>
<!-- No <http-method> tag implies all methods -->
</web-resource-collection>
<auth-constraint>
<description>Allow any authenticated user</description>
<role-name>*</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>CIAS-CM</realm-name>
</login-config>
<security-role>
<!-- Roles recognized by Case Management. -->
<!-- EXACT NAMES MUST BE COORDINATED WITH CHOICEPOINT -->
<role-name>case</role-name>
</security-role>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- CIAS CM Database -->
<resource-ref>
<res-ref-name>jdbc/cias</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<!-- CIAS Error Handling -->
<error-page>
<error-code>500</error-code>
<location>/secure/errorPage.jsp</location>
</error-page>
<error-page>
<exception-type>javax.faces.FacesException</exception-type>
<location>/secure/errorPage.jsp</location>
</error-page>
</web-app>
Does anyone have any suggestions? Telling websphere to load the web-inf\lib directory before the AppServer\lib directory seems to have somewhat worked, but not completely.
On a side note, if I have a page such as (ignoring the extra h, f and t declarations)
<%@ taglib prefix="h"uri="http://java.sun.com/jsf/html" %>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
<%@ taglib prefix="t" uri="http://myfaces.apache.org/tomahawk" %>
<%@ taglib prefix="af" uri="http://xmlns.oracle.com/adf/faces" %>
<f:view>
<af:document>
<af:form>
<af:outputText value="hello2"/>
<af:commandLink id="button" action="#{exploreCaseListAction.promptPersonalQueue}" text="Login"/>
</af:form>
</af:document>
</f:view>
When I click on the commandLink button, I receive an error that states
java.lang.ClassCastException: org.apache.xalan.processor.TransformerFactoryImpl incompatible with javax.xml.transform.TransformerFactory
at javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
at com.ibm.ws.jsp.translator.visitor.validator.PageDataImpl._getInputStream(PageDataImpl.java:125)
at com.ibm.ws.jsp.translator.visitor.validator.PageDataImpl.getInputStream(PageDataImpl.java:117)
at org.apache.taglibs.standard.tlv.JstlBaseTLV.validate(JstlBaseTLV.java:156)
at org.apache.taglibs.standard.tlv.JstlCoreTLV.validate(JstlCoreTLV.java:96)
at com.ibm.ws.jsp.translator.visitor.validator.ValidateVisitor.validateTagLib(ValidateVisitor.java:988)
at com.ibm.ws.jsp.translator.visitor.validator.ValidateVisitor.visitJspRootStart(ValidateVisitor.java:467)
at com.ibm.ws.jsp.translator.visitor.JspVisitor.processJspElement(JspVisitor.java:138)
at com.ibm.ws.jsp.translator.visitor.JspVisitor.visit(JspVisitor.java:121)
at com.ibm.ws.jsp.translator.JspTranslator.processVisitors(JspTranslator.java:121)
at com.ibm.ws.jsp.translator.utils.JspTranslatorUtil.translateJsp(JspTranslatorUtil.java:181)
at com.ibm.ws.jsp.translator.utils.JspTranslatorUtil.translateJspAndCompile(JspTranslatorUtil.java:83)
at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.translateJsp(AbstractJSPExtensionServletWrapper.java:349)
at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper._checkForTranslation(AbstractJSPExtensionServletWrapper.java:317)
at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.checkForTranslation(AbstractJSPExtensionServletWrapper.java:226)
at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.handleRequest(AbstractJSPExtensionServletWrapper.java:131)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:308)
at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:416)
at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:234)
at oracle.adfinternal.view.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:157)
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:384)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:138)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:966)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:907)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:145)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._invokeDoFilter(AdfFacesFilterImpl.java:367)
at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._doFilterImpl(AdfFacesFilterImpl.java:336)
at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl.doFilter(AdfFacesFilterImpl.java:196)
at oracle.adf.view.faces.webapp.AdfFacesFilter.doFilter(AdfFacesFilter.java:87)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:264)
at com.unyric.cias.cm.web.filter.ThreadContextSessionIntegrationFilter.doFilter(ThreadContextSessionIntegrationFilter.java:46)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at com.unyric.cias.cm.web.filter.CiasIntegrationFilter.doFilter(CiasIntegrationFilter.java:112)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:193)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:148)
at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
I believe they are related, though I can't 100% say for sure. Any thoughts?