当您启动用于存储 HTTP 会话数据的容器服务器时,可以使用缺省 XML 文件,也可以指定定制的 XML 文件。这些文件将创建特定 ObjectGrid 名称以及副本数量等等。
样本文件位置
对于独立安装,这些 XML 文件打包在
wxs_install_root/ObjectGrid/session/samples;对于安装在
WebSphere® Application Server 单元中的
WebSphere eXtreme
Scale,这些 XML 文件打包在
was_root/optionalLibraries/ObjectGrid/session/samples。
嵌入式 XML 包
如果您正在配置嵌入式方案,那么容器服务器将在 Web 容器层启动。使用
objectGrid.xml 文件和
objectGridDeployment.xml 文件,缺省情况下会提供这些文件。可以更新这些文件以定制 HTTP 会话管理器的行为。
图 1. objectGrid.xml 文件<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd" xmlns="http://ibm.com/ws/objectgrid/config">
<objectGrids>
<objectGrid name="session" txTimeout="30">
<bean id="ObjectGridEventListener" className="com.ibm.ws.xs.sessionmanager.SessionHandleManager"/>
<backingMap name="objectgridSessionMetadata" pluginCollectionRef="objectgridSessionMetadata" readOnly="false"
lockStrategy="PESSIMISTIC" ttlEvictorType="LAST_ACCESS_TIME" timeToLive="3600" copyMode="NO_COPY"/>
<backingMap name="objectgridSessionAttribute.*" template="true" readOnly="false" lockStrategy="PESSIMISTIC"
ttlEvictorType="NONE" copyMode="NO_COPY"/>
<backingMap name="objectgridSessionTTL.*" template="true" readOnly="false" lockStrategy="PESSIMISTIC"
ttlEvictorType="LAST_ACCESS_TIME" timeToLive="3600" copyMode="NO_COPY"/>
</objectGrid>
</objectGrids>
<backingMapPluginCollections>
<backingMapPluginCollection id="objectgridSessionMetadata">
<bean id="MapEventListener" className="com.ibm.ws.xs.sessionmanager.MetadataMapListener"/>
</backingMapPluginCollection>
</backingMapPluginCollections>
</objectGridConfig>
- 您可以更改的值:
- ObjectGrid name 属性
- 值必须与其他配置文件中的下列值相匹配:
- splicer.properties 文件中用来连接 Web 应用程序的 objectGridName 属性。
- objectGridDeployment.xml 文件中的 objectgridName 属性。
如果您有多个应用程序,并且希望将会话数据存储在不同的数据网格中,那么这些应用程序必须具有不同的 ObjectGrid name 属性值。
- ObjectGrid txTimeout 属性
- 此值确定一个事务在容器服务器触发该事务超时之前可以打开的秒数。缺省值为 30 秒,可以根据环境而更改。如果配置了 HTTP 会话持久性,并且 Servlet 上下文初始化参数值 replicationInterval 设置为大于零,那么会在线程上对事务进行批处理。如果 replicationInterval 属性设置为 0,那么事务通常会在 Web 应用程序检索有效 HttpSession 对象时启动。事务会在 Web 应用程序请求结束时落实。如果您所在的环境具有耗用 30 秒以上的请求,请相应地设置此值。
- 您无法更改的值:
- ObjectGridEventListener
- ObjectGridEventListener 行无法更改,并且只是在内部使用。
- objectgridSessionMetadata
- objectgridSessionMetadata 行引用 HTTP 会话元数据所存储在的映射。存储在此映射中的数据网格中的每个 HTTP 会话都有一个条目。
- objectgridSessionTTL.*
- 无法更改此值,并且是供将来使用。
- objectgridSessionAttribute.*
- objectgridSessionAttribute.* 文本用于定义动态映射。当 fragmentedSession 参数在 splicer.properties 文件中设置为 true 时,此值用来创建 HTTP 会话属性所存储在的映射。此动态映射称为 objectgridSessionAttribute。根据此模板还创建了另一个称为 objectgridSessionAttributeEvicted 的映射,该映射用于存储已超时、但是 Web 容器尚未使其失效的会话。
针对
objectgridSessionMetadata 映射定义,定义了生存时间 (TTL) 策略。另一个映射
objectgridSessionAttribute 依赖于此映射,并且不需要 TTL 参数。对于每个活动 HTTP 会话,在
objectgridSessionMetadata 映射中会创建一个条目,并在
objectgridSessionAttribute 映射中为每个会话属性创建一个条目。如果由于应用程序服务器失败或者从应用程序服务器上的内存中高速缓存除去了会话而导致内存中会话不存在,那么网格必须使用 TTL 逐出策略来启动使该会话失效。在逐出时,会从
objectgridSessionAttribute 映射中除去这些属性,然后将这些属性插入到动态创建的称为
objectgridSessionAttributeEvicted 的映射。数据会存储在此映射中,直到应用程序服务器可以除去该会话并且使会话失效为止。因此,只有在
objectgridSessionMetadata 映射定义中才需要 TTL 参数。
注: 在当前发行版中,WebSphere eXtreme
Scale 不会使用 objectgridSessionTTL。
MapEventListener 行是内部内容,无法修改。
图 2. objectGridDeployment.xml 文件<deploymentPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/deploymentPolicy ../deploymentPolicy.xsd"
xmlns="http://ibm.com/ws/objectgrid/deploymentPolicy">
<objectgridDeployment objectgridName="session">
<mapSet name="sessionMapSet" numberOfPartitions="5" minSyncReplicas="0" maxSyncReplicas="0"
maxAsyncReplicas="1" developmentMode="false" placementStrategy="PER_CONTAINER">
<map ref="objectgridSessionMetadata"/>
<map ref="objectgridSessionAttribute.*"/>
<map ref="objectgridSessionTTL.*"/>
</mapSet>
</objectgridDeployment>
</deploymentPolicy>
- 您可以更改的值:
- ObjectGrid name 属性
- 值必须与其他配置文件中的下列值相匹配:
- splicer.properties 文件中用来连接 Web 应用程序的 objectGridName 属性。
- objectGrid.xml 文件中的 ObjectGrid name 属性。
如果您有多个应用程序,并且希望将会话数据存储在不同的数据网格中,那么这些应用程序必须具有不同的 ObjectGrid name 属性值。
- mapSet 元素属性
- 您可以更改除了 placementStrategy 属性之外的所有 mapSet 特性。
- Name
- 可以更新为任何值。
- numberOfPartitions
- 指定在用于主管 Web 应用程序的每个服务器中启动的主分区数。当您添加分区时,如果进行故障转移,那么数据会变得更加分散。缺省值为 5 个分区,对于大多数应用程序而言很合适。
- minSyncReplicas、maxSyncReplicas 和 maxAsyncReplicas
- 指定用于存储 HTTP 会话数据的副本的数目和类型。缺省值为 1 个异步副本,对于大多数应用程序而言很合适。在请求路径期间会进行同步复制,这可能会延长 Web 应用程序的响应时间。
- developmentMode
- 通知 eXtreme Scale 放置服务是否可以将分区的副本分片与其主分片放置在同一节点上。在开发环境中,您可以将值设置为 true,但是在生产环境中会禁用此功能,因为节点故障可能会导致丢失会话数据。
- placementStrategy
- 请勿更改此属性的值。
该文件的其余内容引用了与 objectGrid.xml 文件中相同的映射名称。无法更改这些名称。
您无法更改的值:- mapSet 元素的 placementStrategy 属性。
远程 XML 包
当您使用远程方式时(容器将作为独立进程运行),您必须使用
objectGridStandAlone.xml 文件和
objectGridDeploymentStandAlone.xml 文件来启动进程。您可以更新这些文件以修改配置。
图 3. objectGridStandAlone.xml file<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
xmlns="http://ibm.com/ws/objectgrid/config">
<objectGrids>
<objectGrid name="session" txTimeout="30">
<bean id="ObjectGridEventListener" className="com.ibm.ws.xs.sessionmanager.SessionHandleManager"/>
<backingMap name="objectgridSessionMetadata" pluginCollectionRef="objectgridSessionMetadata"
readOnly="false" lockStrategy="PESSIMISTIC" ttlEvictorType="LAST_ACCESS_TIME" timeToLive="3600"
copyMode="COPY_TO_BYTES"/>
<backingMap name="objectgridSessionAttribute.*" template="true" readOnly="false" lockStrategy="PESSIMISTIC"
ttlEvictorType="NONE" copyMode="COPY_TO_BYTES"/>
<backingMap name="objectgridSessionTTL.*" template="true" readOnly="false" lockStrategy="PESSIMISTIC"
ttlEvictorType="LAST_ACCESS_TIME" timeToLive="3600" copyMode="COPY_TO_BYTES"/>
</objectGrid>
</objectGrids>
<backingMapPluginCollections>
<backingMapPluginCollection id="objectgridSessionMetadata">
<bean id="MapEventListener" className="com.ibm.ws.xs.sessionmanager.MetadataMapListener"/>
</backingMapPluginCollection>
</backingMapPluginCollections>
</objectGridConfig>
- 您可以更改的值:
- ObjectGrid name 属性
- 值必须与其他配置文件中的下列值相匹配:
- splicer.properties 文件中用来连接 Web 应用程序的 objectGridName 属性。
- objectGridStandAlone.xml 文件中的 objectgridName 属性。
如果您有多个应用程序,并且希望将会话数据存储在不同的数据网格中,那么这些应用程序必须具有不同的 ObjectGrid name 属性值。
- ObjectGrid txTimeout 属性
- 此值确定一个事务在容器服务器触发该事务超时之前可以打开的秒数。缺省值为 30 秒,可以根据环境而更改。如果配置了 HTTP 会话持久性,并且 Servlet 上下文初始化参数值 replicationInterval 设置为大于零,那么会在线程上对事务进行批处理。如果 replicationInterval 属性设置为 0,那么事务通常会在 Web 应用程序检索有效 HttpSession 对象时启动。事务会在 Web 应用程序请求结束时落实。如果您所在的环境具有耗用 30 秒以上的请求,请相应地设置此值。
- 您无法更改的值:
- ObjectGridEventListener
- ObjectGridEventListener 行无法更改,并且只是在内部使用。
- objectgridSessionMetadata
- objectgridSessionMetadata 行引用 HTTP 会话元数据所存储在的映射。存储在此映射中的数据网格中的每个 HTTP 会话都有一个条目。
- objectgridSessionTTL.*
- 无法更改此值,并且是供将来使用。
- objectgridSessionAttribute.*
- objectgridSessionAttribute.* 文本用于定义动态映射。当 fragmentedSession 参数在 splicer.properties 文件中设置为 true 时,此值用来创建 HTTP 会话属性所存储在的映射。此动态映射称为 objectgridSessionAttribute。根据此模板还创建了另一个称为 objectgridSessionAttributeEvicted 的映射,该映射用于存储已超时、但是 Web 容器尚未使其失效的会话。
针对
objectgridSessionMetadata 映射定义,定义了生存时间 (TTL) 策略。另一个映射
objectgridSessionAttribute 依赖于此映射,并且不需要 TTL 参数。对于每个活动 HTTP 会话,在
objectgridSessionMetadata 映射中会创建一个条目,并在
objectgridSessionAttribute 映射中为每个会话属性创建一个条目。如果由于应用程序服务器失败或者从应用程序服务器上的内存中高速缓存除去了会话而导致内存中会话不存在,那么网格必须使用 TTL 逐出策略来启动使该会话失效。在逐出时,会从
objectgridSessionAttribute 映射中除去这些属性,然后将这些属性插入到动态创建的称为
objectgridSessionAttributeEvicted 的映射。数据会存储在此映射中,直到应用程序服务器可以除去该会话并且使会话失效为止。因此,只有在
objectgridSessionMetadata 映射定义中才需要 TTL 参数。
注: 在当前发行版中,WebSphere eXtreme
Scale 不会使用 objectgridSessionTTL。
MetadataMapListener 行是内部内容,无法修改。
图 4. objectGridDeploymentStandAlone.xml 文件<deploymentPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/deploymentPolicy ../deploymentPolicy.xsd"
xmlns="http://ibm.com/ws/objectgrid/deploymentPolicy">
<objectgridDeployment objectgridName="session">
<mapSet name="sessionMapSet" numberOfPartitions="47" minSyncReplicas="0" maxSyncReplicas="0"
maxAsyncReplicas="1" developmentMode="false" placementStrategy="FIXED_PARTITIONS">
<map ref="objectgridSessionMetadata"/>
<map ref="objectgridSessionAttribute.*"/>
<map ref="objectgridSessionTTL.*"/>
</mapSet>
</objectgridDeployment>
</deploymentPolicy>
- 您可以更改的值:
- objectgridName 属性
- 值必须与其他配置文件中的下列值相匹配:
- splicer.properties 文件中用来连接 Web 应用程序的 objectGridName 属性。
- objectGrid.xml 文件中的 ObjectGrid name 属性。
如果您有多个应用程序,并且希望将会话数据存储在不同的数据网格中,那么这些应用程序必须具有不同的 ObjectGrid name 属性值。
- mapSet 元素属性
- 您可以更改所有 mapSet 属性。
- Name
- 可以更新为任何值。
- numberOfPartitions
- 使用 FIXED_PARTITIONS 设置启用的缺省固定分区放置策略。此设置指定分布在所有正在运行的网格容器中的分区总数。缺省值为 47 个分区,对于大多数应用程序而言很合适。如果将“按容器放置”策略与 PER_CONTAINER 设置配合使用,那么这将指定在每个网格容器中启动的主分区数。当您添加分区时,如果进行故障转移,那么数据会变得更加分散。对于“按容器”策略,建议值为 5。
- minSyncReplicas、maxSyncReplicas 和 maxAsyncReplicas
- 指定在用于主管 Web 应用程序的每个服务器中启动的主分区数。当您添加分区时,如果进行故障转移,那么数据会变得更加分散。缺省值为 5 个分区,对于大多数应用程序而言很合适。
- developmentMode
- 通知 eXtreme Scale 放置服务是否可以将分区的副本分片与其主分片放置在同一节点上。在开发环境中,您可以将值设置为 true,但是在生产环境中会禁用此功能,因为节点故障可能会导致丢失会话数据。
- placementStrategy
- 可以将此属性更改为下列其中一个值:
- FIXED_PARTITIONS 这是缺省值,并且是使用远程 HTTP 会话拓扑的首选方法。如果您正在使用多宿主复制,那么需要使用此值
- PER_CONTAINER 在远程拓扑中,这仍然是受支持的配置。