8

メッセージ処理サーバーがあります。

  • いくつかのスレッドを開始する
  • メッセージの処理
  • データベースなどと対話します.....

クライアントは、サーバー上にWeb サービス サーバーを配置する必要があるため、Web サービス クライアントを使用してメッセージ処理サーバーにクエリを実行できます。たとえば、今日のすべてのメッセージを私に渡すか、ID のメッセージを削除してください....

問題は次のとおりです。

  • サーバーは単なる標準の j2se アプリケーションであり、Tomcat や Glassfish などのアプリケーション サーバー内では実行されません。
  • HTTP リクエストを処理するには、http サーバーを実装する必要がありますか?
  • @webservice、@webmothod などの素敵な j2ee アノテーションを使用したいのですが、使用できるライブラリまたはフレームワークはありますか?
4

2 に答える 2

9

アノテーションを使用するためにサードパーティのライブラリは必要ありません。J2SE にはが同梱されているため、すべての注釈を引き続き使用できます。次のソリューションで軽量の結果を達成できますが、最適化/マルチスレッド化されたものについては、実装するのはあなた自身の頭です:

  1. SEI (サービス エンドポイント インターフェイス) を設計します。これは基本的に、Web サービス アノテーションを備えた Java インターフェイスです。これは必須ではなく、基本的な OOP からの優れた設計のポイントです。

    import javax.jws.WebService;
    import javax.jws.WebMethod;
    import javax.jws.WebParam;
    import javax.jws.soap.SOAPBinding;
    import javax.jws.soap.SOAPBinding.Style;
    
    @WebService
    @SOAPBinding(style = Style.RPC) //this annotation stipulates the style of your ws, document or rpc based. rpc is more straightforward and simpler. And old.
    public interface MyService{
    @WebMethod String getString();
    
    }
    
  2. SIB サービス実装 Bean と呼ばれる Java クラスに SEI を実装します。

    @WebService(endpointInterface = "com.yours.wsinterface") //this binds the SEI to the SIB
    public class MyServiceImpl implements MyService {
    public String getResult() { return "result"; }
     }
    
  3. Endpoint import javax.xml.ws.Endpoint;を使用してサービスを公開します。

    public class MyServiceEndpoint{
    
    public static void main(String[] params){
      Endpoint endPoint =  EndPoint.create(new MyServiceImpl());
      endPoint.publish("http://localhost:9001/myService"); //supply your desired url to the publish method to actually expose the service.
       }
    }
    

前述のように、上記のスニペットは非常に基本的なものであり、本番環境ではパフォーマンスが低下します。リクエストのスレッド モデルを作成する必要があります。エンドポイント API は、同時要求をサポートするためにExecutorのインスタンスを受け入れます。スレッド化は私の趣味ではないので、アドバイスをすることはできません。

于 2012-10-13T06:20:33.570 に答える
0

nice j2ee アノテーションの使用については、Apache CXF http://cxf.apache.org/を参照してください。

于 2012-10-12T17:35:09.010 に答える