Oracle Coherence中文教程二十五:Map管理操作触发器

Map管理操作触发器

Map触发补充标准的Oracle Coherence的能力,以提供高度自定义的缓存管理系统。例如,地图触发器可以防止非法交易,执行复杂安全授权或复杂的业务规则,提供透明的事件日志和审计,并收集统计数据修改。触发器的其他可能用途,包括限制行动,打击一个缓存,在应用程序重新部署时间发出。

例如,假设你有代码是与NamedCache工作,条目插入地图之前,你想改变一个条目的行为或内容。除了地图触发,而无需修改现有的代码,使你做出这种改变。

地图触发器也可以作为升级过程的一部分。除了地图触发提示插入被转移到另一个从一个缓存。

Oracle Coherence的高速缓存中的地图触发有点类似一个可能应用到数据库的触发器。是运行响应存在挂起的更改(或删除)的对应的映射项的MapTrigger接口所表示的官能剂。未处理的更改表示由MapTrigger.Entry接口。这个接口继承自的InvocableMap.Entry接口,所以它提供的方法来检索,更新和删除值在基础地图。

的MapTrigger接口包含的工艺方法,用于验证,拒绝或修改地图中的挂起的更改。这种方法被称为致力于在行动前,打算改变底层的地图内容。实施这种方法可以评估待通过分析原有的和新的价值变化,并产生以下结果:

覆盖要求的变化具有不同的值

撤消挂起的更改原来的值复位

删除该条目从底层地图

通过抛出一个RuntimeException拒绝挂起的更改

什么也不做,并允许未决更改承诺

MapTrigger功能通常添加应用程序启动过程的一部分。可以以编程方式添加的MapTrigger API中所描述的,或使用的连贯性高速缓存-config.xml配置文件中的类工厂机制,它可以被配置。在这种情况下, MapTrigger注册期间第一CacheFactory.getCache ( ... )调用相应的缓存。例25-1假设的createMapTrigger方法会返回一个new MapTriggerListener(new MyCustomTrigger());:

例25-1例MapTriggerListener配置

<distributed-scheme>

...

<listener>

<class-scheme>

<class-factory-name>package.MyFactory</class-factory-name>

<method-name>createTriggerListener</method-name>

<init-params>

<init-param>

<param-type>string</param-type>

<param-value>{cache-name}</param-value>

</init-param>

</init-params>

</class-scheme>

</listener>

</distributed-scheme>

Oracle Coherence的在除了向MapTrigger.Entry MapTrigger接口,提供了FilterTrigger和MapTriggerListener类。 FilterTrigger是一个通用MapTrigger ,实现,执行预定义的动作,如果相关的过滤器挂起的更改被拒绝。该FilterTrigger可以拒绝挂起的操作,忽略的变化,恢复条目的原始值,或删除条目本身从底层地图。

MapTriggerListener ,用于注册与相应的NamedCache的MapTrigger的特殊目的MapListener的实施。例25-2 , MapTriggerListener与人民的命名缓存是用来注册PersonMapTrigger 。

例25-2 à MapTriggerListener注册MapTrigger的命名高速缓存


NamedCache person = CacheFactory.getCache("People");

MapTrigger trigger = new PersonMapTrigger();

person.addMapListener(new MapTriggerListener(trigger));

这些API驻留在com.tangosol.util包中。这些API的更多信息,请参阅Javadoc页MapTrigger , MapTrigger.Entry , FilterTrigger , MapTriggerListener 。

25.1一个Map 触发的例子

例25-3中的代码说明地图触发,它可以被称为。在例25-3中的的PersonMapTrigger类,该处理方法实施修改条目之前,它被放置在地图里。在这种情况下,最后一个Person对象的name属性转换为大写字符。条目,然后返回到该对象。

例25-3一个MapTrigger类


...

public class PersonMapTrigger implements MapTrigger

{

public PersonMapTrigger()

{

}

public void process(MapTrigger.Entry entry)

{

Person person  = (Person) entry.getValue();

String sName   = person.getLastName();

String sNameUC = sName.toUpperCase();

if (!sNameUC.equals(sName))

{

person.setLastName(sNameUC);

System.out.println("Changed last name of [" + sName + "] to [" + person.getLastName() + "]");

entry.setValue(person);

}

}

// ---- hashCode() and equals() must be implemented

public boolean equals(Object o)

{

return o != null && o.getClass() == this.getClass();

}

public int hashCode()

{

return getClass().getName().hashCode();

}

}

例25-4 MapTrigger ,调用的PersonMapTrigger 。新MapTriggerListener的PersonMapTrigger传递人民NamedCache 。

例25-4调用一个MapTrigger和传递到命名高速缓存


...

public class MyFactory

{

/**

* Instantiate a MapTriggerListener for a given NamedCache

*/

public static MapTriggerListener createTriggerListener(String sCacheName)

{

MapTrigger trigger;

if ("People".equals(sCacheName))

{

trigger = new PersonMapTrigger();

}

else

{

throw IllegalArgumentException("Unknown cache name " + sCacheName);

}

System.out.println("Creating MapTrigger for cache " + sCacheName);

return new MapTriggerListener(trigger);

}

public static void main(String[] args)

{

NamedCache cache = CacheFactory.getCache("People");

cache.addMapListener(createTriggerListener("People"));

System.out.println("Installed MapTrigger into cache People");

}

}

时间: 2024-11-11 11:25:24

Oracle Coherence中文教程二十五:Map管理操作触发器的相关文章

Oracle Coherence中文教程二十:预加载缓存

预加载缓存 本章介绍了不同的模式,你可以用它来预加载缓存.该模式包括批量装载和分布载荷. 本章包含以下各节: 执行批量加载和处理 执行分布式批量加载 20.1执行批量加载和处理 例20-5, PagedQuery.java ,演示了在一个连贯缓存技术,有效地批量加载和处理项目. 20.1.1批量写入缓存 使用连贯性时,一个常见的场景是预先填充缓存应用程序使用它之前.一个简单的方法来做到这例20-1中的Java代码所示: 例20-1预加载缓存 public static void bulkLoad

Oracle Coherence中文教程二十四:在高速缓存中的数据处理

在高速缓存中的数据处理 coherence提供了理想的基础设施建设数据网格服务和客户端和基于服务器的应用程序使用数据网格.在一个基本的层面上,相干可以在大量的服务器在网格管理一个巨大的数据量,它可以提供接近零延迟访问该数据,它支持跨数据的并行查询中的map-reduce方式;它支持数据库和EIS系统,作为该数据的记录系统的集成.此外,Coherence提供一些服务,这是建立有效的数据网格的理想选择. 本章包含以下各节: 有针对性的执行 并行执行 基于查询的执行 数据网格范围内执行 代理针对性,并

Oracle Coherence中文教程二十六:使用Coherence Query语言

使用Coherence Query语言 本章介绍如何使用连贯性的查询语言(CohQL)互动与连贯性高速缓存. CohQL是一个重量轻语法(SQL的传统),用于执行高速缓存操作上的连贯群集.语言可用于以编程方式或从一个命令行工具. 本章包含以下各节: 了解连贯性查询语言语法 使用命令行工具CohQL 大厦过滤器在Java程序 其他相干查询语言范例 注意事项: 虽然可能会出现CohQL语法类似于SQL,重要的是要记住,不是SQL的语法,实际上是更多的上下文相关的Java持久化查询语言(JPQL)标准

Oracle Coherence中文教程二:安装Oracle Coherence

安装Oracle Coherence 本章提供说明安装Oracle Coherence的java(简称为Coherence).本章不包括安装连贯性的说明*扩展的客户端分发(C ++和.NET)或相干*网站.请参阅Oracle Coherence的客户指南和Oracle Coherence的Oracle Coherence的网络,用户指南,安装这些组件的说明. 本章包含以下各节: 系统要求 提取分派 设置环境变量 初次运行连贯性 2.1系统需求 以下是建议的最低系统要求安装在开发环境中的连贯性:

Oracle Coherence中文教程二十一:使用缓存事件

使用缓存事件 Coherence提供缓存使用JavaBean事件模型的事件.收到你的需要,你需要他们的地方,不管变化实际上是发生在集群中的事件,这是非常简单的.熟悉JavaBean模型的开发应与事件工作有没有困难,即使在复杂的群集. 本章包含以下各节: 监听器接口和事件对象 了解事件担保 支持活动的缓存和类 注册的所有活动 使用内部类作为MapListener 配置一个MapListener一个Cache 具体身份签约活动 过滤事件 "精简版"的活动 高级:听查询 高级:合成事件 高级

Oracle Coherence中文教程二十三:使用连续查询缓存

使用连续查询缓存 虽然有可能取得时间从连贯缓存查询结果中的一个点,并有可能以接收事件,将改变该查询的结果,连贯性提供了一个功能,它结合了与一个连续的数据流中的相关事件的查询结果在一个实时的方式保持一个最新的日期的查询结果.这种能力被称作连续查询,因为它具有相同的效果,如果想要查询的零延迟和查询被执行多次,每毫秒!点时间查询结果和事件的更多信息,请参见第22章,"查询缓存中的数据." 相干物化成一个连续查询缓存查询结果,然后,缓存保持最新实时查询使用事件侦听器实现连续查询功能.换句话说,

Oracle Coherence中文教程十三:实施存储和备份的Map

本章提供的信息存储使用备份地图.本章包含以下各节: 缓存层 本地存储 操作 容量规划 使用分区的备份地图 使用弹性数据功能来存储数据 使用三角洲备份的 13.1高速缓存层 分区(分布式)缓存服务在Coherence中有三个不同的层次: 客户视图 - 客户端视图代表一个虚拟层提供访问底层分区的数据.进入这一层提供使用NamedCache接口.在这一层,你也可以创建合成数据结构,如NearCache或ContinuousQueryCache的. 存储管理 - 存储管理器,服务器端负责处理高速缓存相关

Oracle Coherence中文教程十:调整TCMP行为

调整TCMP行为 本章提供了指令TCMP默认设置改变. TCMP还提供简要概述.参见"了解TCMP TCMP其他细节.此外,请参阅Oracle Coherence的管理员指南,其中包括许多微调的建议和说明. 本章包含以下各节: 概述TCMP数据传输 节流数据传输 减少负载的捆绑包 更改数据包重传行为 配置传输数据包池大小 配置的数据包缓冲区的大小 调整数据包的最大尺寸 更改分组扬声器音量阈值的 更改消息处理行为 更改TCMP插座供应商实施 10.1概述TCMP数据传输 集群成员使用Tangoso

Oracle Coherence中文教程十九:使用便携式对象格式

使用便携式对象格式 使用便携式对象格式(POF)具有许多优点,包括语言独立性的性能优势.建议你仔细看您的系列化解决方案时,在POF工作具有连贯性.对于如何使用POF建设.NET时,延长客户的信息,请参阅"楼宇集成对象NET客户端"Oracle Coherence的客户端指南.对于如何构建C++扩展客户时,与POF的信息,请参阅"楼宇集成对象的C + +客户端"Oracle Coherence的客户端指南. 本章包含以下各节: POF系列化概述 使用POF API序列