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模块的配置文件被存入当前应用的类路径,它按照次序找以下文件

  1. /propertyset-default.xml
  2. /META-INF/propertyset.xml
  3. /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、大数据量的装载。

PropertySet 学习一相关推荐

  1. BAP存储属性的思想

    一.UMConstant:人员部分的常量定义 包: com.smartdot.bap.pmi.user.globale 概要:定义了一些静态常量,一部分的值已经在页面上写死,一部门通过 Propert ...

  2. codesmith学习总结

    code smith 使用介绍 利用CodeSmith为SQL Server CE生成项目代码   摘要:CodeSmith是很多.NET开发人员至爱的开发辅助工具,它能够使开发人员从大量枯燥无味的重 ...

  3. 《Pro ASP.NET MVC 3 Framework》学习笔记之十八【URL和Routing】

    整个项目范围的依赖注入(Project-Wide Dependency Injection) 在书接下来的章节里面,我们会看到MVC框架提供的很多不同的方式来让我们扩展和自定义对请求的处理,每一种方式 ...

  4. GP学习(六)—Creating geodatabase and connecting geodatabase

    声明:仅做自己学习整理用,内容拷贝自ArcEngine SDK开发文档 Creating geodatabases Summary This topic explains how to create ...

  5. ClusterManager 源码及原理学习

    通过对ClusterManager 源码的学习,对其Cluster的 整体思路有了一些认识. 在ClusterManager 中有一段静态代码段,如下: static {// Listen for c ...

  6. 【Android 源码学习】 init启动

    目录 Android 源码学习 init启动 从main.cpp开始 init.cpp 部分逻辑 init启动zygote 属性服务 总结 Android 源码学习 init启动 Android 11 ...

  7. powershell 学习笔记

    命令模式        //字符串不需要加引号,除变量和圆括号中的内容外的所有内容均可看作字符串        copy users.txt accounts.txt        copy $src ...

  8. java入门 慕路径,Java入门基础知识总结学习教程大全【必看经典】

    类型的表达式,是循环条件,表达式3是党执行了一遍循环之后,修改控制循环的变量值. ??? for语句的执行过程是这样的:首先计算表达式1,完成必要的初始化工作:然后判断表达式2的值,如果表达式的值为t ...

  9. Java EE学习心得

    –Java EE学习心得   1.    称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...

最新文章

  1. java使用varargs,Java 实例 – Varargs 可变参数使用 - Java 基础教程
  2. 保持危机感和紧迫感_什么是紧迫的:您需要知道的一切
  3. Asp.Net Core 混合全球化与本地化支持
  4. 光耦驱动单向可控硅_华越国际一文带路:可控硅触发设计技巧
  5. JAVA入门级教学之(JAVA注释)
  6. jq之$(“tr:even“).css(“background-color“,“yellow“)
  7. 设计模式笔记二十:观察者模式 |更新版
  8. 计算机表格中如何计算数据透视表,在数据透视表中计算值
  9. python post 表单类数据_python post content-type:multipart/form-data 类型的表单数据
  10. Spring Cloud 2020 年路线图
  11. C++ fork函数理解
  12. viper4android xml,ROM 定制图文教程 ROM 制作深度解析(新手适用)
  13. 事务Transaction的理解(一)
  14. MonoJSG:联合语义和几何代价函数的单目3D目标检测(CVPR2022)
  15. 微软Google人才战主角首次开口:Google让我震撼(转)
  16. R数据分析:如何在R中使用mutate
  17. 家庭局域网网站服务器,1000元打造家庭局域网
  18. python求平均工资_python实现求和,求平均值——函数
  19. 代理服务器拒绝连接(无法连接到代理服务器)的解决办法
  20. lighttpd隐藏index.php,lighttpd开启rewrite伪静态方法 - 老牛博客

热门文章

  1. 限制连接数上涨的几个关键因素
  2. primer3批量设计引物
  3. spring mvc静态资源访问的配置
  4. [LOJ#2270][BZOJ4912][SDOI2017]天才黑客
  5. sqlite自己主动更新数据库
  6. 使用NW.js封装微信公众号菜单编辑器为桌面应用
  7. 无根树转为有根数(图论) By ACReaper
  8. Redis|Sentinel 高可用架构
  9. [No0000142]Outlook通过添加签名 自动添加邮件模板
  10. 201521123054《Java程序设计》第1周学习总结