Servlet 扩展接口

可以使用扩展生成器和处理程序来将内容添加到 Servlet 和 Portlet 调用的远程消息。Servlet 扩展还可以通过利用过滤器概念来修改现有行为。远程请求分派器 (RRD) 扩展框架依赖于将任何数据附加至一个出站 RRD 请求的扩展生成器,以及根据接收的数据使用数据并执行操作的扩展处理程序。有关 com.ibm.wsspi.rrd.extension 包的更多信息,请参阅适用于管理员的“其他应用程序编程接口 (API)”一文。

扩展生成器

在发起 RRD 请求之前,会调用作为扩展生成器链的一部分的扩展生成器。在 plugin.xml 文件的 com.ibm.wsspi.rrd.generators 扩展点中,定义了此扩展生成器链,该文件可以位于下列其中一个位置:
  • 另一个 OSGI 束。
  • 任何共享库。例如,与服务器类装入器绑定的共享库。
  • 包含启用 RRD 的本地 Web 应用程序的 WEB-INF 目录。

每个扩展生成器都由一个生成器元素定义,该元素包含一个标识属性,用来对扩展生成器指定唯一标识,以便添加到 RRD 响应数据的扩展可以将任何扩展生成器作为目标。类属性用来指定扩展生成器的类名,该类必须实现 com.ibm.wsspi.rrd.extension.generator.ExtensionGenerator 接口。通过 order 属性,每个扩展生成器还可以有关联的执行顺序,这对于在出现多个扩展生成器描述符文件的环境中强制实行扩展生成器执行顺序很有用。另外,生成器还有一个称为 type 的必需属性,它定义生成器的类型。对于 Servlet RRD,其值为“Servlet”,并且该类必须实现 com.ibm.wsspi.rrd.extension.generator.ExtensionGenerator 接口。

另外,可以为每个扩展生成器提供任何数目的初始化参数,通过包含所需数目的 init-param 元素作为 generator 元素的子代来指定。以下是扩展生成器声明示例:
<extension point="com.ibm.wsspi.rrd.generators">
  <generator id="int1"
        class="com.ibm.ws.rrd.example.extension.IntExtensionGenerator"
        order="1"
        type=”servlet”>
	   <init-param>
              <param-name>intValue</param-name>
              <param-value>100</param-value>
	   </init-param>
   </generator>
   <generator id="string1"
        class="com.ibm.ws.rrd.example.extension.StringExtensionGenerator"
        order="2"
        type=”servlet”>
      <init-param>
              <param-name>stringValue</param-name>
              <param-value>This is an example string</param-value>
      </init-param>
   </generator>
   <generator id="int2"
        class="com.ibm.ws.rrd.example.extension.IntExtensionGenerator"
        order="3"
        type=”servlet”>
      <init-param>
              <param-name>intValue</param-name>
              <param-value>200</param-value>
      </init-param>
   </generator>
</extension>
有关 com.ibm.wsspi.rrd.extension.generator 包的更多信息,请参阅适用于管理员的“其他应用程序编程接口 (API)”一文。

扩展处理程序

在接收到 RRD 请求之后,会调用作为扩展处理程序链的一部分的扩展处理程序。在 plugin.xml 文件的 com.ibm.wsspi.rrd.handlers 扩展点中,定义了此扩展处理程序链,该文件可以位于下列其中一个位置:
  • 另一个 OSGI 束。
  • 任何共享库。例如,与服务器类装入器绑定的共享库。
  • 包含启用 RRD 的本地 Web 应用程序的 WEB-INF 目录。

每个扩展处理程序都由一个处理程序元素来定义,该元素包含 namespaceURI 和 localName 属性,它们组合定义该扩展处理程序可以处理的扩展数据的限定名。另外,每个扩展处理程序还需要一个由 id 属性指定的唯一标识。此属性指定的值必须与扩展生成器对应,扩展生成器生成匹配的限定名和标识的扩展数据。类属性用来指定扩展处理程序的类名,该类必须实现 com.ibm.wsspi.extension.handler.ExtensionHandler 接口。另外,处理程序还有一个称为 type 的必需属性,它定义处理程序的类型。其值为“Servlet”,且该类必须实现 com.ibm.wsspi.rrd.extension.handler.ExtensionHandler 接口。

另外,可以为每个扩展处理程序提供任何数目的初始化参数,通过包含所需数目的 init-param 元素作为 handler 元素的子代来指定。以下是扩展处理程序声明示例:
  <extension point="com.ibm.wsspi.rrd.handlers">
      <handler id="int1"
               class="com.ibm.ws.rrd.example.extension.IntExtensionHandler"
               namespaceURI="http://www.ibm.com/ws/rrd/ext/types"
               localName="SimpleType" order="1"
               type=”servlet”/>
      <handler id="string1"
               class="com.ibm.ws.rrd.example.extension.StringExtensionHandler"
               namespaceURI="http://www.ibm.com/ws/rrd/ext/types"
               localName="SimpleType" order="2"
               type=”servlet”/>
      <handler id="int2"
               class="com.ibm.ws.rrd.example.extension.IntExtensionHandler"
               namespaceURI="http://www.ibm.com/ws/rrd/ext/types"
               localName="SimpleType" order="3"
               type=”servlet”/>
</extension>
有关 com.ibm.wsspi.rrd.extension.handler 包的更多信息,请参阅适用于管理员的“其他应用程序编程接口 (API)”一文。

扩展委派器

扩展委派器允许用户指定在 RRD 调用期间要使用的特定扩展生成器和处理程序链实例,从而使 RRD 能够处理任何 Servlet 容器。RRD 维护扩展委派器的用户可扩展列表,并在运行时根据发出的 Servlet 请求类型来选择适当的委派器。

可在 plugin.xml 文件的 com.ibm.wsspi.rrd.rrd-extension-delegator 扩展点中定义定制扩展委派器,该文件可以位于下列其中一个位置:
  • 另一个 OSGI 束。
  • 任何共享库。例如,与服务器类装入器绑定的共享库。
  • 包含启用 RRD 的本地 Web 应用程序的 WEB-INF 目录。
每个扩展委派器都由一个 ExtensionDelegator 元素定义,该元素包含一个优先级属性,用来定义启动扩展委派器的相对顺序;以及一个类名属性,用来定义特定扩展委派器的实现类,实现 com.ibm.wsspi.rrd.extension.factory.ExtensionDelegator 接口。请注意,具有相同优先级的两个或多个扩展委派器的执行顺序不可预测。以下是扩展委派器声明示例:
<extension point="com.ibm.wsspi.rrd.rrd-extension-delegator">
  <ExtensionDelegatorRegistration>
    <ExtensionDelegator priority="1" classname="com.ibm.ws.rrd.extension.PortletExtensionDelegator"/>
    <ExtensionDelegator priority="2" classname="com.ibm.ws.rrd.extension.ServletExtensionDelegator"/>
  </ExtensionDelegatorRegistration>
</extension>

定制 EMF 包

由扩展生成器生成并由扩展处理程序使用的扩展数据是通过使用 Eclipse 建模框架 (EMF) 来序列化的。需要使用定制扩展数据的用户应该利用 com.ibm.wsspi.rrd.rrd-emf-packages 扩展点,以便确保在 RRD 使用正确的 EMF 包之前已对这些包进行初始化。此扩展点是 plugin.xml 文件的一部分,该文件可以位于下列其中一个位置:
  • 另一个 OSGI 束。
  • 任何共享库。例如,与服务器类装入器绑定的共享库。
  • 包含启用 RRD 的本地 Web 应用程序的 WEB-INF 目录。
每个 EMF 包都由一个 emfPackage 元素来定义,该元素包含必须指向特定 EMF 包的已生成 EMF 工厂实现类(实现 org.eclipse.emf.ecore.impl.EFactoryImpl 的已生成模型类)的 className 元素。以下是 EMF 包声明示例:
<extension point="com.ibm.wsspi.rrd.rrd-emf-packages">
  <emfPackages>
    <emfPackage className="com.ibm.ws.rrd.webservices.types.emf.impl.TypesFactoryImpl" />
  </emfPackages>
</extension>
注: 如果在多个 Web 应用程序之间共享同一生成的 EMF 模型代码,那么仅当所有 Web 应用程序都在同一应用程序服务器中运行时,该 EMF 模型代码才必须是共享服务器库的一部分。在生产中,这种情况并不常见,公用 EMF 模型代码可存在于 Web 应用程序级别上。

指示主题类型的图标 参考主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rweb_rrd_servlet_ext
文件名:rweb_rrd_servlet_ext.html