2013-05-28 28 views
0

我正在使用Apache CXF webservices和Spring MVC的Web應用程序。請注意,這些在tomcat中被部署爲2個獨立的應用程序。 Spring MVC應用程序僅提供Web界面並調用CXF應用程序公開的Web服務。現在我已經分配了重新設計整個事情的任務。 我首先想到的是合併兩個應用程序,取出CXF,並使用Spring MVC來避免從Spring MVC控制器調用CXF webservices引入的延遲。我需要單獨的CXF和Spring MVC應用程序

然而,在我這樣做之前還需要考慮另一方面。有一些Web服務比其他Web服務使用率高,在未來負載較重的情況下,將這些Web服務移動到單獨的應用程序以部署在單獨的服務器上將是最佳選擇。在這種情況下,將兩個應用程序分開並僅將CXF Web服務的那些應用程序移到單獨的服務器並開始工作會更好。

我想聽聽你的想法,決定前進的道路。

謝謝

回答

0

如果將實現分離到一個庫中,可以更好地處理這些情況。

舉一個服務的簡單示例,該服務爲給定的名字,姓氏創建全名。
Fristly,創建此

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; 
    } 
} 

以上接口POJO實現和執行最好應在其自己的包和模塊。例如,構建應該導致包含上述內容的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應用程序中使用myapp-service-lib.jar即可。

如果Web服務是單獨部署的,那麼可以毫無麻煩地完成。

+0

非常感謝@Integrator的解釋。你能否澄清你的陳述 - '如果你想讓spring mvc應用程序直接使用服務而不使用Restful服務'。使用Spring MVC,您可以通過Spring Controller公開類似休息的界面。在那種情況下,需要調用另一個寧靜的服務? – user1140448

+0

該聲明假定您正在使用來自其他項目的庫,而不一定是當前的spring mvc。 – techuser

+0

好吧,明白了!謝謝 – user1140448

相關問題