我是否需要单独的CXF和Spring MVC应用程序

时间:2013-05-28 07:33:00

标签: spring-mvc architecture cxf distributed

我正在开发一个使用Apache CXF webservices和Spring MVC的Web应用程序。请注意,这些在tomcat中部署为2个单独的应用程序。 Spring MVC应用程序仅提供Web界面并调用CXF应用程序公开的Web服务。现在我被赋予了重新设计整个任务的任务。 我想到的第一件事就是合并两个应用程序,取出CXF,并使用Spring MVC来避免从Spring MVC控制器调用CXF Web服务引入的延迟。

然而,在我这样做之前还需要考虑另一个方面。有些Web服务比其他服务器使用频繁,并且将来在高负载下将这些Web服务移动到单独的应用程序以部署在单独的服务器上是最佳的。在这种情况下,最好将两个应用程序分开并仅将CXF Web服务的那些应用程序移动到单独的服务器并继续运行。

我想听听你对此的看法,决定前进的方法。

由于

1 个答案:

答案 0 :(得分:0)

如果将实现分成库,则可以更好地处理这种情况。

举一个服务的简单示例,该服务为给定的firstname,lastname创建全名。
首先,为此

创建一个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服务。

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

}

理想情况下,上述两个类应该在自己的模块中。例如,构建应该导致myapp-web-service.jar / war。如果需要,该模块将使用myapp-service-lib.jar和其他服务库jar。

以上两个模块将为您提供混合和匹配使用和部署模型的灵活性。 如果您希望spring mvc应用程序直接使用服务而不使用Restful服务,那么只需在spring mvc app中使用myapp-service-lib.jar。

如果单独部署Web服务,则可以毫无困难地完成。