PropertySet 学习一
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 文件總是被找到,因為它被包含在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、大數據量的裝載。
總結
以上是生活随笔為你收集整理的PropertySet 学习一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Commons Configuratio
- 下一篇: BAP存储属性的思想