设置SQL Repository
-
创建要由SQL Repository使用的Repository定义文件
一个模板XML文件,定义存repository item的描述符及其属性,它描述了SQL database和SQL repository之间的关系
-
配置SQL Repository component
SQL Repository是一个Nucleus component,porperties定义文件的属性指向Repository定义文件
-
在数据库服务器上创建SQL数据库模式
ATG提供了生成初步数据模式的工具
Repository Component
应用程序中的每个repository都需要一个Repository component,Repository component是一个Nucleus component。
一个SQL存储库的派生类:Atg.adapter.gsa.GSARepository
Repository Component的几个重要属性:
Property | Explanation |
---|---|
definitionFiles | XML定义文件的路径 |
dataSource | 用于连接数据库的数据源(OOTB: /atg/dynamo/service/jdbc/JTDataSource) |
repositoryName | repository的名字 |
XMLToolsFactory | 用于解析repository定义文件(OOTB: /atg/dynamo/service/xml/XMLToolsFactory) |
transactionManager | 用于管理事务边界(OOTB: /atg/dynamo/transaction/TransactionManager) |
idGenerator | 用于生成唯一id(OOTB: /atg/dynamo/service/IdGenerator) |
loadItemBatchSize | 一次从数据库加载的最大项数(默认值为200) |
Repository定义文件
每个repository都可以在一个或多个XML定义文件中定义,repository定义文件描述repository中的存repository Items,它将表列映射到项属性,它由表示SQL Repository的GSARepository组件引用,如果在不同的配置路径目录中使用相同的路径定义一个或多个XML文件,则使用XML组合规则组合它们
定义文件示例:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE gsa-template PUBLIC "-//Art Technology Group, Inc.//DTD General SQL Adapter//EN"
"http://www.atg.com/dtds/gsa/gsa_1.0.dtd">
<gsa-template>
<item-descriptor name="user">
<table name="MY_USER" type="primary" id-column-name="id">
<property name="id" column-name="id" data-type="string"/>
<property name="name" column-name="user_name"
data-type="string"/>
<property name="age" column-name="user_age"
data-type="int"/>
<property name="birthday" column-name="birthday"
data-type="date"/>
</table>
</item-descriptor>
</gsa-template>
定义文件的主要元素:
-
定义文件必须有XML声明
-
所有标记都必须包含在一个gsa-template标记中
-
<item-descriptor>
标签: 定义item类型每个repository item类型由一个item descriptor描述,item
descriptor由<item-descriptor>
标记定义它的主要属性是:
name | 此项目描述符的名称,在repository中是惟一的(必需的) |
Cache-mode | 此item descriptor的缓存模式 |
description | 可选的描述这个项目item descriptor默认值:名字的值 |
-
<table>
标签: 向item类型添加表标记指定一个SQL数据库表,该表存储由该item descriptor定义的repository items的属性
它的主要属性是:
name | 数据库的表名 |
type | 表的类型,Primary, auxiliary(默认) or Multi |
id-column-name(s) | 与存储库ID对应的数据库列的名称 |
-
<property>
标签: 定义repository item的属性每个属性标记对应于repository item的一个属性。
如果属性标记是表标记的子标记,则表示一个持久属性。
如果它出现在标记之外,则它是一个临时属性,不存储在数据库中。它的主要属性是:
name | 属性名称(必需属性) |
data-type | 此属性的数据类型,除非设置了item-type或者property-type,否则为必需 |
column-names | SQL数据库中的一个或多个列名(默认值:name的值) |
XML文件的组合
ATG平台将沿着配置路径出现的相同名称的XML定义文件组合到运行时的单个组合文件中,它由XML属性xml-combine控制,xml-combine属性可以设置为以下值之一来控制标签组合:
replace
remove
append
append-without-matching
prepend
prepend-without-matching
XML文件是递归组合
默认的Item Descriptor
每个repository可以有一个默认的item descriptor
- 可以通过将默认属性设置为true来标识repository的默认item descriptor
- 如果repository只有一个item descriptor定义,那么它就是缺省值
- 如果没有显式标识缺省item descriptor,则XML文件中的第一个item descriptor是缺省值
当使用repository API(如getItem、createItem)而不指定item descriptor时,将使用默认的item descriptor
下面的xml文件默认使用user item类型:
<gsa-template>
<item-descriptor name="user" cache-mode="locked" item-cache-size="500" default="true">
<table name="dps_user">
<property name="userType" data-type="enumerated">
<option value="investor" code="1">
<option value="broker" code="2">
<option value="guest" code="3">
</property>
</table>
</item-descriptor>
</gsa-template>
定义Resource Bundle
Resource Bundle使用resourceBundle属性定义,可以使用属性标签property,table或者item设置resource bundle,一个property如果设置了resourceBundle就会使用自身的resourceBundle属性,如果没有,则在表标记中查找resourceBundle属性集,然后在item descriptor标记中查找resourceBundle属性集
示例:
<item-descriptor name="user" ....>
<attribute name="resourceBundle" value="atg.userprofiling.ProfileResources"/>
...
本地化属性显示名称
要本地化存储库编辑器中的标签(例如BCC),要使用可本地化的属性
display-name-resource
: for display-name property
description-resource
: for description property
category-resource
: for category property
示例:
<item-descriptor name="user" display-name-resource="iUser">
<attribute name="resourceBundle" value="atg.userprofiling.ProfileResources"/>
...
在resource bundle文件ProfileResources.properties,它有entry:
iUser=User
本地化枚举类型
若要本地化枚举类型,需要在选项标记上使用“resource”属性:
<property name="emailStatus" data-type="enumerated" ...>
<option resource="emailStatusUnknown" code="0"/>
...
如果将useCodeForValue设置为true,则调用getPropertyValue不会返回本地化的属性值。
要在页面上显示本地化的值,需要在页面中包含本地化的字符串,使用servlet bean Switch选择适当的值