23.9.4. 配置 EJB 2.x 的容器管理持久化
您可以配置 EJB 2.x 的容器管理持久化子系统以指定任何数量的密钥生成器。密钥生成器用于生成唯一的密钥以标识 CMP 服务持久化的每个实体。
您可以定义两种类型的密钥生成器:UUID 和 HiLo 密钥生成器。
- 基于 UUID 的生成器
- 基于 UUID 的生成器可用 UUID 创建密钥。基于 UUID 的生成器只需要具有唯一的名称,它不需要其他配置。基于 UUID 的密钥生成器可以使用下列语法通过 CLI 添加:
/subsystem=cmp/uuid-keygenerator=UNIQUE_NAME:add
例 23.16. 添加 UUID 密钥生成器
要添加名为uuid_identities
的基于 UUID 的密钥生成器,请使用这个 CLI 命令:/subsystem=cmp/uuid-keygenerator=uuid_identities:add
这个命令创建的 XML 配置是:<subsystem xmlns="urn:jboss:domain:cmp:1.0"> <key-generators> <uuid name="uuid_identities" /> </key-generators> </subsystem>
- HiLo 密钥生成器
- HiLo 密钥生成器使用数据库来创建和存储标识密钥。HiLo 密钥生成器必须具有唯一的名称并配置指定用来存储数据、表名及存储密钥的字段的数据源的属性。HiLo 密钥生成器可以使用下列语法通过 CLI 添加:
/subsystem=cmp/hilo-keygenerator=UNIQUE_NAME/:add(property=value, property=value, ...)
例 23.17. 添加 HiLo 密钥生成器
/subsystem=cmp/hilo-keygenerator=HiLoKeyGeneratorFactory:add(create-table=true,create-table-ddl="create table HILOSEQUENCES (SEQUENCENAME varchar(50) not null, HIGHVALUES integer not null, constraint hilo_pk primary key (SEQUENCENAME))",data-source=java:jboss/datasources/ExampleDS, id-column=HIGHVALUES,sequence-column=SEQUENCENAME,table-name=HILOSEQUENCES,sequence-name=general,block-size=10)
这个命令创建的 XML 配置是:<subsystem xmlns="urn:jboss:domain:cmp:1.1"> <key-generators> <hilo name="HiLoKeyGeneratorFactory"> <block-size>10</block-size> <create-table>true</create-table> <create-table-ddl>create table HILOSEQUENCES (SEQUENCENAME varchar(50) not null, HIGHVALUES integer not null, constraint hilo_pk primary key (SEQUENCENAME))</create-table-ddl> <data-source>java:jboss/datasources/ExampleDS</data-source> <id-column>HIGHVALUES</id-column> <sequence-column>SEQUENCENAME</sequence-column> <sequence-name>general</sequence-name> <table-name>HILOSEQUENCES</table-name> </hilo> </key-generators> </subsystem>
注意
block-size 必须设置为 value !=0,否则生成的 PKey 不会递增,因此实体的创建会失败且抛出 DuplicateKeyException。注意
使用群集时 select-hi-ddl 必须设置为 'FOR UPDATE' 以确保一致性。所有的数据库都不支持锁定功能。