2014-02-06 90 views
0

我有一個現有的Spring Web應用程序,然後我開始一個單獨的Spring Roo應用程序,基本上只是一個休息API,主應用程序可以使用,以及第三派對開發商。我有兩個問題與此設置:構建與單獨的休息api Java Web應用程序的最佳策略

  1. 幾乎所有的應用程序的工作是從客戶端通過AJAX完成,因此REST API效果很好,但也有在主應用程序也需要訪問一些時間從REST API這些新的服務,但他們是獨立的應用程序,因此這將意味着用我自己的應用程序中的resttemplate或RMI ..

  2. 具有REST API作爲一個單獨的應用程序也意味着其部署到一個獨立的子域。這對於分割HTTP請求很好,但對於需要身份驗證的api的請求並不好,因爲這意味着重定向到另一個單一登錄的域,這會導致ajax請求失敗。

感覺不錯,很乾淨,讓這一切都分開了,但它也開始變得煩人。我可以結合這兩個項目,所有問題都將得到解決。建議?

+1

您不必再部署即可分隔子域。可以讓它們在同一個域上運行,但具有獨特的頂級目錄。我們通過在'/ ws'下的所有服務和應用程序的其餘部分使用除/ WS之外的任何服務來實現這一點。 – nickdos

+0

我認爲你應該將此作爲可能的解決方案。我試圖讓這個在Apache中工作,並遇到問題。如果你不介意發佈一個解決方案,我可以發佈一個不同的問題 - – chrismarx

回答

1

按照評論的要求,我已經包括了一個如何通過相同的子域使用Apache ProxyPassProxyPassReverse

我這樣做的方式是使用標準的HTTP代理,但它也可以用AJP連接器(我相信)。我認爲這需要其中一個webapps在不同的tomcat下運行(由於server.xml需要獨特的Host條目 - 請參閱下面的內容,但我不能100%確定)。

添加以下到Apache的conf文件(如vhosts.conf或vhosts.d/servername.conf):

<VirtualHost *:80> 
    ServerName 127.0.0.1 
    ServerName externalName1 

    ProxyRequests Off 

    # AJP example 
    #ProxyPreserveHost On 
    #ProxyPass/ajp://localhost:8009/ 
    #ProxyPassReverse/ajp://localhost:8009/ 

    ProxyPass   /ws http://internalName1:8080/webapp1/ 
    ProxyPassReverse /ws http://internalName1:8080/webapp1/ 
    ProxyPass  / http://internalName2:8080/webapp2/ 
    ProxyPassReverse/ http://internalName2:8080/webapp2/ 

</VirtualHost> 

由於增強了ProxyPass條目的順序決定優先級,任何請求爲/ws/*會總是去第一臺服務器。但第一臺服務器必須有一個/ws控制器來響應這些請求 - 換言之,/ws不是應用程序的上下文路徑,而是Web應用程序的內部路徑。 webapp2可以包含路徑,其中包括/ws但它們將被簡單地忽略,因爲所有請求都會轉到webapp1

每個Web應用程序需要在tomcat server.xml文件Host項,喜歡的東西:

<Host name="externalName1" debug="0" appBase="webapps/webapp1" unpackWARs="true" autodeploy="true"> 
    <Alias>serverName1AltName</Alias> 
    <Context path="" docBase="" debug="5" reloadable="true"/> 
</Host> 

我還沒有了好幾年這種配置自己和已經從我們運行一些服務器拉信息,所以我很抱歉,如果有任何錯誤或錯誤。

1

,我建議你在一個只有兩個項目合併:

  • 袋鼠不會沒有小豆註解
  • 您不需要集成API
  • 類上啓動兩者都是春天,所以你應該沒有合併的問題,但你必須保持Roo應用項目的項目佈局
相關問題