title: VAADIN Push not available with tomcat8 embedded
body: <p>I created a simple test application:</p>
  
  <pre><code>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;
    }
  }
  </code></pre>
  
  <p>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 :</p>
  
  <blockquote>
    <p>HTTP Status 500 - com.vaadin.server.ServiceException: java.lang.IllegalStateException: Push is not available. See previous log messages for more information.</p>
  </blockquote>
  
  <p>Here is the entire call stack : </p>
  
  <pre><code>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.&lt;init&gt;(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.&lt;init&gt;(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.&lt;init&gt;(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.&lt;init&gt;(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.&lt;init&gt;(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.
  =================================================================
  </code></pre>
  
  <p>I tried to add javax.websocket-api-1.1.jar to libraries but nothing changed, still same error.</p>
  
  <p>I don't know where is the problem, maybe I need to add something else, but at the moment I don't know what.</p>
  
  <p>EDIT:</p>
  
  <p>I don't use Maven/Gradle, for the tomcat8 embedded I downloaded <a href="https://tomcat.apache.org/download-80.cgi" rel="noreferrer">on tomcat8 website</a> everything needed, and for the test application war I used one of my projects, working fine with Tomcat8 non-embedded.</p>