BEA WebLogic Portal 8.1为创建门户界面提供了一个灵活且功能强大的框架。Spring Framework是一个全栈(full-stack,意指集成了全部所需功能)的Java/Java EE应用程序框架,其特性包括控制反转(IoC)容器、简化的POJO开发和AOP功能。本教程的目的在于演示如何在WebLogic Portal应用程序中利用基本的Spring功能。一个用例的重点是页面流和Spring,而另一个用例的重点则是支持(backing)文件和Spring。在每一个用例中,我们说明了如何使用同样的Portal/portlet代码与不同的实现对象交互,而这些实现对象都是使用Spring框架进行访问的。 简介 BEA WebLogic Portal提供企业门户基础架构,用于简化门户开发。这包括一个用于开发门户的图形环境,以及基于浏览器的组装工具。本文中使用的版本是BEA WebLogic Portal 8.1 with Service Pack 6。 Spring Framework鼓励使用分层的架构,通过其控制反转容器,这种架构可以集中配置和控制应用程序对象。Spring提供多种抽象层和集成,但是这个例子只演示了Spring的核心功能。本文中使用的版本是Spring Framework 1.2.8。要了解对Spring的基本介绍,请参见Better J2EEing with Spring(Dev2Dev, 2005年7月)一文。 本文中考虑了两个用例,它们均专注于Spring提供的核心功能。一个例子演示了如何在WebLogic Portal页面流中使用Spring功能,另一个例子则演示了如何在WebLogic Portal 支持文件中使用Spring功能。 本文逐个考察了上述两个用例,并描述了如何实现它们。 演示应用程序的架构 本文附带了一个演示应用程序,它由一个使用BEA WebLogic Workshop创建的单页面门户组成。它是一个基于文件的门户,有4个portlet,排成2列,构成了一个简单的矩阵,如图1所示。 图 1. 带有两类portlet的portle矩阵,以两种不同方式对这两类portlet进行声明性配置。 其中两个portlet是页面流portlet的实例,而其他两个portlet则是使用Java 支持文件的实例。每个portlet都有自己的BeanName portlet参数。这个参数的值就是Spring bean的名称,这个名称定义在Spring配置文件applicationContext.xml中。我们把其中一个Spring bean实现为简单的Java类,其功能是使用Hashtable保存和检索员工记录,而在一个Java类中实现了其他的Spring bean, 这个类的功能是使用JDBC访问安装的默认数据库,从而保存和检索员工记录。 这4个portlet实例组成了一个简单的矩阵。一个页面流使用Hashtable bean,而另一个页面流则使用JDBC bean。类似地,一个支持文件portlet使用Hashtable bean,而另一个支持文件使用JDBC bean。两个页面流portlet都是同一个portlet实现的实例。惟一的区别在于portlet参数的值是Hashtable还是JDBC bean。类似地,两个支持文件portlet中也使用了相同的代码。 下面的例子使用了相同的Spring应用程序上下文,而这个上下文是使用web.xml中的一个Spring ContextLoaderListener项创建的。使用这一项,Spring就会使当前的应用程序上下文成为单独可用的上下文。web.xml文件位于应用程序的WEB-INF目录中,而且需要另外的侦听器来初始化上下文。 这就是web.xml中那个另外的侦听器: org.springframework.web.context.ContextLoaderListener
默认情况下,Spring会查找一个位于相同WEB-INF目录下名为applicationContext.xml的应用程序上下文配置文件。对于此演示应用程序,文件定义了两个员工服务bean,其中分别包含对两个员工bean的引用。这两个员工服务的定义是一样的,除了员工服务类名之外。一个bean引用了EmployeeServiceHashtable类,而另一个bean引用了EmployeeServiceJDBC类。这两个类均实现了EmployeeService接口。