2015-08-12 39 views
6

Ho creato una semplice applicazione di test:Vaadin NON spingere disponibile con tomcat8 incorporato

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; 
    } 
} 

Quando inizio a questo da Eclipse, tutto funziona bene, ma quando esporto ad un barattolo eseguibile ed eseguirlo ottengo questo errore:

HTTP Stato 500 - com.vaadin.server.ServiceException: java.lang.IllegalStateException: push non è disponibile. Vedere i messaggi di registro precedenti per ulteriori informazioni.

Ecco l'intero stack di chiamate:

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. 
================================================================= 

Ho provato ad aggiungere javax.websocket-api-1.1.jar alle librerie, ma non è cambiato nulla, lo stesso errore ancora.

Non so dove sia il problema, forse ho bisogno di aggiungere qualcos'altro, ma al momento non so cosa.

EDIT:

Non faccio uso di Maven/Gradle, per il tomcat8 incorporato ho scaricato on tomcat8 website tutto il necessario, e per la guerra applicazione di test che ho usato uno dei miei progetti, lavorando bene con Tomcat8 non incorporato.

+0

Ci scusiamo per una domanda banale, ma hai aggiunto correttamente vaadin-push al tuo progetto (Maven, Gradle ...)? Se usi Maven, potresti darci anche un albero delle dipendenze. – jsosnowski

risposta

1

Penso che questo problema sia causato da qualsiasi libreria di Jetty inclusa in classpath. Potrebbero essere all'interno di qualsiasi altro java jar, quindi dovresti analizzare tutte le dipendenze della tua applicazione con qualche strumento (anche IDE integrato).

I miei sospetti si basano anche su Vaadin Configuration tutorial. Si prega di guardare lì - in particolare a Tomcat 8 section.

Modifica: quando si attiva Vaadin Push, consultare anche lo wiki ufficiale. Sono descritti tutti i cambiamenti che dovrebbero essere fatti nel progetto (dipendenze, annotazione UI, web.xml).

+0

Ho aggiunto tutti i vasi che ho nel progetto eclipse al jar. Ans l'applicazione sta funzionando bene nell'installazione di tomcat8. Quindi la configurazione push è buona:/ – Supamiu

+1

Ok, ho capito. Ho riprodotto il tuo problema. La mia applicazione push di esempio funziona perfettamente con Tomcat 8. Tuttavia, quando ho utilizzato il codice e ho provato a eseguirlo su Tomcat incorporato, non riesce (ma con qualche eccezione diversa). Era un problema di atmosfera. Non riesco a trovare nessuna soluzione finora. – jsosnowski