Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AtmosphereFramework exception java.lang.IllegalStateException: Not supported. #43

Open
FarzinZaker opened this issue Jul 8, 2013 · 4 comments

Comments

@FarzinZaker
Copy link

I am using Events-Push in my grails application. every thing is fine when running application from my IDE (IntelliJ Idea). but when I deploy it to tomcat (7.0) following exception raises:

2013-07-08 09:07:19,118 [ajp-nio-8009-exec-13] ERROR cpr.AtmosphereFramework  - AtmosphereFramework exception
java.lang.IllegalStateException: Not supported.
    at org.atmosphere.cpr.AtmosphereRequest.startAsync(AtmosphereRequest.java:594)
    at org.atmosphere.container.Servlet30CometSupport.suspend(Servlet30CometSupport.java:138)
    at org.atmosphere.container.Servlet30CometSupport.service(Servlet30CometSupport.java:104)
    at org.atmosphere.container.Tomcat7Servlet30SupportWithWebSocket.doService(Tomcat7Servlet30SupportWithWebSocket.java:65)
    at org.atmosphere.container.TomcatWebSocketUtil.doService(TomcatWebSocketUtil.java:87)
    at org.atmosphere.container.Tomcat7Servlet30SupportWithWebSocket.service(Tomcat7Servlet30SupportWithWebSocket.java:61)
    at org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:1571)
    at org.atmosphere.cpr.AtmosphereServlet.doPost(AtmosphereServlet.java:176)
    at org.atmosphere.cpr.AtmosphereServlet.doGet(AtmosphereServlet.java:162)
    at com.googlecode.psiprobe.Tomcat70AgentValve.invoke(Tomcat70AgentValve.java:38)
    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:662)

myservlet config in web.xml is:

<servlet>
        <description>MeteorServlet</description>
        <servlet-name>MeteorServlet</servlet-name>
        <servlet-class>org.grails.plugin.platform.events.push.GrailsMeteorServlet</servlet-class>
        <init-param>
            <param-name>org.atmosphere.cpr.broadcaster.shareableThreadPool</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>org.atmosphere.cpr.broadcaster.maxProcessingThreads</param-name>
            <param-value>20</param-value>
        </init-param>
        <init-param>
            <param-name>org.atmosphere.cpr.broadcaster.maxAsyncWriteThreads</param-name>
            <param-value>20</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>

usage is

var receivedOrders = new Array();
    var grailsEvents = new grails.Events("${rootPath}",
    {
        transport: 'sse',
        fallbackTransport: 'long-polling',
        timeout: 10000,
        onMessage: function(data){
            try{
                if(data.responseBody.length > 0){
                    var order = jQuery.parseJSON(data.responseBody).body;
                    if(order.id){
                        if (receivedOrders.indexOf(order.id) == -1) {
                        receivedOrders[receivedOrders.length] = order.id;
                        var url = "<g:createLink controller="orderAdministration" action="orderNotification"/>";
                        $.ajax({
                            type: "POST",
                            url: url,
                            data: { id: order.id }
                        }).done(function (response) {
                                    if (response != "0") {
                                        $.msgGrowl({
                                            type: 'info', sticky: true, 'title': '${message(code: 'order.notification.title')}', 'text': response, lifetime: 5000
                                        });
                                    }
                                });
                        }
                    }
                }
            } catch (e) {
                // Atmosphere sends commented out data to WebKit based browsers
            }
        }
    });

    grailsEvents.on('order_event', function(data){});

it seems some thing is wrong with tomcat configuration. any idea?

@jpboudreault
Copy link

Did you try with the default transport and fallbackTransport? Could you post your server.xml? Also, check the exact version of tomcat you are using since older 7.0.XXX didn't implement servlet v3.0.

@FarzinZaker
Copy link
Author

I have tested it. but does not work.

the problem occured because I have provided options in grails.Events.
by changing to this, exception solved.

var receivedOrders = new Array();
    var grailsEvents = new grails.Events("${rootPath}");

    function handleOrderEvent(data){
        try{
            if(data.id){
                if (receivedOrders.indexOf(data.id) == -1) {
                    receivedOrders[receivedOrders.length] = data.id;
                    var url = "<g:createLink controller="orderAdministration" action="orderNotification"/>";
                    $.ajax({
                        type: "POST",
                        url: url,
                        data: { id: data.id }
                    }).done(function (response) {
                        if (response != "0") {
                            $.msgGrowl({
                                type: 'info', sticky: true, 'title': '${message(code: 'order.notification.title')}', 'text': response, lifetime: 5000
                            });
                        }
                    });
                }
            }
        }catch (e) {
        // Atmosphere sends commented out data to WebKit based browsers
        }
    }

    grailsEvents.on('order_event', handleOrderEvent, {transport:'long-polling', fallbackTransport:'polling'});

but still no event is propagated to client!

I have an apache webserver in front of tomcat. events fired in services but not in javascript.

@jpboudreault
Copy link

I cannot help you since I never used long-polling. I can tell you that I had trouble with an apache webserver in front of tomcat with websockets. I had to switch to Nginx or allow access to the tomcat directly.

@confile
Copy link

confile commented Aug 3, 2013

I have the same issue. Would be interested in a solution. I use Tomcat 7.0.42.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants