2014-09-11 14 views
16

Hi Ho bisogno di implementare la mia primavera di avvio applicazione in wildfly 8.1 e sto ottenendo la seguente eccezione:primavera Boot WebSockets in wildfly

Causato da: java.lang.RuntimeException: java.lang.ClassCastException: org.apache.tomcat.websocket.server.WsServerContainer non può essere lanciato su io.undertow.websockets.jsr.ServerWebSocketContainer su io.undertow.servlet.core.DeploymentManagerImpl.deploy (DeploymentManagerImpl.java:219) su org.wildfly. extension.undertow.deployment.UndertowDeploymentService.startContext (UndertowDeploymentService.java:87) all'indirizzo org.wildfly.extension.undertow.deployment.UndertowDeploymentService.start (UndertowDeploymentService.java:72) in org.jboss.msc.service.ServiceControllerImpl $ StartTask.startService (ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar: 1.2.2.Final] presso org.jboss.msc.service .ServiceControllerImpl $ StartTask.run (ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar: 1.2.2.Final] ... 3 altro Causato da: java.lang.ClassCastException: org. apache.tomcat.websocket.server.WsServerContainer non può essere lanciato su io.undertow.websockets.jsr.ServerWebSocketContainer su io.undertow.websockets.jsr.Bootstrap $ WebSocketListener.contextInitialized (Bootstrap.java:69) su io.undertow. servlet.core.ApplicationListeners.contextInitialized (ApplicationListeners.java:173) su io.undertow.servlet.core.DeploymentManagerImpl.deploy (DeploymentManagerImpl.java:190) ... 7 altro

Sembra che il mio setup per websocket e messaggistica possa essere il colpevole? Stavo guardando questo https://github.com/joshlong/boot-examples/issues/2 E nessuna delle soluzioni proposte sembra funzionare per me. Qui ci sono le dipendenze dal mio pom:

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.1.6.RELEASE</version> 
</parent> 

<dependencies> 

    <!--Testing--> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.11</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpclient</artifactId> 
     <version>${apache.httpcomponents.version}</version> 
    </dependency> 

    <!-- Spring --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-tomcat</artifactId> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-actuator</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-websocket</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-messaging</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.thymeleaf</groupId> 
     <artifactId>thymeleaf-spring4</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
    </dependency> 

    <!--Database--> 
    <dependency> 
     <groupId>org.hsqldb</groupId> 
     <artifactId>hsqldb</artifactId> 
     <version>2.3.1</version> 
    </dependency> 
    <dependency> 
     <groupId>postgresql</groupId> 
     <artifactId>postgresql</artifactId> 
     <version>9.1-901.jdbc4</version> 
    </dependency> 
</dependencies> 

Ho provato ad utilizzare il direct primavera-boot-starter-websocket pure ma ottenere la stessa cosa. Ecco il mio websocket config troppo:

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer{ 

@Override 
public void configureMessageBroker(MessageBrokerRegistry registry) { 
    super.configureMessageBroker(registry); 
    registry.enableSimpleBroker("/ssp"); 
    registry.setApplicationDestinationPrefixes("/inc"); 
} 

@Override 
public void registerStompEndpoints(StompEndpointRegistry registry) { 
    registry.addEndpoint("/update/applications"); 
} 
} 

Grazie per aver il tempo di leggere questo. Qualsiasi aiuto mi sarebbe piaciuto di più. Inoltre, questa è la mia prima applicazione di avvio. :/

+0

mi è stato anche di fronte lo stesso problema, mentre costruire la guerra usando Gradle. Sono stato in grado di risolvere il problema usando 'providedCompile' per' spring-boot-starter-tomcat' invece di 'compile'. –

risposta

3

Non sono sicuro, ma il vostro POM intorno WebSockets dovrebbe essere come questo:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-websocket</artifactId> 
</dependency> 

<dependency> 
    <groupId>org.apache.tomcat.embed</groupId> 
    <artifactId>tomcat-embed-websocket</artifactId> 
    <scope>provided</scope> 
</dependency> 

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-tomcat</artifactId> 
    <scope>provided</scope> 
</dependency> 

spring-messaging, spring-websocket, jackson-databind, spring-boot-starter-web sono ridondanti.

C'è anche spring-boot-starter-thymeleaf.

Tuttavia, penso che la causa principale sia tomcat-embed-websocket.

+0

Grazie mille per la risposta. Ho cambiato il mio pom per eliminare i deps ridondanti e ho aggiunto tomcat-embed-websocket ma sto ancora ricevendo l'eccezione di cui sopra. Immagino che il container si aspetti l'implementazione del socket Web di undertow? Perché la mia app di avvio a molla tenta di utilizzare undertow quando l'avvio dovrebbe controllare l'intero contenitore, no? –

+0

Ovviamente no. Spring si limita a delegare all'implementazione del contenitore di destinazione, simile a JTA. Dovresti controllare il classpath della tua app (WEB-INF/lib?) Per i jar Tomcat e vedere quali deps dovrebbero essere esclusi. –

+0

Arte, grazie mille! Intellij non stava sincronizzando le mie libs. Noob errore da parte mia. Tuttavia, ho dovuto aggiungere nuovamente la messaggistica di primavera. Penso di averne bisogno direttamente per l'annotazione MessageMapping nel mio controller. Ma comunque, sto bene ora. Grazie ancora! –

6

primavera-boot-starter-web e la primavera-boot-starter-websocket di default include primavera-boot-starter-Tomcat in modo esclude il gatto, come qui di seguito

 <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
     <version>${spring-boot.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-tomcat</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-websocket</artifactId> 
     <version>${spring-boot.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-tomcat</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

e comprendono risacca, assicurarsi il tomcat non esiste dove nel classpath.

31

È necessario escludere tomcat-embed-websocket

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
     <exclusions> 
      <exclusion> 
       <groupId>org.apache.tomcat.embed</groupId> 
       <artifactId>tomcat-embed-websocket</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
+1

Questo funzionerà per me –

1

Utilizzare il seguente comando per trovare tutte le dipendenze che comprende spring-boot-starter-tomcat:

mvn dependency:tree -Dincludes=org.springframework.boot:spring-boot-starter-tomcat 

Escludi Tomcat avviamento da tutte le dipendenze elencate da questo comando.

Dopo di che, potrebbe essere necessario aggiungere javax.servlet-api come una dipendenza previsto:

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

Gradle utenti con questo problema: controllare i commenti su questo biglietto: https://github.com/spring-projects/spring-boot/issues/6166

Problemi correlati