http://www.opensymphony.com/propertyset/
一、PropertySet介绍
PropertySet:管理属性(Property)的好工具,它提供一个抽象方法来向一个持久性存储源中动态保存和取回类型化的属性数据。支持多种持久化方式,例如:XML, EJB, Ofbiz, JDBC, Castor JDO,Memory等,同时也提供了一个简单的API来根据你的需要写你自己定制的PropertySets。
A PropertySet is designed to be associated with other entities in the system for storing key/value property pairs. :简单的说,设计PropertySet是用来存储键值/属性对的。
二、PropertySet的用法和配置
PropertySet模块的配置文件被存入当前应用的类路径,它按照次序找以下文件
- /propertyset-default.xml
- /META-INF/propertyset.xml
- /META-INF/propertyset-default.xml
propertyset-default.xml 文件总是被找到,因为它被包含在propertyset.jar中,你可以通过定义你自己的propertyset-default.xml 文件重写这些配置,这个配置文件的格式如下:
<propertysets> <propertset name="baz" class="com.foo.bar.BazPropertySet"> <arg name="some" value="thing"/> ... </propertyset> ... </propertysets>
使用上面的PropertySet的代码是:
import com.opensymphony.module.propertyset.*;
...
HashMap args = new HashMap();
// add parameters to the args map
PropertySet ps = PropertySetManager.getIntance("baz", args);
args 用来初始化配置中的参数。
二、PropertySet 数据库说明
绝大部分PropertySet实现都把数据持久化到关系型数据库中,因为PropertySet 存储了很多类型的数据,而在开发的时候是那种类型是不确定的,所以数据库结果表并不是最优、最标准的组织形式。由于这种表设计不是最优的,所以在这些表上做查询时速度将会很慢。所以我们建议建立下面的索引(indices)在表OS_PROPERTYENTRY 上,这样可以提高20%的速度。
CREATE UNIQUE INDEX os_PropertyEntry_keyidx ON os_PropertyEntry( entityName, entityId, keyValue )
CREATE UNIQUE INDEX os_PropertyEntry_allidx ON os_PropertyEntry( entityName, entityId )
除了索引,另一个可以提高性能的方面是当你写应用时key名字的考虑,如果你所有的key名都像com.acme.foo, com.acme.bar,com.acme.baz,你的数据库不可能恰当的区分OS_PROPERTYENTRY 中的数据,或者把key 名取得直白、明确一些,例如:foo,bar,and bax,移除相同的前缀,或者使用一个不同key命名惯例,例如:oof.emca.moc, rab.emca.moc, and zab.emca.moc。总之,通过恰当的取key的名字,你的数据库可以更快的访问PropertySets.
三、PropertySet接口说明
public interface PropertySet
一个键只能包含一个值,键必须是唯一的(即使类型不同)。如果使用了一个已经被用的键名且类型相同,设置的新值将会覆盖旧值。
1、如果使用一个已经被用的但是类型不同的键,一个DuplicatePropertyKeyException异常将被抛出。
2、一个属性有多种类型也是不被允许的,如果一个属性有多个类型,一个IllegalPropertyException 异常将被抛出。
3、如果得到一个已存在属性,但是返回的类型不对应,一个InvalidPropertyTypeException异常被抛出。
4、如果取一个不在的属性,null(或者是初始值)被返回。
使用一个不同的类型返回 ,如果新的类型比旧的类型长度更长一些,则不会抛出异常,例如用float 类型接整型数据。
四、Class CachingPropertySet
此类实现了PropertySet接口,属于包
com.opensymphony.module.propertyset.cached.CachingPropertySet
1、PropertySet 的实现,可以存储到属性到缓冲中。
2、当你的应用是一个独占的访问时才能用这个类,否则警慎使用。
3、大数据量的装载。