Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Boot Websockets in Wildfly

Hi I need to deploy my Spring Boot app into Wildfly 8.1 and I'm getting the following exception:

Caused by: java.lang.RuntimeException: java.lang.ClassCastException: org.apache.tomcat.websocket.server.WsServerContainer cannot be cast to io.undertow.websockets.jsr.ServerWebSocketContainer at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:219) at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:87) at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.start(UndertowDeploymentService.java:72) at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar:1.2.2.Final] at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar:1.2.2.Final] ... 3 more Caused by: java.lang.ClassCastException: org.apache.tomcat.websocket.server.WsServerContainer cannot be cast to io.undertow.websockets.jsr.ServerWebSocketContainer at io.undertow.websockets.jsr.Bootstrap$WebSocketListener.contextInitialized(Bootstrap.java:69) at io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:173) at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:190) ... 7 more

It seems that my setup for websockets and messaging might be the culprit? I was looking at this https://github.com/joshlong/boot-examples/issues/2 And none of the proposed solutions seem to work for me. Here are the dependencies from my 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> 

I tried using the direct spring-boot-starter-websocket as well but get the same thing. Here is my websocket config too:

@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"); } } 

Thanks for taking the time to read this. Any help would me most appreciated. Also, this is my first boot application. :/

like image 308
Chris Stier Avatar asked Sep 11 '14 15:09

Chris Stier


People also ask

Does spring boot support WebSocket?

The Spring Framework provides support for using STOMP — a simple, messaging protocol originally created for use in scripting languages with frames inspired by HTTP. STOMP is widely supported and well suited for use over WebSocket and over the web.

What is enableStompBrokerRelay?

The enableStompBrokerRelay method returns a convenient Registration instance that exposes a fluent API. You can use this fluent API to configure your Broker relay: registry.

What is WebSocket message broker?

The MessageBroker WebSocket Subprotocol (MBWS) is a WebSocket Subprotocol used by messaging clients to send messages to, and receive messages from an internet message broker (herein called a message broker).


1 Answers

You need exclude 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> 
like image 93
jlgranda Avatar answered Sep 22 '22 23:09

jlgranda