`
crossgrass
  • 浏览: 3398 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

prevayler

阅读更多
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

    标题 "activate-prevayler_2.10-1.3.3.zip" 暗示了一个与Prevayler相关的开源项目,可能是一个特定版本的 Prevayler 库,用于持久化数据存储。Prevayler 是一种简单而高效的关系型数据库替代方案,它提供了一个基于...

    java银行笔试题-prevayler:普雷维勒

    Java银行笔试题中涉及到的"Prevayler"是一种流行的、开源的持久化框架,它提供了一种简单且高效的方式来管理应用程序的状态。Prevayler的主要设计理念是实现无数据库的应用程序,通过将数据存储在文件系统中,以事务...

    Simple-persistence:使用具有DAO模式的prevayler的通用方法

    该项目是在prevayler的基础上增加的一项功能,以使使用prevayler的工作更加轻松。 在prevayler中,您必须将模型上的每个更改都封装在命令对象中,然后命令对象将保留在磁盘上。 使用简单持久性,您可以使用Dao模型...

    compayler:Prevayler 装饰器编译器

    Prevayler 装饰器编译器 (Java 8) 使用 Prevayler Decorator Compiler,您可以实现这些目标 将在流行系统上执行的所有事务封装在一个地方,即一个接口。 轻松对系统实现进行单元测试,而无需关心持久性。 让...

    Prevayler-开源

    Prevayler是一个开源的、轻量级的持久化框架,专为Java应用程序设计,它提供了一种高效且简便的方式来实现ACID(原子性、一致性、隔离性和持久性)特性,而无需依赖传统的数据库系统,如关系型数据库。这个框架的...

    json-unit-0.2.0.zip

    Airomem是一个基于Prevayler的持久化引擎, Prevayler是一种流行的、无数据库的、基于文件的持久化框架。Prevayler的核心理念是将内存中的数据模型直接与文件系统关联,通过事务管理确保数据的一致性。当程序关闭时...

    zPresence:或如何使用 Zenitude 管理您的活动出席情况

    ) 注意 Java 8 最低所以你双击它(对于 Windows)或者你启动一个 java -jar 对于更好奇的人,这是一个包含 Vert.x 和 NoSQL Prevayler 的胖罐子;) 您第一次将手机连接到 PC 上启动的服务器的地址,然后您可以离开...

    Preclipse-开源

    Preclipse 是一个专门为 Java 开发者设计的 Eclipse 插件,其主要目的是为了增强 Eclipse 集成开发环境(IDE)对于 Prevayler 框架的支持。Prevayler 是一个流行的数据持久化库,它提供了简单且高性能的非关系型...

    Objectopia-开源

    Objectopia 是一个专注于企业级应用开发的开源项目,它引入了Prevayler作为其核心的透明持久化组件管理(Component Management Persistence,CMP)机制。这个设计选择使得开发者在利用EJB 2.1标准进行应用构建时,...

    QtPrevayler-开源

    QtPrevayler是一个开源项目,它的目标是将Prevayler持久化框架移植到C++编程语言中,并利用Qt库提供更高效、用户友好的开发体验。Prevayler是一款著名的Java库,它为开发者提供了一种简单、高性能的方式来实现内存中...

    Bonança-开源

    3. **Prevayler**:Prevayler是一个开源的持久化框架,它提供了简单而高效的数据存储方案。在Bonança中,Prevayler可能被用来实现实时数据持久化,确保即使在系统关闭或故障后,也能恢复到一致的状态。Prevayler的...

    PAT: Persistent Applications Toolkit-开源

    Prevayler是PAT采用的一种持久化模型,它是一个轻量级、高性能的预提交事务系统。Prevayler的设计理念是将数据存储在内存中,并在每次事务完成后将变化写入磁盘。这种模式在一定程度上牺牲了数据库的并发控制,但...

    Finevayler-开源

    Finevayler是一款基于Java的开源持久化库,它的出现是为了改善另一个知名库——Prevayler的若干局限性。Prevayler是一个简单、快速且无数据库的持久化框架,但其设计上存在一些不便之处,比如每种交易需要定义一个...

    httprevayler2:透明流行 http 服务器的 Groovy 实现

    流行率由 Prevayler 提供。 普遍的透明度是通过记录 Http 请求和对域模型树进行快照来实现的。 基础知识 这是您可以创建的最简单的服务器(在 localhost 上侦听端口 8484): class MyServer { static void main...

    Chiron-开源

    Chiron的核心理念是通过预览器(Prevayler)技术,从XMI(eXtensible Metadata Interchange)文件中生成持久化代码,以此简化开发过程,提高效率。 首先,让我们深入了解一下XMI。XMI是一种基于XML的标准,用于交换...

    VTNPrevayler-开源

    VTNPrevayler 是Object Prevalence 的Objective-C 实现。 该代码主要基于 Prevayler (http://www.prevayler.org) 进行了一些修改以适应 Cocoa 库与 Java 库之间的差异。

    Bamboo.Prevalence-开源

    Bamboo.Prevalence是.prevayler中的Klaus Wuestefeld提出的对象流行率概念的.NET实现。 Bamboo.Prevalence为面向CLR的确定性系统提供透明的对象持久性。

    XDA (eXtreme Driven Architecture)-开源

    该框架为 Delphi 7 提供了一个流行层 (www.prevayler.org),它消除了对数据库和持久层的使用,提供了从类模型和业务逻辑作为 MDA 的状态机模型和业务逻辑的卓越性能和代码生成

Global site tag (gtag.js) - Google Analytics