通过
SOAP, RMI,
以及我们客户化的隧道类等途径,所有的远程
POJO
实现都向外开放。之所以这么做,并不仅仅是因为网络服务要应用于商务,而是根本上我们发现这样做对集成来说简直是太有用了。以下就有一个得益于此的企业集成案例。
3sixteen是一个做服装T恤的公司,需要扩大发展。他们注意到了Liferay有意用之来集成一个商业门户。但是,他们又感觉在一个超前时尚的服务行业Liferay似乎显得有点太丑了,或者说不入格。为了解决这个矛盾,他们不得以把WEB表现层分成了两个站点:一个产品展示站点和一个在线购买站点。
结果,
www.3sixteen.com
成了一个基于
Flash
技术的漂亮站点,而
my.3sixteen.com
则是一个基于
Liferay
的
vanilla
版本的在线购物站点。这两个站点分别安装在不同的两个
Linux
主机上,基于目标及用途的考虑可以布署在不同的国家。
项目的一个重要需求是要建立一个邮件地址管理系统,用来收集目标客户的邮件地址。于是,在
Flash
作的站点中我们加入了弹出工窗口,用来通过门户服务器要增加记录某客户的这个邮件地址到系统中。
以下是相应的
JSP
片段,它利用
ABContactManagerHttp
的功能来增加新的联系人。
String URL = "http://my.3sixteen.com";
HttpPrincipal httpPrincipal = new HttpPrincipal(URL, "joe_bloggs", "password");
ABContactManagerHttp.addContact(httpPrincipal, firstName, lastName, emailAddress);
ABContactManagerHttp
调用了
ABContactManagerUtil
中的
addContact
方法,而重要的是这个调用是通过
80
端口,直接由门户站点的
http://my.3sixteen.com/tunnel/servlet/AuthTunnelServlet
接收,应用服务器只要判定认证合法之后,就以
ID
是
joe_bloggs
的用户的身份
调用
addContact
方法,然后由
ABContactManagerUtil
调用实现类
ABContactManagerImpl
来完成真正的添加联系人的工作。这一过程可能通过查自动生成的
JavaDocs
文档中的源代码来证实。
之后呢,那个Joe Bloggs就可以登录门户,通过查看它的地址本发现多了一个新的联系人了。而且在系统的其它门户单元也可以通过协助类(helper classses)达到同样的目的。而另外一方面这也可能是一个安全隐患,因为随便一个人就可以通过一个小JAVA(applets)或其它程序,从而直接调用有业务逻辑功能的EJB,只要他拥有认证的密码。一个应对的方法是通过修改portal.properties来只指定特定的端口侦听这类服务请求。
当然也可以通过
SOAT
或
RMI
等来调用
EJB。
Liferay是一个自下而上完整的应用系统提供者。以下是案例清单,它们都是单一门户单一数据库系统。
http://demo.liferay.net
http://my.ccuc.net
http://my.3sixteen.com
http://portal.liferay.com
http://www.gatewayfriends.org
http://www.jasonandiris.com
其中每个门户的用户都与其它门户完全隔离,门户间是依据各自的公司
ID
通过域来分割不同的空间。
如果对在同一机器集成多个
Liferay
有兴趣,请参阅
Multiple Portals
。