我正在开发一个使用Apache CXF webservices和Spring MVC的Web应用程序。请注意,这些在tomcat中部署为2个单独的应用程序。 Spring MVC应用程序仅提供Web界面并调用CXF应用程序公开的Web服务。现在我被赋予了重新设计整个任务的任务。 我想到的第一件事就是合并两个应用程序,取出CXF,并使用Spring MVC来避免从Spring MVC控制器调用CXF Web服务引入的延迟。
然而,在我这样做之前还需要考虑另一个方面。有些Web服务比其他服务器使用频繁,并且将来在高负载下将这些Web服务移动到单独的应用程序以部署在单独的服务器上是最佳的。在这种情况下,最好将两个应用程序分开并仅将CXF Web服务的那些应用程序移动到单独的服务器并继续运行。
我想听听你对此的看法,决定前进的方法。
由于
答案 0 :(得分:0)
如果将实现分成库,则可以更好地处理这种情况。
举一个服务的简单示例,该服务为给定的firstname,lastname创建全名。
首先,为此
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服务,则可以毫无困难地完成。