关于WAR之间的服务调用

我们把从前用PHP开发的一些程序用JF改写了一次,经过艰难但不痛苦的过程,有部分已经成功应用于生产环境。现在有个问题提上日程,WAR之间服务调用如何处理。
因为JF的快速开发及OO的设计让我们可以快速响应客户的要求。功能会越来多。在JAVA环境下,我们是把程序打包成WAR下,未来会用EAR,但是不同功能的功能如果打包在不同的WAR中的话,如何互相调用呢?因为我们是从PHP转过来的。这个问题也许在大家看来很菜,但我们确实想不到,能想到的办法就是合并在一个WAR中,独立struts-config-xxx.xml文件,这样结构清楚,但是一个WAR过大,不知会否有问题。请大家拍砖。谢谢。

有多个架构方式:
1.将你的一个WAR分开多个WAR,然后在浏览器客户端整合,这个非常类似REST,比如如果需要调用A_WAR,那么html连接地址就指向/A_WAR/xxx就可以。这是一种比较简单分类。也是最常用,PHP其他领域大多这么做。

2.从共享组件方式去做,如果相互调用是WAR中的JAR相互调用,那么把共享的JAR象JF一样,放到服务器的系统路径中。

3.再搞复杂,引入OSGI,使用OSGI服务器。Spring的OSGI:Service提供就是这条路。这条路限定在一个服务器中,当然分布式OSGI除外。

4.使用EJB架构 。这是分布式架构了,但是搞定EJB打包以及ClassLoader是一个棘手问题。

5.SOA的整合,第一个方式是在客户端REST整合,这个是在服务器端分开多个WAR甚至独立的WAR服务器,然后用一个消息总线如Mule连接他们。

对比以上方式,初期还是从轻量方案入手,初期不要把架构搞得太复杂,架构复杂,需要学习新的知识,时间又紧张,最后代码质量就很差,代码质量差,加上陌生架构,项目就有失败可能。

[该贴被banq于2009-12-11 09:37修改过]