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的方式保存。。下次可以自动恢复。
分享到:
相关推荐
标题 "activate-prevayler_2.10-1.3.3.zip" 暗示了一个与Prevayler相关的开源项目,可能是一个特定版本的 Prevayler 库,用于持久化数据存储。Prevayler 是一种简单而高效的关系型数据库替代方案,它提供了一个基于...
Java银行笔试题中涉及到的"Prevayler"是一种流行的、开源的持久化框架,它提供了一种简单且高效的方式来管理应用程序的状态。Prevayler的主要设计理念是实现无数据库的应用程序,通过将数据存储在文件系统中,以事务...
该项目是在prevayler的基础上增加的一项功能,以使使用prevayler的工作更加轻松。 在prevayler中,您必须将模型上的每个更改都封装在命令对象中,然后命令对象将保留在磁盘上。 使用简单持久性,您可以使用Dao模型...
Prevayler 装饰器编译器 (Java 8) 使用 Prevayler Decorator Compiler,您可以实现这些目标 将在流行系统上执行的所有事务封装在一个地方,即一个接口。 轻松对系统实现进行单元测试,而无需关心持久性。 让...
Prevayler是一个开源的、轻量级的持久化框架,专为Java应用程序设计,它提供了一种高效且简便的方式来实现ACID(原子性、一致性、隔离性和持久性)特性,而无需依赖传统的数据库系统,如关系型数据库。这个框架的...
Airomem是一个基于Prevayler的持久化引擎, Prevayler是一种流行的、无数据库的、基于文件的持久化框架。Prevayler的核心理念是将内存中的数据模型直接与文件系统关联,通过事务管理确保数据的一致性。当程序关闭时...
) 注意 Java 8 最低所以你双击它(对于 Windows)或者你启动一个 java -jar 对于更好奇的人,这是一个包含 Vert.x 和 NoSQL Prevayler 的胖罐子;) 您第一次将手机连接到 PC 上启动的服务器的地址,然后您可以离开...
Preclipse 是一个专门为 Java 开发者设计的 Eclipse 插件,其主要目的是为了增强 Eclipse 集成开发环境(IDE)对于 Prevayler 框架的支持。Prevayler 是一个流行的数据持久化库,它提供了简单且高性能的非关系型...
Objectopia 是一个专注于企业级应用开发的开源项目,它引入了Prevayler作为其核心的透明持久化组件管理(Component Management Persistence,CMP)机制。这个设计选择使得开发者在利用EJB 2.1标准进行应用构建时,...
QtPrevayler是一个开源项目,它的目标是将Prevayler持久化框架移植到C++编程语言中,并利用Qt库提供更高效、用户友好的开发体验。Prevayler是一款著名的Java库,它为开发者提供了一种简单、高性能的方式来实现内存中...
3. **Prevayler**:Prevayler是一个开源的持久化框架,它提供了简单而高效的数据存储方案。在Bonança中,Prevayler可能被用来实现实时数据持久化,确保即使在系统关闭或故障后,也能恢复到一致的状态。Prevayler的...
Prevayler是PAT采用的一种持久化模型,它是一个轻量级、高性能的预提交事务系统。Prevayler的设计理念是将数据存储在内存中,并在每次事务完成后将变化写入磁盘。这种模式在一定程度上牺牲了数据库的并发控制,但...
Finevayler是一款基于Java的开源持久化库,它的出现是为了改善另一个知名库——Prevayler的若干局限性。Prevayler是一个简单、快速且无数据库的持久化框架,但其设计上存在一些不便之处,比如每种交易需要定义一个...
流行率由 Prevayler 提供。 普遍的透明度是通过记录 Http 请求和对域模型树进行快照来实现的。 基础知识 这是您可以创建的最简单的服务器(在 localhost 上侦听端口 8484): class MyServer { static void main...
Chiron的核心理念是通过预览器(Prevayler)技术,从XMI(eXtensible Metadata Interchange)文件中生成持久化代码,以此简化开发过程,提高效率。 首先,让我们深入了解一下XMI。XMI是一种基于XML的标准,用于交换...
VTNPrevayler 是Object Prevalence 的Objective-C 实现。 该代码主要基于 Prevayler (http://www.prevayler.org) 进行了一些修改以适应 Cocoa 库与 Java 库之间的差异。
Bamboo.Prevalence是.prevayler中的Klaus Wuestefeld提出的对象流行率概念的.NET实现。 Bamboo.Prevalence为面向CLR的确定性系统提供透明的对象持久性。
该框架为 Delphi 7 提供了一个流行层 (www.prevayler.org),它消除了对数据库和持久层的使用,提供了从类模型和业务逻辑作为 MDA 的状态机模型和业务逻辑的卓越性能和代码生成