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 isAsyncSupported method has been changed to always return false. This class is only used in portlets and the current behaviour is that, when running in portlets, the Servlet 3.0 async mode is note supported as there is no standard way to execute the methods from the Portlet API. This may change in the future or we may do something ourselves to make the information available.