Java8とSpring4.3.1を使用しています。SpringスタートアップからJavaクラスを実行します。
ブラウザとモバイルアプリケーションクライアントがアクセスするRESTfultサービスをホストするJava/Springアプリケーションがあります。次に、クライアントからのイベント(socket.io
)を受信するチャットサーバーを作成しました。このチャットサーバーはクラスmain
メソッドから実行されています。
チャットサーバークラスは、私が実行したい、そしてSpringアプリケーションの起動時にイベントを待ち受けることができるmain
メソッドを持っています。これは可能ですか?
自分でmain
を実行すると動作しますが、SpringアプリケーションをロードするWildflyサーバーを起動するときに起動します。
さらに良い方法がありますか? Chatサーバーはmain
メソッドから実行されていないはずですか?
私は次のコードを持っている:
package com.jobs.spring.configuration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration.Dynamic;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
public class WebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(AppConfig.class);
ctx.setServletContext(servletContext);
Dynamic dynamic = servletContext.addServlet("rest", new DispatcherServlet(ctx));
dynamic.addMapping("/*");
dynamic.setLoadOnStartup(1);
try {
com.jobs.spring.chat.Server chatServer = new com.jobs.spring.chat.Server();
chatServer.run(null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
と
public class Server implements CommandLineRunner {
private static final String SERVER = "localhost";
private static final Integer PORT = 3700;
@Override
public void run(String... args) throws Exception {
main(args);
}
public static void main(String[] args) {
...
をし、次のエラーを取得:
18:47:08,142 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 66) MSC000001: Failed to start service jboss.undertow.deployment.default-server.default-host./jbosswildfly: org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./jbosswildfly: java.lang.NoClassDefFoundError: Failed to link com/jobs/spring/chat/Server (Module "deployment.jbosswildfly.war:main" from Service Module Loader): org/springframework/boot/CommandLineRunner
Caused by: java.lang.NoClassDefFoundError: Failed to link com/jobs/spring/chat/Server (Module "deployment.jbosswildfly.war:main" from Service Module Loader): org/springframework/boot/CommandLineRunner
それは感じています。このサーバーの目的はWeb上で実行されるのですか?そうでない場合、なぜサーブレットですか?もしそうなら、明らかに「側にある」ソケットには何がありますか? – chrylis
チャットサーバーは、イベントを受信するために実行する必要があります。私は、socket.ioを使ってメッセージを送るIonic Mobile Appを持っています。私がcmdの行からチャットサーバーを実行すると、それは完全に動作しますが、RESTfulなサービスでSpringを実行する別のJavaアプリケーションがあります。このJavaアプリケーションが起動すると、チャットサーバーも起動します。 RESTfulなサービスとチャットサーバーの両方は、ブラウザとモバイルアプリからアクセスする必要があります。 – Richard
おそらく私はこれに間違って近づいていますが、私はアドバイスのためにここにいます。 – Richard