Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VAADIN Push not available with tomcat8 embedded

I created a simple test application:

import java.util.logging.Logger;

import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;

public class Main {
  private final static Logger LOGGER = Logger.getLogger(Main.class.getName());
  private final static String mWorkingDir = System.getProperty("java.io.tmpdir");
  private static Tomcat tomcat = null;

  public static void main(String[] args) {

    tomcat = new Tomcat();
    tomcat.setPort(8080);
    tomcat.setBaseDir(mWorkingDir);
    tomcat.getHost().setAppBase(mWorkingDir);
    tomcat.getHost().setAutoDeploy(true);
    tomcat.getHost().setDeployOnStartup(true);

    try {
      tomcat.start();
    } catch (LifecycleException e) {
      LOGGER.severe("Tomcat could not be started.");
      e.printStackTrace();
    }
    LOGGER.info("Tomcat started on " + tomcat.getHost());

    // Alternatively, you can specify a WAR file as last parameter in the following call e.g. "C:\\Users\\admin\\Desktop\\app.war"    
    Context appContext = Main.getTomcat().addWebapp(Main.getTomcat().getHost(), "/app", System.getProperty("user.dir")+"\\Whys.war");
    LOGGER.info("Deployed " + appContext.getBaseName() + " as " + appContext.getBaseName());

    tomcat.getServer().await();
  }

  public static Tomcat getTomcat(){
      return tomcat;
  }
}

When I start this from eclipse, everything works fine, but when I export this to a runnable jar and run it I get this error :

HTTP Status 500 - com.vaadin.server.ServiceException: java.lang.IllegalStateException: Push is not available. See previous log messages for more information.

Here is the entire call stack :

GRAVE: Failed to initialize Atmosphere Framework
java.lang.IllegalArgumentException: Unable to createclass org.atmosphere.container.JSR356AsyncSupport
        at org.atmosphere.cpr.DefaultAsyncSupportResolver.newCometSupport(DefaultAsyncSupportResolver.java:229)
        at org.atmosphere.cpr.DefaultAsyncSupportResolver.resolveWebSocket(DefaultAsyncSupportResolver.java:288)
        at org.atmosphere.cpr.DefaultAsyncSupportResolver.resolve(DefaultAsyncSupportResolver.java:274)
        at org.atmosphere.cpr.AtmosphereFramework.autoDetectContainer(AtmosphereFramework.java:1591)
        at org.atmosphere.cpr.AtmosphereFramework.init(AtmosphereFramework.java:717)
        at org.atmosphere.cpr.AtmosphereFramework.init(AtmosphereFramework.java:614)
        at com.vaadin.server.communication.PushRequestHandler.<init>(PushRequestHandler.java:121)
        at com.vaadin.server.VaadinServletService.createRequestHandlers(VaadinServletService.java:82)
        at com.vaadin.server.VaadinService.init(VaadinService.java:186)
        at com.vaadin.server.VaadinServlet.createServletService(VaadinServlet.java:258)
        at com.vaadin.server.VaadinServlet.init(VaadinServlet.java:164)
        at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1231)
        at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)
        at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:817)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1527)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1484)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at org.atmosphere.cpr.DefaultAsyncSupportResolver.newCometSupport(DefaultAsyncSupportResolver.java:225)
        ... 28 more
Caused by: java.lang.IllegalStateException: ServerContainer is null
        at org.atmosphere.container.JSR356AsyncSupport.<init>(JSR356AsyncSupport.java:43)
        ... 33 more

ao¹t 12, 2015 8:32:04 PM com.vaadin.server.VaadinServletService createRequestHandlers
AVERTISSEMENT: Error initializing Atmosphere. Push will not work.
com.vaadin.server.ServiceException: Atmosphere init failed
        at com.vaadin.server.communication.PushRequestHandler.<init>(PushRequestHandler.java:129)
        at com.vaadin.server.VaadinServletService.createRequestHandlers(VaadinServletService.java:82)
        at com.vaadin.server.VaadinService.init(VaadinService.java:186)
        at com.vaadin.server.VaadinServlet.createServletService(VaadinServlet.java:258)
        at com.vaadin.server.VaadinServlet.init(VaadinServlet.java:164)
        at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1231)
        at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)
        at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:817)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1527)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1484)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Unknown Source)
Caused by: javax.servlet.ServletException: java.lang.IllegalArgumentException: Unable to createclass org.atmosphere.container.JSR356AsyncSupport
        at org.atmosphere.cpr.AtmosphereFramework.init(AtmosphereFramework.java:741)
        at org.atmosphere.cpr.AtmosphereFramework.init(AtmosphereFramework.java:614)
        at com.vaadin.server.communication.PushRequestHandler.<init>(PushRequestHandler.java:121)
        ... 22 more
Caused by: java.lang.IllegalArgumentException: Unable to createclass org.atmosphere.container.JSR356AsyncSupport
        at org.atmosphere.cpr.DefaultAsyncSupportResolver.newCometSupport(DefaultAsyncSupportResolver.java:229)
        at org.atmosphere.cpr.DefaultAsyncSupportResolver.resolveWebSocket(DefaultAsyncSupportResolver.java:288)
        at org.atmosphere.cpr.DefaultAsyncSupportResolver.resolve(DefaultAsyncSupportResolver.java:274)
        at org.atmosphere.cpr.AtmosphereFramework.autoDetectContainer(AtmosphereFramework.java:1591)
        at org.atmosphere.cpr.AtmosphereFramework.init(AtmosphereFramework.java:717)
        ... 24 more
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at org.atmosphere.cpr.DefaultAsyncSupportResolver.newCometSupport(DefaultAsyncSupportResolver.java:225)
        ... 28 more
Caused by: java.lang.IllegalStateException: ServerContainer is null
        at org.atmosphere.container.JSR356AsyncSupport.<init>(JSR356AsyncSupport.java:43)
        ... 33 more

ao¹t 12, 2015 8:33:08 PM com.vaadin.server.VaadinServletService ensurePushAvailable
AVERTISSEMENT:
=================================================================
Atmosphere could not be loaded. When using push with Vaadin, the
Atmosphere framework must be present on the classpath.
If using a dependency management system, please add a dependency
to vaadin-push.
If managing dependencies manually, please make sure Atmosphere
2.1.2.vaadin6 is included on the classpath.
Will fall back to using PushMode.DISABLED.
=================================================================

I tried to add javax.websocket-api-1.1.jar to libraries but nothing changed, still same error.

I don't know where is the problem, maybe I need to add something else, but at the moment I don't know what.

EDIT:

I don't use Maven/Gradle, for the tomcat8 embedded I downloaded on tomcat8 website everything needed, and for the test application war I used one of my projects, working fine with Tomcat8 non-embedded.

like image 446
Supamiu Avatar asked Aug 12 '15 18:08

Supamiu


1 Answers

I think this issue is caused by any Jetty libraries included in classpath. They could be inside any other java jar - so you should analyse all dependencies of your application by some tool (even IDE integrated).

My suspicions is also based on Vaadin Configuration tutorial. Please look there - especially at Tomcat 8 section.

Edit: When enabling Vaadin Push, please look also at official wiki. There are described all changes which should be made in project (dependencies, UI annotation, web.xml).

like image 171
jsosnowski Avatar answered Jan 11 '23 14:01

jsosnowski