用 Slice 扩展 OpenJPA 应用程序
2010-10-09 08:13:28 来源:WEB开发网 <property
name="openjpa.slice.ReplicatedTypes"
value="acme.domain.Foo,acme.domain.Bar"/>
持久化一个类型被复制过的实例会调用复制策略而非数据分布策略。由于一个复制了的项可被存储在多个片内,此策略接口类似于数据分布策略,但在返回类型方面有所差异。
清单 3. 复制策略接口协议
package org.apache.openjpa.slice;
public interface ReplicationPolicy {
String[] replicate(Object pc, List<String> slices, Object context);
}
虽然输入参数的语义与数据分布策略内的相同,返回值现在包含一个片标识的数组,而非单一一个片标识。空返回值意味着所有片都是活动的,而空数组则会引发一个异常。同样地,Slice 会跟踪所有存储了被复制项的片标识并会在被复制实例发生改变时,将相同的更新反映到所有的这些片。因而,一个复制项实例可被视为是在几个数据库内有多个相同副本的单个逻辑项。默认的复制策略会将此项复制给所有的活动片。
若一个查询调用了一个复制了的类型,那么 Slice 会为这些复制项从这些片中过滤出单个结果以便类似 'select count(o) from CountryCode o' 这样的合计查询不会因计数来自多个片的重复 CountryCode 实例而返回不正确结果。
将查询定向给片的子集
默认情况下,Slice 会跨所有的活动片执行查询并在需要的时候在内存中合并结果。而用户则可以将每个要执行的查询定向给片的一个子集。用户应用程序可以通过查询定向策略接口控制这类查询定向。
清单 4. 查询定向策略协议
package org.apache.openjpa.slice;
public interface QueryTargetPolicy {
String[] getTargets(String query, Map<Object,Object> \
params, List<String> slices, Object context);
}
- ››扩展Axis2框架,支持基于JVM的脚本语言
- ››扩展WebSphere Portal V6个性化功能
- ››扩展JavaScript的时候,千万要保留其原来的所有功...
- ››扩展数据:如何为 Model 750 服务器选择 I/O 扩展...
- ››扩展 JDT 实现自动代码注释与格式化
- ››扩展 secldap 的功能以验证多个数据源
- ››扩展 JUnit4 以促进测试驱动开发
- ››扩展 JUnit 测试并行程序
- ››扩展的ToolStripEx控件
- ››扩展 Eclipse 的 Java 开发工具
- ››扩展 Eclipse 辅助和规范开发流程
- ››扩展方法 DataTable 和List 相互转换
更多精彩
赞助商链接