Details
-
Type: Bug
-
Status: Closed
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: EE-1.8.2.GA_P03
-
Fix Version/s: EE-1.8.2.GA_P04
-
Component/s: Framework
-
Labels:None
-
Environment:iPlanet Web Server 7.0, AuctionMonitor
Description
When deploying AuctionMonitor to iPlanet Web Server 7.0, the following IllegalStateException is seen when accessing the application:
Caused by: java.lang.IllegalStateException: WEB4221: Cannot use request/response objects across multiple request processing threads
at com.sun.webserver.connector.nsapi.NSAPIConnector.jniSetResponseHeader(Native Method)
at com.sun.webserver.connector.nsapi.NSAPIResponse.addHeader(NSAPIResponse.java:229)
at org.apache.coyote.tomcat5.CoyoteResponseFacade.addHeader(CoyoteResponseFacade.java:492)
at com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.setHeader(ServletRequestResponse.java:266)
at com.icesoft.faces.webapp.http.common.standard.FixedXMLContentHandler.respond(FixedXMLContentHandler.java:45)
at com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:242)
at com.icesoft.faces.webapp.http.servlet.ThreadBlockingAdaptingServlet$ThreadBlockingRequestResponse.respondWith(ThreadBlockingAdaptingServlet.java:83)
at com.icesoft.faces.webapp.http.core.SendUpdatedViews.respondIfViewsAvailable(SendUpdatedViews.java:153)
... 24 more
Caused by: java.lang.IllegalStateException: WEB4221: Cannot use request/response objects across multiple request processing threads
at com.sun.webserver.connector.nsapi.NSAPIConnector.jniSetResponseHeader(Native Method)
at com.sun.webserver.connector.nsapi.NSAPIResponse.addHeader(NSAPIResponse.java:229)
at org.apache.coyote.tomcat5.CoyoteResponseFacade.addHeader(CoyoteResponseFacade.java:492)
at com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.setHeader(ServletRequestResponse.java:266)
at com.icesoft.faces.webapp.http.common.standard.FixedXMLContentHandler.respond(FixedXMLContentHandler.java:45)
at com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:242)
at com.icesoft.faces.webapp.http.servlet.ThreadBlockingAdaptingServlet$ThreadBlockingRequestResponse.respondWith(ThreadBlockingAdaptingServlet.java:83)
at com.icesoft.faces.webapp.http.core.SendUpdatedViews.respondIfViewsAvailable(SendUpdatedViews.java:153)
... 24 more
Issue Links
- blocks
-
ICE-7631 Add support for iplanet web server
- Open
Upon receiving a ping request for a particular User-Agent, the server now has two outstanding requests for this User-Agent: a ping request and a receive-updated-views request. What happens when a ping request is received is that a Pong command is added to the ViewQueue, and by doing this the listener of the ViewQueue gets executed. This results in a response being prepped for the receive-updated-views request. This means that the server assigned thread for handling the ping request is involved in prepping the response for the receive-updated-views request, even though it doesn't actually send the request. iPlanet doesn't allow this kind of behavior. In order to resolve this the ViewQueue is now created with an Executor. Based on the application server being used, this Executor is either the Executor created in the MainServlet in case iPlanet is used, or null in any other case. Now when the ViewQueue gets a command added, it now checks to see if the listener can be executed directly, thus on the same thread, or if it needs to use the Executor in order to use a Core Thread to execute the listener instead of the server assigned thread. Marking this one as FIXED.