와일드플라이 스프링 부트 웹소켓
안녕하세요. Wildfly 8.1에 Spring Boot 앱을 도입해야 하는데 다음과 같은 예외가 발생합니다.
원인: java.lang.Runtime Exception: java.lang.ClassCastException: org.apache.tomcat.websocket.server.WsServerContainer를 io.undertow에 캐스팅할 수 없습니다.websockets.jsr.io.undertow.servlet.core의 ServerWebSocketContainer.org.wildfly.extension.undertow.deploy(DeploymentManagerImpl.java:219).Undertow Deployment Service.startContext(Undertow Deployment Service).org.wildfly.display.undertow.deployment의 java:87)를 참조해 주세요.Undertow Deployment Service.start(Undertow Deployment Service).org.jboss.msc.service의 java:72)를 참조해 주세요.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2]Final.jar: 1.2.2.Final] org.jboss.msc.service로 송신됩니다.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2]Final.jar: 1.2.2.Final] ... 3 기타 원인: java.lang.ClassCastException: org.apache.tomcat.websocket.server.WsServerContainer를 io.undertow에 캐스팅할 수 없습니다.websockets.jsr.io.undertow의 Server Web Socket Container.websockets.jsr.io.undertow.servlet.core의 Bootstrap$WebSocketListener.contextInitialized(Bootstrap.java:69)입니다.io.undertow.servlet.core의 ApplicationListeners.contextInitialized(ApplicationListeners.java:173)입니다.Deployment ManagerImpl.deploy(Deployment ManagerImpl.java:190)...7개 추가
웹소켓과 메시징 설정이 원인인 것 같습니다.이 https://github.com/joshlong/boot-examples/issues/2을 보고 있었는데, 제안해 주신 솔루션 중 어느 것도 제게는 효과가 없는 것 같습니다.다음은 내 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>
다이렉트 spring-boot-starter-websocket도 사용해 보았습니다만, 같은 것을 받았습니다.웹 소켓 구성도 다음과 같습니다.
@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");
}
}
시간을 내어 읽어주셔서 감사합니다.어떤 도움이라도 주시면 감사하겠습니다.또, 이것은 나의 첫 기동 어플리케이션입니다.:/
tomcat-embedded-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>
spring-boot-boot-web 및 spring-boot-websocket에는 기본적으로 spring-boot-websocket이 포함되어 있으므로 다음과 같이 Tomcat을 제외합니다.
<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>
classpath의 어디에 tomcat이 존재하지 않는지 확인합니다.
확실하지는 않지만 웹소켓에 관한 POM은 다음과 같습니다.
<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
용장성이 있습니다.
또 있다spring-boot-starter-thymeleaf
.
하지만 당신 원인의 근원은tomcat-embed-websocket
.
다음 명령을 사용하여 다음을 포함하는 모든 종속성을 검색합니다.spring-boot-starter-tomcat
:
mvn dependency:tree -Dincludes=org.springframework.boot:spring-boot-starter-tomcat
이 명령에 의해 나열된 모든 종속성에서 Tomcat starter를 제외합니다.
그 후 다음 추가가 필요할 수 있습니다.javax.servlet-api
제공되는 의존관계로서:
<dependency>
<artifactId>javax.servlet</artifactId>
<groupId>javax.servlet-api</groupId>
<scope>provided</scope>
</dependency>
이 문제가 있는 사용자를 그라데이션합니다.이 티켓의 코멘트를 확인해 주세요.
spring-boot-starter-websocket 및 spring-boot-starter-web에는 기본적으로 spring-boot-starter-tomcat이 포함되어 있으므로 spring boot-starter-tomcat 버전을 사용하지 않고 다음과 같이 Tomcat을 제외합니다.
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
글쎄요, 위에서 제시한 어떤 해결책도 제게는 효과가 없었습니다.
문제의 원인은 실제로는 부모 버전입니다.
동작하지 않음:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
동작:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
언급URL : https://stackoverflow.com/questions/25792121/spring-boot-websockets-in-wildfly
'programing' 카테고리의 다른 글
WordPress가 Expires 헤더의 캐시 방지 값으로 1984년 1월 11일을 사용하는 이유는 무엇입니까? (0) | 2023.03.12 |
---|---|
카트, 체크아웃 및 단일 제품 페이지에서 Woocommerce 사이드바를 삭제하려면 어떻게 해야 합니까? (0) | 2023.03.12 |
앵글을 사용하여 활성 탭 스타일 설정JS (0) | 2023.03.12 |
프로젝터 테스트:로그인 폼에서 텍스트 요소의 값을 설정하려면 어떻게 해야 합니까? (0) | 2023.03.12 |
WP_User 객체에서 Wordpress 사용자의 이름을 가져오려면 어떻게 해야 합니까? (0) | 2023.03.12 |