WEB开发网
开发学院软件开发Java 用 Slice 扩展 OpenJPA 应用程序 阅读

用 Slice 扩展 OpenJPA 应用程序

 2010-10-09 08:13:28 来源:WEB开发网   
核心提示: <propertyname="openjpa.slice.ReplicatedTypes"value="acme.domain.Foo,acme.domain.Bar"/>持久化一个类型被复制过的实例会调用复制策略而非数据分布策略,由于一个复制

    <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);  
} 

上一页  5 6 7 8 9 10 

Tags:Slice 扩展 OpenJPA

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接