Prevayler是一个把Java对象都保持在内存中的持久层框架,不需要数据库.并提供类似于数据库的快照存储,事务,查询等,同时还支持xml存储,远程存储等。
几个重要的接口。
Prevayler : 核心对象,使用PrevaylerFactory把pojo对象创建
如:Prevayler prevayler = PrevaylerFactory.createPrevayler(new NumberKeeper(), "demo1");
“demo1”代表存储路径
Transation, Query, TransationWithQuery
//以上3个接口定义了事务处理的接口,并通过Prevayler 执行。
通过官方的DEMO我们可以看到Prevayler框架 提供的仅仅是持久化的功能,且其设计上对数据结构设计有很大的影响,比如要求一个系统最好存在一个核心对象用来封装其他对象,从而实现存储和事务等功能,参考Demo2就知道。
所以Prevayler仅仅适用于小型系统,且要求数据结构关联性强,针对于复杂的查询,对象存储比起数据库存储显然也不够灵活
Helloword Demo
package org.prevayler.demo.helloword;
import java.io.IOException;
import org.prevayler.Prevayler;
import org.prevayler.PrevaylerFactory;
import org.prevayler.demos.demo2.business.Account;
import org.prevayler.demos.demo2.business.AccountEntry;
import org.prevayler.demos.demo2.business.Bank;
import org.prevayler.foundation.serialization.XStreamSerializer;
import com.thoughtworks.xstream.XStream;
public class Helloworld {
Prevayler prevayler;
Prevayler xmlPrevayler;
public Helloworld() throws Exception {
prevayler = PrevaylerFactory.createPrevayler(new HelloworldBean(), "helloworld");
PrevaylerFactory factory = new PrevaylerFactory();
// 配置存储目录
factory.configurePrevalenceDirectory("helloworldXml");
// 配置存储序列化工具
factory.configureSnapshotSerializer(new XStreamSerializer() {
protected XStream createXStream() {
// 使用XStream生成Xml
XStream x = new XStream();
x.alias("helloworld", HelloworldBean.class);
return x;
}
});
// 配置持久化对象
factory.configurePrevalentSystem(new HelloworldBean());
xmlPrevayler = factory.create();
}
public void sayHello(int time) throws Exception {
prevayler.execute(new SaveHelloworld(time));
}
public void sayHelloXml(int time) throws Exception {
xmlPrevayler.execute(new SaveHelloworld(time));
}
public HelloworldBean helloBean() {
return (HelloworldBean) prevayler.prevalentSystem();
}
public HelloworldBean helloXmlBean() {
return (HelloworldBean) xmlPrevayler.prevalentSystem();
}
public void save() throws Exception {
// 保存
prevayler.takeSnapshot();
xmlPrevayler.takeSnapshot();
}
public static void main(String[] args) throws Exception {
Helloworld helloworld = new Helloworld();
System.out.println("before say , there has say for " + helloworld.helloBean().getHelloTime() + " times");
for (int i =0; i < 10; i++) {
helloworld.sayHello((int)(Math.random()*10));
}
System.out.println("after say , there has say for " + helloworld.helloBean().getHelloTime() + " times");
System.out.println("==========current save as xml===========");
System.out.println("before say xml , there has say for " + helloworld.helloXmlBean().getHelloTime() + " times");
for (int i =0; i < 10; i++) {
helloworld.sayHelloXml((int)(Math.random()*10));
}
System.out.println("after say xml , there has say for " + helloworld.helloXmlBean().getHelloTime() + " times");
helloworld.save();
}
}
package org.prevayler.demo.helloword;
import java.io.Serializable;
import java.util.Date;
public class HelloworldBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = -2624803617449327171L;
private int helloTime;
private Date lastHelloTime;
public Date getLastHelloTime() {
return lastHelloTime;
}
public void setLastHelloTime(Date lastHelloTime) {
this.lastHelloTime = lastHelloTime;
}
public int getHelloTime() {
return helloTime;
}
public void setHelloTime(int helloTime) {
this.helloTime = helloTime;
}
}
package org.prevayler.demo.helloword;
import java.util.Date;
import org.prevayler.Transaction;
public class SaveHelloworld implements Transaction {
/**
*
*/
private static final long serialVersionUID = 3241456994096604069L;
private int addHelloTime;
public SaveHelloworld(int addHelloTime) {
this.addHelloTime = addHelloTime;
}
public void executeOn(Object prevalentSystem, Date executionTime) {
HelloworldBean bean = (HelloworldBean) prevalentSystem;
bean.setHelloTime(bean.getHelloTime() + addHelloTime);
bean.setLastHelloTime(executionTime);
}
}
运行helloworld
第一次输出:
before say , there has say for 0 times
after say , there has say for 69 times
==========current save as xml===========
before say xml , there has say for 0 times
after say xml , there has say for 38 times
第二次输出:
before say , there has say for 69 times
after say , there has say for 127 times
==========current save as xml===========
before say xml , there has say for 38 times
after say xml , there has say for 87 times
再看一下2种方式保存的文件
1.JavaSerializer
很多乱码。。。无法粘贴,大致就是序列化文件
2.XStreamSerializer
<helloworld>
<helloTime>87</helloTime>
<lastHelloTime>2009-10-14 10:49:36.796 CST</lastHelloTime>
</helloworld>
注: 假设不执行快照方法“helloworld.save()”,则程序运行完毕时,会自动以JavaSerializer的方式保存。。下次可以自动恢复。
分享到:
相关推荐
该项目是在prevayler的基础上增加的一项功能,以使使用prevayler的工作更加轻松。 在prevayler中,您必须将模型上的每个更改都封装在命令对象中,然后命令对象将保留在磁盘上。 使用简单持久性,您可以使用Dao模型...
Prevayler 装饰器编译器 (Java 8) 使用 Prevayler Decorator Compiler,您可以实现这些目标 将在流行系统上执行的所有事务封装在一个地方,即一个接口。 轻松对系统实现进行单元测试,而无需关心持久性。 让...
gxt-processors.zip,gxt和requestfactory的注释处理器gxt和requestfactory的注释处理器
Prevayler非常简单,它为普通的旧Java对象提供了透明的ACID持久性和复制。 从字面上看,它比通过JDBC使用关系数据库要快数千倍。
) 注意 Java 8 最低所以你双击它(对于 Windows)或者你启动一个 java -jar 对于更好奇的人,这是一个包含 Vert.x 和 NoSQL Prevayler 的胖罐子;) 您第一次将手机连接到 PC 上启动的服务器的地址,然后您可以离开...
java 银行 笔试题
airomem.zip,基于prevayler的持久化引擎prevalance/prevayler的持久化引擎
流行率由 Prevayler 提供。 普遍的透明度是通过记录 Http 请求和对域模型树进行快照来实现的。 基础知识 这是您可以创建的最简单的服务器(在 localhost 上侦听端口 8484): class MyServer { static void main...
它打算将 Prevayler (http://www.prevayler.org) 移植到 C++,使用 Qt 工具包来更快地启动。
VTNPrevayler 是Object Prevalence 的Objective-C 实现。 该代码主要基于 Prevayler (http://www.prevayler.org) 进行了一些修改以适应 Cocoa 库与 Java 库之间的差异。
Objectopia是一个使用Prevayler作为透明CMP机制的EJB 2.1容器。
用于医疗机构的用于管理女性癌症患者的Web应用程序。 使用Struts2,Joda Time和Prevayler构建。
Preclipse 是一个 Eclipse 插件,在代码生成、代码分析、重构和可视化方面为 Java 流行层 Prevayler 提供广泛支持。
Bamboo.Prevalence是.prevayler中的Klaus Wuestefeld提出的对象流行率概念的.NET实现。 Bamboo.Prevalence为面向CLR的确定性系统提供透明的对象持久性。
Finevayler是Java库,旨在克服著名的Prevayler带来的明显不便,例如:每种交易使用单独的类; 交易不能直接引用业务对象; 可能还有其他一些。
Chiron 是一个用于生成应用程序的后端框架。 它基于 prevayler 从 xmi 文件生成持久代码。 生成的代码可以使用简单但功能强大的集合搜索框架和基于有限状态机的控制器。
PAT:持久性应用程序工具包,AOP(JBossAOP)持久性库(方面库)。 为持久层提供基础的Prevayler(1.02)。 允许用户编写代码而不必担心持久性代码(POJO)。 使用注释
该框架为 Delphi 7 提供了一个流行层 (www.prevayler.org),它消除了对数据库和持久层的使用,提供了从类模型和业务逻辑作为 MDA 的状态机模型和业务逻辑的卓越性能和代码生成