创建会话持久性表

可使用数据库表来收集和存储会话数据。 如果您对会话持久性使用数据库表,那么必须创建并定义与应用程序服务器相关联的数据库表。

有关此任务

每当为数据库持久性设置会话管理器时,会话管理器将创建一个供数据库持久性使用的表。 如果要扩展列大小限制以使其更适合于 Web 站点,那么可以在外部创建此表。 如果在会话管理器数据库持久性配置中将外部表指定为目标表,那么在会话管理器启动期间将使用外部表。 在大多数情况下,最好让会话管理器在启动期间创建表。

要创建用于收集会话数据的表,请执行以下操作:

过程

让您的管理员使用下列其中一种数据定义语言 (DDL) 来创建数据库表以存储会话数据:
对于 DB2®:
CREATE TABLE <SchemaName>.sessions  (
  ID               VARCHAR(128) NOT NULL ,
  PROPID           VARCHAR(128) NOT NULL ,
  APPNAME          VARCHAR(128) NOT NULL,
  LISTENERCNT      SMALLINT ,
  LASTACCESS       BIGINT,
  CREATIONTIME     BIGINT,
  MAXINACTIVETIME  INTEGER ,
  USERNAME         VARCHAR(256) ,
  SMALL            VARCHAR(3122)  FOR BIT DATA ,
  MEDIUM           LONG VARCHAR FOR BIT DATA ,
  LARGE            BLOB(2M)
    )
  
对于 Oracle:
CREATE TABLE SESSIONS  (
  ID               VARCHAR(128) NOT NULL ,
  PROPID           VARCHAR(128) NOT NULL ,
  APPNAME          VARCHAR(128) NOT NULL,
  LISTENERCNT      SMALLINT ,
  LASTACCESS       INTEGER,
  CREATIONTIME     INTEGER,
  MAXINACTIVETIME  INTEGER ,
  USERNAME         VARCHAR(256) ,
  SMALL            RAW(2000),
  MEDIUM           LONG RAW ,
  LARGE            RAW(1)
  )
如果 Web 容器定制属性 UseOracleBLOB 设置为 true,那么:
CREATE TABLE SESSIONS  (
  ID               VARCHAR(128) NOT NULL ,
  PROPID           VARCHAR(128) NOT NULL ,
  APPNAME          VARCHAR(128) NOT NULL,
  LISTENERCNT      SMALLINT ,
  LASTACCESS       INTEGER,
  CREATIONTIME     INTEGER,
  MAXINACTIVETIME  INTEGER ,
  USERNAME         VARCHAR(256) ,
  SMALL            RAW(2000),
  MEDIUM           BLOB,
  LARGE            RAW(1)
  )
对于 Microsoft SQL:
CREATE TABLE SESSIONS (
ID               VARCHAR(128) NOT NULL,
PROPID           VARCHAR(128) NOT NULL,
APPNAME          VARCHAR(128) NOT NULL,
LISTENERCNT      SMALLINT NULL,
LASTACCESS       DECIMAL(21,0) NULL,
CREATIONTIME     DECIMAL(21,0) NULL,
MAXINACTIVETIME  INTEGER NULL,
USERNAME         VARCHAR(255) NULL,
SMALL            IMAGE NULL,
MEDIUM           IMAGE NULL,
LARGE            IMAGE NULL
)
注:
  1. 在运行时,会话管理器使用部署了拥有的 Web 应用程序的 Java™ Platform, Enterprise Edition (Java EE) 服务器的标识来访问目标表。 任何配置为使用持久会话的 Web 容器都应该具有对主题数据库表的读和更新访问权。
  2. HTTP 会话处理使用使用CREATE INDEX以避免数据库死锁。 在某些情况下 (例如,为数据库定义了相对较小的表大小时) , DB2 可能决定不使用此索引。 当不使用索引时,会发生数据库死锁。 If database deadlocks occur, see the DB2 Administration Guide for the version of DB2 you are using for recommendations on how to calculate the space required for an index and adjust the size of the tables that you are using accordingly.
  3. 可能需要调整 DB2 以高效地使用会话数据库表,并在访问该表时避免死锁。 DB2 管理员应参阅 DB2 Administration Guide ,以获取有关调整您所使用的 DB2 版本的特定信息。
  4. 在运行时期间,会话管理器可能会在数据库中为应用程序的每个 Web 模块都创建一个条目。 这个数据行在内部用于会话管理,例如,用于使会话无效。 请不要干预此条目。 可以忽略此条目。
  5. 如果会话数据库表需要主键约束,那么必须使用 ID、PROPID 和 APPNAME 列定义主键约束。