2010-01-18 110 views
1

我有幾個tomcat應用程序,使用.war文件在tomcat中部署。儘管這些戰爭是彼此分開的,但它們都是更大概念/應用程序的一部分,並且很多時候,一場戰爭需要從另一場戰爭中調用代碼。tomcat;在另一場戰爭中將一場戰爭稱爲圖書館

假設我有2個.war,「a.war」和「b.war」...我希望能夠使用「b.war」中的「a.war」中的一些類」。當然一種選擇是將通用代碼分成第三個「.jar」,但出於我不想涉及的原因,這會導致其他問題(而且,在我的情況中,並非如此的「通用代碼」,但更像「一個應用程序調用另一個」)。

我在這裏有什麼選擇?

回答

1

如果意圖這裏是在分開的.wars「子應用程序」在一個更大的應用的大計劃,而不是共享的代碼/ lib中與彼此通信,我建議:

  1. Servlets - 設置Servlet以促進這些應用程序之間的通信,以便他們可以相互交流。在您的web.xml文件中註冊servlet,爲期望的servlet url運行一些連接測試,並且您將很快啓動並運行。

  2. Webservices - 爲您的應用程序找到合適的Web服務實現,並創建一個wsdl。

  3. RMI,就像BranTheMan所暗示的那樣。 servlet之間

  4. crossContext通信(沒有試過)

+0

也許我誤解了tomcat的工作方式...... tomcat中沒有兩個.war應用程序「webapps」目錄共享相同的jvm?如果是這樣,servlets,webservices和rmi都是過度殺毒;在tomcat中必須有一個更好的應用程序集成方法,然後潛入到套接字級別...我希望... – user85116 2010-01-19 00:32:31

+1

如果.wars全部運行在相同的tomcat webapps目錄中,那麼它們將運行在一個tomcat jvm。我在考慮多個tomcat部署,每個應用都有一個部署,但是看到原始問題,你是對的。 對於一個tomcat容器,Servlet的crossContext能力可能會很有用: http://stackoverflow.com/questions/661978/what-does-the-crosscontext-attribute-do-in-tomcat-does-它啓用會話共享 – 2010-01-20 01:42:53

0

如果它只是「一個調用另一個應用程序」,則可以使用Java RMI。

0

我不知道你是對完全,或者只是對每個創建應用程序1瓶的想法創造一個.jar,但在tomcat中有共享庫的想法。

在Tomcat 5.5中,它位於/ shared /中,位於Tomcat 6中,正好位於/ lib下。如果你把.jars(或.class文件?從來沒有嘗試過)放在那裏,它們可能被同一服務器實例中的任何.war引用。

一方面,這很好,使得.wars很好,很小,並且可能有助於提升permgen空間,但另一方面,如果它們被許多.wars共享,則很難對工件進行版本化。