2016-07-21 4 views
1

Ich habe meine Spring MVC-Konfiguration von XML zu JavaConfig und integrierten Websocket mit SockJS umgeschaltet.Spring: Servlet 3.1 + SockJS = Async-Unterstützung muss aktiviert sein

Mein Problem ist, dass die Anwendung mit Websocket und die Konfiguration funktioniert gut auf "localhost" (Tomcat 8.0.36). Aber wenn ich das War-Paket auf meinen Server hochlade (Tomcat 8.0.32), schlägt die Websocket-Verbindung mit dem folgenden Fehlercode fehl:

Fehler beim Öffnen der Sitzung; Die verschachtelte Ausnahme ist java.lang.IllegalArgumentException: Die Async-Unterstützung muss für ein Servlet und für alle Filter aktiviert werden, die an der asynchronen Anfrageverarbeitung beteiligt sind. Dies geschieht in Java-Code mithilfe der Servlet-API oder durch Hinzufügen von "true" zu Servlet- und Filterdeklarationen in web.xml. Außerdem müssen Sie einen Servlet 3.0+ Container verwenden] mit der Grundursache java.lang.IllegalArgumentException: Die Async-Unterstützung muss für ein Servlet und für alle Filter aktiviert werden, die an der asynchronen Anfrageverarbeitung beteiligt sind. Dies geschieht in Java-Code mithilfe der Servlet-API oder durch Hinzufügen von "true" zu Servlet- und Filterdeklarationen in web.xml. Außerdem müssen Sie einen Servlet 3.0+ Container verwenden

Ich bin mir nicht sicher, was der Grund für diese Situation ist.

unter meinem Initializer Siehe:

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected void customizeRegistration(ServletRegistration.Dynamic registration) { 
    registration.setInitParameter("dispatchOptionsRequest", "true"); 
    registration.setAsyncSupported(true); 
    } 


protected Class<?>[] getRootConfigClasses() { 
    return new Class[] { MyAppConfiguration.class, MyAppSecurityConfiguration.class }; 
} 

protected Class<?>[] getServletConfigClasses() { 
    return null; 
} 

protected String[] getServletMappings() { 
    return new String[]{"/"}; 
} 

protected Filter[] getServletFilters() { 

    CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); 
    characterEncodingFilter.setEncoding("UTF-8"); 

    return new Filter[] { characterEncodingFilter, 
          new DelegatingFilterProxy("springSecurityFilterChain").s}; 
} 

}

In MyAppConfiguration.class async wurde aktiviert "@EnableAsync":

@EnableWebMvc 
@EnableScheduling 
@EnableAsync 
@EnableCaching 
@ComponentScan(basePackages="...") 
@Configuration 
public class MyAppConfiguration extends WebMvcConfigurerAdapter { 

Im pom.xml laden i die javax. servlet-api

 <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.1.0</version> 
     <scope>provided</scope> 
    </dependency> 

Ich habe die SpringDocs überprüft aber keinen Grund gefunden, warum die Applikation nicht auf dem Server läuft, sondern auf localhost :-(

Auf meinem localhost greife ich direkt auf den Tomcat und über den AJP Connector auf den Server . Vielleicht muss etwas im AJP-Connector aktiviert sein, um eine asynchrone Anfrage zu unterstützen? Der AJP-Konnektor und Apache-Webserver war vorübergehend deaktiviert und ich mein Projekt mit dem Kater URL direkt zugegriffen wird (: 8080) .. aber die gleichen Fehler: -/

Antwort

0

Ich reparierte mein Problem ;-)

Nach dem Upgrade Mein Apache Tomcat von Version 8.0.32 bis 8.5.4 funktioniert jetzt. Ich bin in der Lage, mit Websockets zu kommunizieren und ajp zu benutzen. Bitte benutzen Sie nicht die 8.0.32 und wählen stattdessen> = 8.5.4.