Details
-
Type: Bug
-
Status: Closed
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: 3.0.RC2
-
Fix Version/s: 3.0
-
Component/s: Framework
-
Labels:None
-
Environment:ICEfaces 3 portal portlet ICEpush
-
Affects:Documentation (User Guide, Ref. Guide, etc.), Sample App./Tutorial, Compatibility/Configuration
-
Workaround Exists:Yes
-
Workaround Description:
Description
In testing our ACE Showcase portlets on Liferay 6.1, I'm finding that an aspect of ICEpush is failing in the following way:
Caused by: java.lang.UnsupportedOperationException
at org.icefaces.impl.push.servlet.ProxyHttpServletRequest.(ProxyHttpServletRequest.java:81)
at org.icepush.servlet.AsyncAdaptingServlet.service(AsyncAdaptingServlet.java:42)
at org.icepush.servlet.EnvironmentAdaptingServlet.service(EnvironmentAdaptingServlet.java:48)
at org.icepush.servlet.PathDispatcher.service(PathDispatcher.java:39)
at org.icepush.servlet.BrowserDispatcher$BrowserEntry.service(BrowserDispatcher.java:105)
at org.icepush.servlet.BrowserDispatcher.service(BrowserDispatcher.java:44)
at org.icepush.servlet.PathDispatcher.service(PathDispatcher.java:39)
at org.icepush.servlet.MainServlet.service(MainServlet.java:90)
The ProxyHttpServletRequest class is used as a wrapper to protect certain framework calls from having to do portlet-specific handling. Instead, the proxy exposes the full HttpServletRequest API but only implements that stuff we need. Apparently we need the isAsyncSupported() method to return something for portlets. From what I can gather, the Portlet API does not expose any of the various *Async* methods that are part of the Servlet 3.0 spec, so our options are:
Short-term:
1) Change the proxies method implementation from:
public boolean isAsyncSupported(){
log.severe("ProxyHttpServletRequest unsupported operation");
if (true) throw new UnsupportedOperationException();
return false;
}
to always return "false" for portlets when checking whether Async is supported.
public boolean isAsyncSupported(){
log.info("Asynchronous servlet API not currently supported in portlets");
return false;
}
2) Add an existing context parameter to all portlet examples to prevent the ICEpush from even checking:
<context-param>
<param-name>org.icepush.useAsyncContext</param-name>
<param-value>false</param-value>
</context-param>
Long-term:
I assume somewhere along the way that Async support in portlets would be desirable so we'd need to somehow provide that information in a portal environment in a non-standard way until it's available in a future portlet API.
Caused by: java.lang.UnsupportedOperationException
at org.icefaces.impl.push.servlet.ProxyHttpServletRequest.(ProxyHttpServletRequest.java:81)
at org.icepush.servlet.AsyncAdaptingServlet.service(AsyncAdaptingServlet.java:42)
at org.icepush.servlet.EnvironmentAdaptingServlet.service(EnvironmentAdaptingServlet.java:48)
at org.icepush.servlet.PathDispatcher.service(PathDispatcher.java:39)
at org.icepush.servlet.BrowserDispatcher$BrowserEntry.service(BrowserDispatcher.java:105)
at org.icepush.servlet.BrowserDispatcher.service(BrowserDispatcher.java:44)
at org.icepush.servlet.PathDispatcher.service(PathDispatcher.java:39)
at org.icepush.servlet.MainServlet.service(MainServlet.java:90)
The ProxyHttpServletRequest class is used as a wrapper to protect certain framework calls from having to do portlet-specific handling. Instead, the proxy exposes the full HttpServletRequest API but only implements that stuff we need. Apparently we need the isAsyncSupported() method to return something for portlets. From what I can gather, the Portlet API does not expose any of the various *Async* methods that are part of the Servlet 3.0 spec, so our options are:
Short-term:
1) Change the proxies method implementation from:
public boolean isAsyncSupported(){
log.severe("ProxyHttpServletRequest unsupported operation");
if (true) throw new UnsupportedOperationException();
return false;
}
to always return "false" for portlets when checking whether Async is supported.
public boolean isAsyncSupported(){
log.info("Asynchronous servlet API not currently supported in portlets");
return false;
}
2) Add an existing context parameter to all portlet examples to prevent the ICEpush from even checking:
<context-param>
<param-name>org.icepush.useAsyncContext</param-name>
<param-value>false</param-value>
</context-param>
Long-term:
I assume somewhere along the way that Async support in portlets would be desirable so we'd need to somehow provide that information in a portal environment in a non-standard way until it's available in a future portlet API.
Issue Links
- is duplicated by
-
ICE-7628 Using chat portlet in Liferay portal results in UnsupportedOperationException
- Closed
The reason that this has just surfaced now is that Liferay (and the other portal containers we've tested against) have not typically supported the Servlet 3.0 spec. The checking that we do to see if the Servlet 3 async support is present won't currently work with portals as the portlet API doesn't expose the required methods. So in the short term, the context parameter can be used.