级别: 初级
蒋 乐洋 (
jiangley@cn.ibm.com), IBM中国软件开发中心软件工程师
张 坚 (
cdljianz@cn.ibm.com), 软件工程师,IBM中国软件开发中心, IBM
2007 年 3 月 01 日
WPF最强大的一个方面是,可以将模型与概要分析配合使用,通过将预定义的不同参数集与相同的代码库结合,生成相同应用程序的多个版本。本篇文章将向大家讲解概要分析的概念以及如何在实际应用中使用概要分析。
通过
第 1 部分 WebSphere Portlet Factory 简介,我们知道IBM WebSphere Portlet Factory (WPF) 是一种强大的 portlet 开发环境,它简化了开发、部署、维护和复用IBM或者JSR168标准portlet 的过程。使用 IBM WebSphere Portlet Factory 创建的 portlet 完全符合标准,并且可以在任何 JSR 168 门户网站服务器中运行。
WPF最强大的一个方面是,可以将模型与概要分析配合使用,通过将预定义的不同参数集与相同的代码库结合,生成相同应用程序的多个版本。本篇文章将向大家讲解概要分析的概念以及如何在实际应用中使用概要分析。
概要分析简介
概要分析的概念
与传统开发相比,使用构建器创建 portlet 和应用程序有两个优点:
- 构建器可以自动执行开发任务。
- 构建器将根据它们的输入来更改它们的行为及生成的 Web 应用程序。
概要分析指的是定义概要分析文件及概要分析文件条目值的过程,任何已概要分析的构建器调用输入都可以从中获取它们的值。
概要分析过程包括下列一般任务:
1. 创建概要分析集。将使用未包含任何概要分析文件条目的缺省概要分析文件(名为 Default)创建概要分析集。
2. 将一个或多个概要分析文件条目添加至概要分析集。
3. 将一个或多个概要分析文件添加至概要分析集。在添加每个概要分析文件时,还会对该概要分析文件应用缺省概要分析文件条目。
4. 通过更改每个概要分析文件的一个或多个概要分析文件条目值来定制该概要分析文件。
5. 通过从特定概要分析集中选择概要分析文件条目,对构建器调用编辑器中的构建器调用输入进行概要分析。
6. 通过应用各种概要分析文件组合来预览对模型进行概要分析的效果。
概要分析过程通常是以迭代方式进行的;可随时执行这些步骤中的任何一个,并且可能多次执行,以便在执行时能够对 portlet 或应用程序的变化做出细微调整。
概要文件选择处理器
在不同条件下,为了给构建器传送不同的参数,我们需要有概要文件选择处理器进行条件的过滤使得相应构建器能够得到相应的正确参数进行执行。
在概要分析管理器的"Select Handler"编辑器中,可设置要用于当前概要分析集的概要文件选择处理器类。您也可以声明一个为概要分析集中的概要分析值动态指定数据的概要文件选择处理器类(在本文后面章节有详细讲解)。
WebSphere Portlet Factory 包括下列概要文件选择处理器:
- 显式处理程序: 将请求与当前概要分析集中的缺省概要分析相关联,只能手工选择概要文件。通常在开发期间使用,以便您可预览应用了不同概要分析的模型。可以通过使用已应用的概要文件视图以指定要应用于模型的概要文件列表,来执行概要分析。如下图:

- 文件段处理程序: 根据 XML 文件中的用户/概要分析映射将硬编码用户与概要分析相关联。使用此处理程序需要在处理程序配置文件中指明XML文件的位置:
| <Selection class="com.bowstreet.profiles.FileSegmentSelectionHandler"> <Properties> <Property name="FileName">factory/profile_segment_data/segments.xml</Property> </Properties> </Selection> |
并写明每个User对应的概要文件名称:
| <segments> <segment name="Gold"> <user userID="tom"/> </segment> <segment name="Silver"> <user userID="mike"/> </segment></segments> |
- J2EE 角色处理程序: 将用户与 J2EE 角色相关联,并且返回与该角色相关联的概要分析。
可以指定J2EE角色与概要文件的关联,其中"AllAuthenticatedUsers"等角色都是J2EE Application Server声明的角色,如下图:

- 基于 LDAP 组的选择处理程序: 将用户与 LDAP 组相关联,并且查询概要分析集以返回与指定的 LDAP 组相关联的概要分析。
使用此处理程序需要在处理程序配置文件中指明LDAP Server的地址,用户名,密码以及相关用户和组的信息:
| <Properties> <!-- Properties for connecting to the LDAP server --> <Property name="java.naming.provider.url">ldap://localhost:389 </Property> <Property name="java.naming.factory.initial"> com.sun.jndi.ldap.LdapCtxFactory</Property> <Property name="bowstreet.ldap.root">cn=root</Property> <!-- Properties for finding a user dn based on username --> <Property name="bowstreet.ldap.user.root">o=IBM</Property> <Property name="bowstreet.ldap.user.objectClass">person </Property> <Property name="bowstreet.ldap.user.namingAttribute">uid </Property> <!-- Properties for doing group membership searches --> <Property name="bowstreet.ldap.group.root">o=IBM</Property> <Property name="bowstreet.ldap.group.objectClass">groupofuniquenames </Property> <Property name="bowstreet.ldap.group.memberAttribute">uniquemember< /Property> <!-- Account used by the handler to authenticate to the server, to do the above lookups with --> <Property name="bowstreet.ldap.account.userdn">cn=root</Property> <!-- Obscured password for the above account --> <!-- Use "obscure mypassword" in WEB-INF/bin/ to obscure a cleartext password --> <Property name="bowstreet.ldap.account.userpassword"> 0DcSRaf/gYrPDcAWQ339afBvJXs=</Property> <!-- How long (in seconds) do we trust the list of groups we store in the user's session after lookup --> <Property name="bowstreet.ldap.cache.timeout">3600</Property> </Properties> |
并指明每个Group对应的概要文件名称:
