0

私は、Apache CXF Web サービスと Spring MVC を使用する Web アプリに取り組んでいます。これらは、Tomcat で 2 つの別個のアプリケーションとしてデプロイされることに注意してください。Spring MVC アプリは Web インターフェースのみを提供し、CXF アプリケーションによって公開された Web サービスを呼び出します。今、私は全体を再設計するタスクを割り当てられています. 最初に頭に浮かぶのは、2 つのアプリケーションをマージし、CXF を取り出し、Spring MVC を使用して、Spring MVC コントローラーから CXF Web サービスを呼び出すことによって生じるレイテンシーを回避することです。

ただし、これを行う前に考慮する必要がある別の側面があります。他のサービスよりも頻繁に使用される Web サービスがいくつかあり、将来的に負荷が高い場合は、これらの Web サービスを別のアプリケーションに移動して、別のサーバーにデプロイすることが最適です。その場合、2 つのアプリケーションを別々に保ち、CXF Web サービスのアプリケーションのみを別のサーバーに移動して作業を開始することをお勧めします。

進むべき道を決めるために、これについてのあなたの考えを聞きたいです。

ありがとう

4

1 に答える 1

0

この種の状況は、実装がライブラリに分離されている場合により適切に処理できます。

与えられたファーストネーム、ラストネームのフルネームを作成するサービスの簡単な例を見てみましょう。
まず、このためのpojo実装を作成します

public interface NameService {
    public String combineName(String firstName, String lastName);
}

public class NameServiceImpl implements NameService {
    public String combineName(String firstName, String lastName) {
        return firstName + " " + lastName;
    }
}

上記のインターフェースと実装は、理想的には独自のパッケージとモジュールにある必要があります。たとえば、ビルドは、上記を含む myapp-service-lib.jar になるはずです。

上記のRest Serviceを作成しましょう。

public interface NameRestService {
    public String combineName(String firstName, String lastName);
    ... //any other functions
}

@Path("/person/")
public class NameRestServiceImpl implements NameRestService {

    @Autowired
    private NameService nameService;

    @GET
    @Path("/name/combine")
    public String combineName(@QueryParam("firstname") String firstName, @QueryParam("lastname") String lastName) {
        return nameService.combineName(firstName, lastName);
    }

    ...//other restful implementations

}

上記の 2 つのクラスは、理想的には独自のモジュールにある必要があります。たとえば、ビルドの結果は myapp-web-service.jar/war になります。このモジュールは、必要に応じて myapp-service-lib.jar およびその他のサービス ライブラリ jar を使用します。

上記の 2 つのモジュールを使用すると、使用モデルと展開モデルを柔軟に組み合わせることができます。Spring MVC アプリケーションで Restful サービスを使用せずにサービスを直接使用する場合は、Spring MVC アプリで myapp-service-lib.jar を使用するだけです。

Web サービスを個別にデプロイする場合は、手間をかけずに行うことができます。

于 2013-05-29T02:27:18.857 に答える