在这里的例子中,我之所以使用了以浏览器为中心的架构和代理服务架构,是因为作为例子来说,它们比较简单,但是我希望能够使您相信,Ajax是体现ESB优点的非常不错的方式。
对门户使用的影响当在门户内采用Ajax编程方法时,出现了几个问题。这些问题中的大多数与门户的生命周期以及如何/何时挑选用户信息有关。具体来说,门户要使用诸如用户在哪里单击之类的信息来决定向其显示何种类型的相关信息。WebLogic Portal具有一种叫做campaign的特性,它允许门户设计人员基于用户个人信息指定对用户的有目的广告宣传。用户个人信息中包括用户的页面历史,即,用户过去点击过的页面。门户在页面刷新时收集这类信息,所以如果用户从未刷新页面,门户就无法(容易地)自动收集用户信息。
考虑Ajax编程可能对门户产生的以下副作用:
不可跟踪性使campaign得不到有效使用(参见上面的内容)。 页面刷新重置了DOM树,所以当用户最终刷新页面时,所有对使用Ajax修改过的portlet的更新都会丢失。对portlet内容的修改将会丢失,还原为初始的页面状态。 JSP中的所有JavaScript都是整个页面共用的。考虑一个包含在每个portlet中的JavaScript片断。当呈现最终的HTML页面时,JavaScript片断将在包含它的每个portlet中重复使用。类似地,如果已经将两个portlet嵌入了JavaScript,而且每个portlet的脚本都有一个名为getData()的方法,那么最终的HTML页面将会有两个不同的getData()函数定义。调用该函数时很可能导致调用不正确的方法。如果有两个名为isOK()的变量,也会出现同样的情况。使用适当的编码风格可以防止这些问题的发生,比如给所有变量和函数取独有的名称,或者使用cookies来保存portlet中使用的当前数据。