0

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

然而,在我这样做之前,还有一个方面需要考虑。有一些 Web 服务比其他 Web 服务使用率更高,并且在未来负载较重的情况下,最好将这些 Web 服务移动到单独的应用程序以部署在单独的服务器上。在这种情况下,最好将两个应用程序分开,只将 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

}

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

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

如果 Web 服务是单独部署的,则可以轻松完成。

于 2013-05-29T02:27:18.857 回答