Dont Push Ozone -- IllegalStateException

I believe I have installed Don’t Push Ozone correctly for my project, but when I run my app against Tomcat 8 and Safari, I get the following IllegalStateException in the Atmosphere code:

"Failed to determine responsewriter"

I looked at the Atmosphere source in debugger, and I see that the value for ‘transport’ variable is ‘null’ below. Wondering if anyone has ideas about what might be wrong?

[font=Courier New]

private GwtResponseWriterImpl createResponseWriter() throws IOException {

           ClientOracle clientOracle = GwtUtil.getClientOracle(atmResource.getRequest(), servlet.getServletContext());
           SerializationPolicy serializationPolicy = clientOracle == null ? GwtUtil.createSerializationPolicy() : null;

   String transport = atmResource.getRequest().getParameter("tr");
   if ("WebSocket".equals(transport)) {
       logger.debug("atmosphere-gwt Using websocket");
       return new WebsocketResponseWriter(this, serializationPolicy, clientOracle);
   } else if ("HTTPRequest".equals(transport)) {
       logger.debug("atmosphere-gwt Using XMLHttpRequest");
       return new HTTPRequestResponseWriter(this, serializationPolicy, clientOracle);
           } else if ("IFrame".equals(transport)) {
       logger.debug("atmosphere-gwt Using streaming IFrame");
       return new IFrameResponseWriter(this, serializationPolicy, clientOracle);
           } else if ("OperaEventSource".equals(transport)) {
       logger.debug("atmosphere-gwt Using Opera EventSource");
                   return new OperaEventSourceResponseWriter(this, serializationPolicy, clientOracle);
           } else if ("IEXDomainRequest".equals(transport)) {
       logger.debug("atmosphere-gwt Using IE XDomainRequest");
       return new IEXDomainRequestResponseWriter(this, serializationPolicy, clientOracle);
   } else if ("IEHTMLFile".equals(transport)) {
       logger.debug("atmosphere-gwt Using IE html file iframe");
                   return new IEHTMLFileResponseWriter(this, serializationPolicy, clientOracle);
           } else {
       throw new IllegalStateException("Failed to determine responsewriter");
   }
   }

[/font]

Nevermind. I was building the widgetset incorrectly. :slight_smile:

Hi,

Can you explain what was wrong with your widgetset?
I’ve encountered the same thing yet couldn’t resolve it.
It seems that this error occurs on the first application start and whenever I close the browser window with the application. The application does not call close() method this way.
On the other hand, during normal application usage, the push service works.


Art

Hi E H,

I’ve got a similar problem, can you please elaborate on what you did to fix this issue please?

Cheers,

Richard

Hi all,

I had this problem too, and it was a widget declaration problem :
Even if your widgetset compilation is well-done, don’t forget to declare this widgetset at Runtime (ie : in web.xml)
especially setting the init-param in you servlet declaration like this :

<servlet>
        <servlet-name>Vaadin Application Servlet</servlet-name>
        <servlet-class>org.vaadin.dontpush.server.DontPushOzoneServlet</servlet-class>
        <init-param>
                <description>Vaadin application class to start</description>
                <param-name>application</param-name>
                <param-value>path.to.your.Application</param-value>
        </init-param>
        <init-param>
                <description>Application widgetset</description>
                <param-name>widgetset</param-name>
                <param-value>your.widgetset.path.YourWidgetset</param-value>
        </init-param>
</servlet>

And to verify that your widget compilation is well-done (not completely unrelated with the subject),
just check in your target folder, WebContent/VAADIN/YourWidgetset/ directory should be populated with the gwt artefacts built.

I am facing issues while using following combination

  1. Atmosphere 0.8.6 jar
  2. Web Server-glassfish v3.1.2.2
  3. Browser - IE-8/IE9
  4. dontpush-ozone-addon-0.48 jar

By using above combination whenever a request or an event is triggered from browser/client-side then onRequest() of AtmosphereGWTHandler gets called.
And this method passes the call to doServerMessage() and this method reads request.getReader() and on the basis of this readed line call is forwarded either to

a) broadCastMessaege() ,or
b) disconnect().

if (request.getReader() == ‘c’ or ‘d’)
then call disconnect().
else
broadCastMessaege().

So whenever we request from IE8/9 then request.getReader() returns “cd”, while whenever the request is triggered from firefox/safari/chrome request.getReader() returns some useful information regarding client-side and hence this message get broadcasted and messages from IE8/9 get disconnected.

And this causes IE8/9 users to view only red coloured rotating wheel on the Right hand side of the browser.

Is this error is related to GWTUnit-cache generated under VAADIN/widgets??

Any suggestion over this will be helpful.

Thanks & Regards,
Akash

Hi,

It sounds to me like there is some issue with (gwt-)atmosphere and glassfish. I’m pretty sure I tried that combination at some point but it was at least one year ago - I guess there are new versions and regression since then.

I’m currently bit busy elsewhere, but Mark Thomas is currently working on an upgrade to atmosphere 1.0 which has huge pile of bugs fixed. There are some issues still, but on the other hand this particular bug might have been fixed. Can you build a version from the trunk and try with it?

cheers,
matti