2017-01-29 9 views
0

Apache Karaf 4.0.7を使用して、クライアントアプリケーションと通信してデータを送受信するためにWebソケットを使用してサーバーアプリケーションを作成しています。私はすでにKarafで動作している組み込みJettyサーバのWebソケットエンドポイントを定義したいと思います。Karafに埋め込まれたJettyでWebsocketを定義する

ここでは、BundleActivatorでWebsocketsエンドポイントを定義するコードを示します。このコードは動作し、私は接続を確立できますが、バンドルは無期限に「Starting」状態でハングします。問題は、私は新しい桟橋サーバとserver.start()実行中のスレッドを作成し、バンドルが「アクティブ」状態に到達することを可能にするされていないを作成していますということであれば

public void start(BundleContext bundleContext) throws Exception { 
    Server server = new Server(); 
    ServerConnector connector = new ServerConnector(server); 
    connector.setPort(8080); 
    server.addConnector(connector); 

    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); 
    context.setContextPath("/"); 
    server.setHandler(context); 

    try 
    { 
     // Initialize javax.websocket layer 
     ServerContainer wscontainer = WebSocketServerContainerInitializer.configureContext(context); 

     // Add WebSocket endpoint to javax.websocket layer 
     wscontainer.addEndpoint(UserWebsocketResource.class); 

     server.start(); 
     server.dump(System.err); 
     server.join(); 
    } 
    catch (Throwable t) 
    { 
     t.printStackTrace(System.err); 
    } 
} 

私は疑問に思って? Jetty/Karafの作業に関する現在の文書は疎であり、OSGIバンドルを扱うという複雑な問題があります。

Jettyが埋め込まれたWebソケットを使用するより良い方法はありますか? Karaf/etcのPAXファイルを変更して新しいコネクタを追加する必要がありますか?これらの相互作用する技術はすべて、初心者のエンジニアにとってナビゲートするのが難しいです!ご協力いただきありがとうございます。

答えて

1

上記の例では、アクティベータをserver.join()でハングアップしています。そのため、バンドルは「開始段階」にあります。

私は、次の例では、あなたのバンドルにWebSocketを追加する方法を見ているのに十分良いと思います:https://github.com/ops4j/org.ops4j.pax.web/tree/master/samples/karaf-websocket

+0

すごいです!この情報に感謝。私はKarafのjetty.xmlファイルにコネクタを追加できると考えていましたが、Websocketコネクタをこのように追加する方法に関するドキュメントはありません。 – Drifting

関連する問題