To further summarize, I tried the following techniques to run ICEfaces 1.8.x on WebSphere Portal 7:
1) Include the JSF 1.2 libs that we release with ICEfaces in the .war file and set parent classloading to FIRST
Result: It appears to make an attempt to use the JSF jars included in the .war file:
[4/2/12 10:08:05:208 PDT] 00000043 config I Initializing Mojarra (1.2_15-b01-FCS) for context '/wps/icecompshow'
but has trouble processing a DTD file:
[4/2/12 10:08:05:317 PDT] 0000008e config W JSF1056: Unable to create InputSource for URL 'wsjar:file:/C:/IBM/WebSphere/wp_profile/installedApps/icesoftpc/icecompshow.ear/component-showcas.war/WEB-INF/lib/jsf-impl-1.2.jar!/com/sun/faces/web-facesconfig_1_1.dtd'.
...
[4/2/12 10:08:17:548 PDT] 00000043 webapp E com.ibm.ws.webcontainer.webapp.WebApp notifyServletContextCreated SRVE0283E: Exception caught while initializing context:
{0}
com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! Unexpected end of file from server
at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:214)
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:200)
...
Caused by: java.net.SocketException: Unexpected end of file from server
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:770)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:767)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1067)
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source)
at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)
at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at com.sun.faces.config.ConfigManager$ParseTask.getDocument(ConfigManager.java:445)
at com.sun.faces.config.ConfigManager$ParseTask.call(ConfigManager.java:415)
at com.sun.faces.config.ConfigManager$ParseTask.call(ConfigManager.java:372)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:315)
at java.util.concurrent.FutureTask.run(FutureTask.java:150)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:736)
2) Include the JSF 1.2 libs that we release with ICEfaces in the .war file and set parent classloading to LAST
Seems to do the same as #1 above.
The only apparently relevant information I could find is this bug report which was dismissed as unrelated to Eclipse and BIRT which makes sense as it's a WebSphere + JSF issue.
3) Do not include the JSF 1.2 libs that we release with ICEfaces but instead, set up a shared library of those jars and associate it with the application.
The initial deploy doesn't complain because it simply tries to use the built-in JSF to start up the application:
[4/2/12 11:21:24:064 PDT] 0000007d config I Initializing Sun's JavaServer Faces implementation (1.2_07-b03-FCS) for context '/wps/icecompshow'
To associate the shared library, you have to use the server admin (as opposed to the portal admin) but once that is done and the app restarts, I get the same issue as #1 and #2 above. On a hunch, I replaced the current version of JSF that we deploy with ICEfaces with the latest JSF 1.2 from the Mojarra just in case there was a possible corruption but the results were the same. I checked that the file indicated in the URL existed on the filesystem ('wsjar:file:/C:/IBM/WebSphere/wp_profile/installedApps/icesoftpc/icecompshow.ear/component-showcas.war/WEB-INF/lib/jsf-impl-1.2.jar!/com/sun/faces/web-facesconfig_1_1.dtd') and it does. So I'm at a loss to explain the problem.
4) In the end, the only way I could get it to work was to not include the JSF 1.2 libs that we release with ICEfaces and simply use the version of JSF 1.2 that is supplied with WebSphere Portal with the caveat being that the version of JSF supplied is a bit older than what we support in the release.
The adjustments and limitations for getting the sample portlets (Chat and Location) running on WebSphere Portal 7 are as follows:
a) Using WebSphere Portal V7 on ICEfaces EE 1.8.2 P03 requires a change to the header in the web.xml namespace. The required header is as follows:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
Once this is in things should work just fine.
b) There is currently a limitation with regards to RAD v 7.5.4 that requires portlets be deployable manually via the WebSphere Portal Administrative Console. At present portlets cannot be deployed directly from Rational Application Developer (RAD) v 7.5.4 This has to do with the way that the IDE's project-level JSF facets automatically inject additional configurations at deployment time and require the portlet to reside in an EAR. Once they deploy it appears the JSF versions are changed. All attempts to work around the JSF version problem using parent-last classloading and isolated library techniques documented in support of JSF 2.0 portlets / applications running on WebSphere have been unsuccessful. So until the issue can be resolved by IBM, portlet deployment must be handled through the administrative console.