快速业务通道

JAVA使用XML作为持久存储介质实现方法 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18

JAVA使用XML作为持久存储介质实现方法

时间:2011-03-05

对一些需要将数据持久化的小型程序中,传统的关系型数据库显得庞大而不实用,OO数据库有一个学习曲线的问题,而使用XML是一种较好的选择.本文将就设计一个合理的XML持久化的解决方案进行探讨.

使用XML作为持久层解决方案的,它的基本功能要有:

1.对象的CRUD功能(本例中基本对象是Member类).

2.保证线程安全,对桌面程序和Web程序都一样适用.

3.有缓存,在存储介质即XML文件突然丢失的情况下还能有效工作.

本例采用了MemberService和MemberPersistence两个类来协作完成这些功能.

MemberService是业务层和持久层之间的桥梁,用于对Member对象的CRUD操作,内置一个hashtable来缓存Member对象,即使文件突然丢失,缓存中的数据也不会被影响.它内置一个MemberPersistence成员来完成与持久介质的交互.

实现添加,删除,更新的三个函数add(),delete(),update()都用lockObj实现了同步,这样就无需担心线程安全问题.其它函数对members成员没有修改,故不需要实现同步.

try{ memberPersistence.add(member); members.put(member.getId(), member); return true; } catch(XmlFileWriteException ex){   System.out.println("Member:" + member.getId() + " add error!");   return false; }

当MemberPersistence添加对象成功后,这个对象才会被添加到members中,这样保证了缓存和实际数据的同步;如果颠倒一下顺序,那末MemberPersistence添加对象不成功时,出现XmlFileWriteException异常,这是还需要在catch中删除刚才添加的对象,这样做人为加大了程序的复杂度,不如上面的做法简单高效.

关于查询函数的做法不明白的请见 http://www.blogjava.net/sitinspring/archive/2007/06/05/122119.html 中形式三.

JAVA使用XML作为持久存储介质实现方法(2)

时间:2011-03-05

下面是MemberService类的全部代码:

package com.sitinpsring.service; import java.util.ArrayList; import java.util.Collections; import java.util.Hashtable; import java.util.Iterator; import java.util.List; import com.sitinpsring.domain.Member; import com.sitinpsring.domain.MemberFilter; import com.sitinpsring.exception.XmlFileReadException; import com.sitinpsring.exception.XmlFileWriteException; import com.sitinpsring.persistence.MemberPersistence; public class MemberService { private static Hashtable<String, Member> members; private static MemberPersistence memberPersistence; private static final Object lockObj = new Object(); static { try { memberPersistence = new MemberPersistence("member.xml"); members = memberPersistence.loadMemberFromFile(); } catch (XmlFileReadException ex) { System.out.println("Can’t read the file:member.xml"); }catch (XmlFileWriteException ex) { System.out.println("Can’t write to the file:member.xml"); } } public MemberService() { } public boolean hasMember(String id) { return members.containsKey(id); } public boolean hasMember(Member member) { return hasMember(member.getId()); } public boolean add(Member member) { if (hasMember(member)) { System.out.println("Member:" + member.getId() + " has been exist!"); return false; } else { synchronized (lockObj) { try{ memberPersistence.add(member); members.put(member.getId(), member); return true; } catch(XmlFileWriteE

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号