WebSphere快速入门(21) · 6.5 连接管理器 连接管理器使您可以控制并减少由 Web 应用程序使用的资源。相对于非 Web 应用程序,基于 Web 的应用程序对数据服务器的访问会导致更高的和不可预料的系统开销,这是由于 Web 用户更为频繁的连接和断开。通常连接与断开连接所用的资源大于交互所用的资源。由于 Internet 的“冲浪”性质,用户的交互过程一般都较短。 通常,公司外( Internet ,而非 intranet )的用户会将使用卷变得很大,并难以预料。连接管理器通过建立用户 Servlet 可用的连接缓冲池将连接的系统开销分摊给多个用户请求。换言之,每个用户请求仅占用连接/断开连接所用系统开销成本的一小部分。在使用初始资源建立缓冲池中的连接后,其余连接/断开连接所用的系统开销就不大了,因为这只是重复使用已有的连接而已。 Servlet 以如下方式使用连接缓冲池:当一个用户通过 Web 向 Servlet 请求时, Servlet 从缓冲池使用一个已有的连接,这意味着用户请求不会引起数据服务器的连接系统开销。当满足请求时, Servlet 将连接返回至连接管理器缓冲池供其它 Servlet 使用。因而用户请求不会引起数据服务器的断开连接的系统开销。 连接管理器还使您能控制到数据服务器产品的并发连接数。当数据服务器的许可证协议限定用户数量时,这一特性是非常有用的。可以为数据服务器创建一个缓冲池,并将连接管理器缓冲池的“最多连接数”参数设成数据服务器产品许可证中限定的最大用户数。如果用其它程序而不用连接管理器连接到数据服务器,则不能保证该方法有效。 · 1. 连接管理器结构 连接管理器维护一个连接到特定数据服务器产品处于打开状态的数据服务器缓冲池。每个数据服务器可以有一个或多个等同的或非等同的缓冲池。连接管理器的一个运行实例可以支持多个数据服务器。图 6-1 说明了在连接管理器与一个正在连接管理器的连接缓冲池中寻找可使用的连接的 Servlet 之间的典型交互作用。 (1) 当第一个 Servlet 试图与连接管理器通信时,由 WebSphere 应用服务器装入运行在 WebSphere 应用服务器下的连接管理器。只要 WebSphere 应用服务器在运行,连接管理器就一直被装入。 (2) WebSphere 应用服务器将用户请求传递给一个 Servlet 。 (3) Servlet 用连接管理器使用的方法从缓冲池中请求一个连接。 (4) 缓冲池给 Servlet 分配一个连接。 (5) Servlet 使用连接与数据服务器直接对话,这一过程中使用的是特定数据服务器的标准 API 。 (6) 数据服务器通过与 Servlet 的连接返回数据。 (7) 当 Servlet 结束与数据服务器通信时, Servlet 把连接归还给连接管理器缓冲池,以供其它Servlet 使用。 (8) Servlet 通过 WebSphere 应用服务器向用户发回响应。 在 Servlet 请求一个连接时,缓冲池中不一定有可用的连接。在这种情况下,连接管理器直接与数据服务器通信。连接管理器将: · 请求一个新的连接(参见图 6-1 中的 9 )。 · 将连接添加到缓冲池中(参见图 6-1 中的 10 )。如果缓冲池中的连接数达到了规定的上限,连接服务器将不会把新的连接加入缓冲池中。 · 将新的连接交给 Servlet (参见图 6-1 中的 4 )。 · 2.性能特性 为缓冲池创建一个新的连接是一项系统开销很高的任务,新的连接将使用数据服务器上的资源。因此连接管理器尽量用缓冲池中的现有连接来满足 Servlet 的请求。 同时,连接管理器必须尽可能地最小  图 6-1:连接管理器与Servlet 之间的交互 化缓冲池中的空闲连接,因为这是对系统资源的极大浪费。连接管理器与 Servlet 一同执行这些最小化和最大化任务。对于可选的性能,请适当地设置连接管理器参数。 连接管理器维护每个连接的验证时间标记、最近使用时间标记和正在使用标志。当某个 Servlet 第一次获得连接时,连接的验证时间标记和最近使用时间标记被设置为当前时间,连接的正在使用标志则被设置为真。 可将连接服务器配置成从某个 Servlet 中移走一个长时间未使用的连接。这个时间长度是由连接管理器的 “ 最长周期”参数指定的。如果 Servlet 准备在较长一段时期内使用连接与数据服务器多次通信,可能希望将代码加入 Servlet 中,以便在每次使用连接之前,确认它仍占有这个连接。连接管理器从缓冲池中除去空闲的连接,因为它们会浪费资源。为了确定哪个连接是空闲的,连接管理器将检查连接标志和时间标记,这个操作是通过周期性地获取连接缓冲池信息来实现的: (1) 连接管理器查看正在使用连接的最近使用时间标记。如果最近使用时间和当前时间之间的时间差大于“最长周期” 配置参数,则本连接将被认为是一个残留连接,这就表明占有它的 Servlet 已终止或者没有响应。残留连接将被归还给缓冲池以供其它 Servlet 使用,它的正在使用标志被设置为假,且验证和最近使用时间标记被设置为当前时间。 (2) 连接管理器检查未被任何 Servlet 使用的连接(这些连接的正在使用标志为假)。如果最近使用时间与当前时间的时间差超过了“最长空闲时间”配置参数,将认为本连接是空闲的。空闲连接将被从缓冲池中除去,降至“最少连接数”配置参数指定的较低限定值。 · 3.监控连接管理器 WebSphere 应用服务器管理器为名为数据库缓冲池连接的连接管理器提供了一个监控程序。可以使用这些信息来查看如何执行连接缓冲池,并建议对连接缓冲池参数进行可能的更改。可以在更改参数之后对缓冲池执行监控,从而查看缓冲池特性的更改并帮助进一步对缓冲池参数进行调整。可以选择特定缓冲池,以从选择列表中对其进行监控。 · 6.6 用户简要表 Application Server 含有 com.ibm.servlet.personalization.userprofile 软件包中的类,这些类使维护关于 Web 站点访问者的持久信息和利用这些信息来定制 Web 页面变得更为容易。 UserProfile 类包括了访问者的完整名称、邮政地址和电子邮件地址、电话号码等数据成员,并含有用于存储所选的语言、职业和用户定义的组信息的字段。另外,它还含有类属信息、购物手推车和剪贴板(一个 Java 散列表)。这就使您很容易地将其它您选择的对象合并到这些数据中,并将它们作为 UserProfile 类的一部分进行处理。因为这些对象在用户简要表文件的后继实例一直存在,所以它们必须是可串行化的。如果使用了一个 JDBC 数据库,则会将对象存储在数据库中。否则,会将对象作为文件存储。在 Application Server 版本 2.0 中, UserProfile 类使用了数据库连接管理器来维护 JDBC 连接。 可以使用“用户简要表文件”页面配置 UserProfile 类,该类用于定义和维护有关 Web 站点访问者的信息。 UserProfile 类使用连接管理器来维护与 JDBC- 从属数据库的连接。用户简要表文件的基本设置如下。 · 1. 启用用户简要表文件 (1) 查看“设置” -> “ 用户简要表文件”页面。 (2) 单击“启用”标签。 (3) 在“是否使用用户简要表文件 ?” 字段中单击“是”。 (4) 对于“类名”字段,可以使用缺省值“ com.ibm.servlet.personalization.userprofile.UserProfile” 或为UserProfile 类创建的扩展名。 (5) 单击“保存”按钮。 2.指定数据库信息 (1) 查看“设置” -> “ 用户简要表文件”页面。 (2) 单击“数据库”标签。 (3) 指定数据库产品的名称(如 IBM DB2 的 db2 )。 (4) 指定数据库的 JDBC 驱动程序(如 COM.ibm.db2.jdbc.app.DB2Driver )。注意:这包括 Application Server 的 Java 类路径中的驱动程序 .zip 或 .jar 文件(如 DB2 的 db2java.zip )。 (5) 指定用户简要表文件的数据库名称以存储数据。如果不存在该数据库,将不会创建它。因此,可以指定现有数据库的名称,或在使用该用户简要表文件之前用该名称创建一个数据库。无需在数据库中创建任何表格。 (6) 指定数据库的所有者,即创建数据库的用户的标识符。 (7) 指定保存用户简要表文件数据的数据库表格的名称。无需创建该表格,因为 UserProfile 类会在初始化时创建它。 (8) 指定用于访问数据库和其表格的用户标识符。 (9) 指定与用户标识符相关的口令。 (10) 单击“保存”按钮。 · 3 .配置连接管理属性 (1) 查看“设置” -> “ 用户简要表文件”页面。 (2) 单击“连接管理”标签。 (3) 指定要使用的连接缓冲池。 (4) 指定在“连接超时”指定的时间过后,连接仍不可用的情况下,指定是否等待并再试一次连接(与“连接管理”页面中相同)。 (5) 单击“保存”按钮。 UserProfile 类和 Application Server 的其余部分之间的唯一的耦合在于, UserProfile 类和 IBM 的会话实现( IBMSessionData )含有同一个用户名称段,该用户名称段可用于在两个类之间创建一些增效作用。用户简要表文件对象持有关于用户的信息,并通过唯一的用户名与用户的 HttpSession 对象相关联。用户名的值由 SessionData 类 getUserName() 和 setUserName() 方法设置并返回。 也可以扩展 UserProfile 类以创建一个更适合业务需求的子类,并用 Application Server 管理器指定专门 UserProfile 子类,该子类可用于所有的 Web 应用程序。 · 6.7会话跟踪 Web 应用服务器具有会话跟踪(即跟踪用户请求)的功能。使用管理器的“会话跟踪”页面配置会话跟踪。会话跟踪程序可将同一用户的几个相关请求合并为单个会话(即一个 HttpSession 对象)。会话跟踪程序也能使 Web 应用服务器的多个实例能共享会话的一个公共缓冲池(即一个会话群集器)。 · 1.启用会话跟踪及其部件 查看 “ 会话跟踪”页面。单击“启用”标签。在“启用”标签中可以设置如下字段。 (1) 启用会话:是否启用会话跟踪 , 即请求和响应对象的相关会话方式是否有效。缺省值为是。 (2) 启用 URL 重写:指会话跟踪是否启用重写 URL 来获取会话标识符。若被启用,则会话跟踪程序将识别到达 URL 的会话标识符,若有必要的话,还将重写 URL 和发送该会话标识符。缺省值为。 (3) 启用 Cookie :指会话跟踪是否使用 cookie 来携带会话标识符。若为“是”,则会话跟踪程序将识别作为 cookie 到达的会话标识符,并用 cookie 作为发送会话标识符的方式。缺省值为是。 (4) 启用协议转换重写:当 URL 要求从 HTTP 转换成 HTTPS ,或从 HTTPS 转换成 HTTP 时,是否将会话标识符添加到 URL 中。缺省值为否。 · 2.创建携带会话标识符的 Cookie 指定 Cookie 的设置,会话跟踪程序使用该 Cookie 将相关的个别请求置入逻辑用户会话中。当 Servlet 请求一个 HttpSession 对象表示一个用户会话时,会话跟踪程序可以使用一个 Cookie 将唯一的会话标识符传回给发出请求的浏览器。当 Servlet 发出后继请求时, Cookie 则获准在 Servlet 和会话跟踪程序间的往返传送。会话跟踪程序使用它来查找用户 Servlet 的现有 HttpSession 对象。换而言之,会话跟踪程序使用 Cookie 中的标识符确定该请求与该用户的其它请求相关。 查看 “ 会话跟踪”页面。单击“ Cookie” 标签。指定 Cookie 的名称,缺省值为 sesessionid 。可选地指定下列字段: (1) “域”字段的值以限制 Cookie 的发送位置。 (2) 会话 Cookie 在客户机浏览器上的活动时间(即“最长周期”字段,以毫秒计)。如果该字段为空,则当关闭浏览器时将删除该 Cookie 。 (3) “路径”字段的值以指定 Cookie 发送所至的服务器路径。 (4) 在“安全”字段中单击“是”以限制仅允许 HTTPS 会话的 Cookie 进行交换。 · 3.设置会话跟踪活动的时限和参数 查看 “ 会话跟踪”页面。单击“间隔”标签。 (1) 指定会话跟踪程序检查会话是否空闲及估计会话是否无效的时间间隔(以毫秒计)。 (2) 指定会话跟踪程序估计是否因为内存中会话过多,而将会话交换到磁盘的频率(以毫秒计)。 (3) 指定一次允许保留在内存中的会话数(最多驻留数)。 (4) 指定一个会话将允许在会话跟踪程序停止验证之前保持空闲的时间(以毫秒计)。 · 4.保留持续数据 使用“持续性”标签指定在会话跟踪程序关闭重新并启动后,以验证会话数据是否交换到磁盘。如果“持续性”字段设置为否,则会话跟踪程序将在每次启动时删除旧的会话交换文件。查看 “ 会话跟踪”页面。单击“持续性”标签。在“持续性”字段中单击“是”。指定会话跟踪程序用于存储要保持持续性的会话数据。注意:交换目录必须是一个空目录。 · 5.指定会话群集和协议转换设置 可以将 WebSphere 应用服务器配置成以如下方式运行:独立主机、会话群集服务器、会话群集客户机、协议转换主机、独立主机。查看 “ 会话跟踪”页面,单击“主机”标签。 (1) 若 WebSphere 应用服务器实例为一个独立主机,则它不参与会话群集。在独立模式下 , WebSphere 应用服务器将维护它自己的会话信息,而对客户的会话信息请求将不予响应,并且不从服务器请求会话信息。缺省值:是。 (2) 在用如 IBM eNetwork Dispatcher 之类的产品群集 Web 服务器的环境中,指定 WebSphere 应用服务器实例的主机名和 IP 地址,其中该实例为会话群集服务器。 (3) 若将 WebSphere 应用服务器实例配置成 URL 重写和协议转换(在“启用会话跟踪”标签中),则指明群集主机的主机名或 IP 地址。例如,可能为 IBM eNetwork Dispatcher 主机。 要使更改生效,请在更改“独立主机”或“会话群集服务器”字段后,重新启动 Web 应用服务器。更改这些字段后对所有配置所做的更改都保存在配置文件中,直至重新启动后方才生效。 (未完待续)
|