- 浏览: 1048486 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (639)
- 服务器配置篇 (58)
- hibernate篇 (14)
- spring篇 (33)
- struts篇 (28)
- JS篇 (46)
- 其他技术篇 (46)
- 数据库集群配置 (6)
- JAVA基础相关 (48)
- 分布式框架HadHoop的应用 (2)
- FLEX篇 (8)
- SQLSERVER技术 (32)
- Android学习 (13)
- amchart学习笔记 (1)
- openfire+smark搭建即时通讯 (9)
- Linux学习 (18)
- Oracle数据库 (15)
- 网站优化技术 (12)
- mysql数据库 (2)
- 项目学习总结 (18)
- 工具类(JAVA) (12)
- 工具类(JS) (2)
- 设计模式 (10)
- Lucene学习 (24)
- EJB3学习 (6)
- Sphinx搜索引擎 (3)
- 工作中用到的软件小工具 (5)
- .NET (49)
- JAVA 连接SQLSERVER2008步骤 (1)
- MongoDB (19)
- Android手机开发 (3)
- Maven (6)
- vue (9)
- Shiro (4)
- mybatis (3)
- netty框架 (1)
- SpringCloud (3)
- spring-cloud (7)
- Git (1)
- dubbo (2)
- springboot (13)
- rocketmq (1)
- git学习 (2)
- kafka服务器 (2)
- linux (10)
- WEB系统辅助项目 (1)
- jenkins (2)
- docker (4)
- influxdb (3)
- python (2)
- nginx (1)
最新评论
-
jiangfuofu555:
这样数据量大,效率怎么样?
sqlserver 实现分页的前台代码 以及后台的sqlserver语句 -
w156445045:
博主请问下,如何做到实时的刷新呢,
另外我后台是Java 谢谢 ...
web 版本的汽车仪表盘,非常好看。还有各种图形 -
jackyin5918:
<transportConnector name=&qu ...
ActiveMQ的activemq.xml详细配置讲解 -
握着橄榄枝的人:
你这个不是spring1.x的吧
spring1.x使用AOP实例 -
xiaophai:
全乱套了!
openfire+spark搭建完美的及时通讯
一下是一个DB4O的操作DAO。
作为DB4O在WEB项目中的操作,如果每次调用接口NEW一个对象去取得查询文件的时候,系统会报错,表示所读的DB文件已经被锁住了。查看了网上的一些解决方式。最后自己实现,解决了问题。
解决方法。在WEB容器启动的时候,新建一个监听器
WebListener.java
package common.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import common.util.db4o.LogMessageDao;
public class WebListener implements ServletContextListener {
LogMessageDao logdao;
private static final ThreadLocal local = new ThreadLocal();
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
}
public void contextInitialized(ServletContextEvent event) {
String path =event.getServletContext().getRealPath("/log/log.db");
logdao = logdao.getInstance(path);
//local.set(logdao);
event.getServletContext().setAttribute("LogDao", logdao);
//在监听器中将要用到查DB文件的DAO类放入到ServletContext中
// TODO Auto-generated method stub
}
}
然后在我们用用的时候,在一个JSP页面的用法,从ServletContext中拿出来。
LogMessageDao logdao = (LogMessageDao)config.getServletContext().getAttribute("LogDao");
System.out.println("logdao:"+logdao);
List<LogMessage> list= logdao.getAllMessage();
for(int i=0;i<list.size();i++)
{
LogMessage lg = (LogMessage)list.get(i);
%>
<log>
<perid><%=lg.getPerID() %></perid>
<remoteip><%=lg.getRemoteIP() %></remoteip>
<date><%=lg.getDate() %></date>
</log>
<%
}
//这样就不会造成文件被锁住了。
下面是DAO的JAVA文件
package common.util.db4o;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import com.db4o.Db4o;
import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;
import com.db4o.config.Configuration;
import com.db4o.io.CachedIoAdapter;
import com.db4o.io.RandomAccessFileAdapter;
import com.db4o.query.Constraint;
import com.db4o.query.Query;
public class LogMessageDao {
private static LogMessageDao messageDao = null;
private Configuration configuration = null;
private ObjectContainer db = null;
private String path;
private LogMessageDao(String path) {
configuration = Db4o.newConfiguration();
// configuration.io(new RandomAccessFileAdapter());
configuration.io(new CachedIoAdapter(new RandomAccessFileAdapter()));
configuration.optimizeNativeQueries(true);
configuration.objectClass(LogMessage.class).objectField("perID").indexed(true);
configuration.objectClass(LogMessage.class).objectField("remoteIP").indexed(true);
configuration.objectClass(LogMessage.class).objectField("date").indexed(true);
this.path = path;
openDB4O(path);
}
/**
* 获取实例
* @param path
* @return
*/
public static LogMessageDao getInstance(String path) {
if (messageDao == null) {
messageDao = new LogMessageDao(path);
}
return messageDao;
}
public List<LogMessage> getHistory(String to, String beginDate, String endDate,int msgType) {
List<LogMessage> msgList = null;
Query query = db.query();
query.constrain(LogMessage.class);
Constraint constr = query.descend("from").constrain(to);
query.descend("date").constrain(beginDate).greater().equal();
query.descend("date").constrain(endDate).smaller().equal();
if(msgType == 0){ //msgType=0 表示查询普通聊天记录
query.descend("to").constrain(to).or(constr);
} else if(msgType == 1){ //msgType=1 表示查询群聊天记录
query.descend("from").constrain(to);
}
query.descend("date_time").orderAscending();
ObjectSet result = query.execute();
msgList = (result == null) ? new ArrayList<LogMessage>() : result;
return msgList;
}
/**
* 查询外部IM的历史记录
* @param to 查询对象
* @param me 查询人的jid
* @param con 当前xmpp连接实例
* @param beginDate 查询的开始日期
* @param endDate 查询的结束日期
* @return
*/
public List<LogMessage> getImHistory(String to, String me, String con, String beginDate, String endDate) {
List<LogMessage> msgList;
Query query = db.query();
query.constrain(LogMessage.class);
Constraint constr1 = query.descend("from").constrain(me);
Constraint constr2 = query.descend("from").constrain(to);
Constraint constr3 = query.descend("to").constrain(con).and(constr2);
query.descend("date").constrain(beginDate).greater().equal();
query.descend("date").constrain(endDate).smaller().equal();
query.descend("to").constrain(to).and(constr1).or(constr3);
query.descend("date_time").orderAscending();
ObjectSet result = query.execute();
msgList = (result == null) ? new ArrayList() : result;
return msgList;
}
/**
* 获取一个群最后一个消息的收发时间
* @param room
* @return
*/
public long getLastMsgDate(String room){
Query query = db.query();
query.constrain(LogMessage.class);
query.descend("from").constrain(room);
query.descend("date_time").orderDescending();
ObjectSet<LogMessage> result = query.execute();
long date_time = (result != null && result.size() > 0) ? result.get(0).getDate_time() : 0;
return date_time;
}
/**
* 保存一条消息到数据库
* @param msg
*/
public void saveMsg(LogMessage msg) {
if (db.ext().isClosed()) {
openDB4O(path);
}
db.store(msg);
db.commit();
}
/**
* 打开Db4o数据库
* @param path
*/
public void openDB4O(String path) {
File tempFile = new File(path);
String tempStr = tempFile.getAbsolutePath();
int index = tempStr.lastIndexOf(File.separatorChar);
if (index > 0) {
String path2 = tempStr.substring(0, tempStr.lastIndexOf(File.separatorChar));
File file = new File(path2);
if (!file.exists()) {
file.mkdirs();
}
}
db = Db4o.openFile(configuration, path);
}
public void closeDB4O() {
db.close();
}
public List<LogMessage> getAllMessage()
{
List<LogMessage> mymessage=null;
Query query = this.db.query();
query.constrain(LogMessage.class);
ObjectSet objset = query.execute();
mymessage = objset;
return mymessage;
}
public void save(String path,String perID,String remoteIP)
{
if (db.ext().isClosed()) {
openDB4O(path);
}
java.util.Date date = new java.util.Date();
java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String strDate = df.format(date); //当天日期
LogMessage lm = new LogMessage();
lm.setPerID(perID);
lm.setRemoteIP(remoteIP);
lm.setDate(strDate);
db.store(lm);
db.commit();
}
public static void main(String[] args) {
// }
}
发表评论
-
自定义注解之运行时注解(RetentionPolicy.RUNTIME)
2017-10-25 11:42 658对注解概念不了解的可以先看这个:Java注解基础概念总结 ... -
debug模式很慢的解决办法
2017-10-18 09:00 451今天照常使用MyEclipse 6.5 Blue Editi ... -
今天碰到项目中要做一个某一年月报表的页面的学习提高
2011-05-21 06:33 995今天在项目中要做一个月报表,由于我采用的是ef 4.1的框架, ... -
预警系统
2010-12-16 15:28 1373根据公司需求,所编写的一个预警系统框架,将lib1.zip和l ... -
对quartz使用框架调度总结
2010-11-17 10:56 1756在项目中的使用需求: 1.可以使用一个A程序定期的去扫描配置 ... -
利用反射给JAVABEAN实例赋值
2010-11-15 22:08 1419package com.util; import java. ... -
logback 日志记录到数据库中
2010-11-10 11:04 6181<!--不采用连接池的配 ... -
logback 关于日志发送邮件配置总结
2010-11-10 09:40 4135<configuration debug="f ... -
sql server语句优化实例
2010-11-10 08:42 1476SQL语句优化有一个很重要的方法: 在Where中的条件表达 ... -
在新的项目中使用logback来作为日志记录系统
2010-11-09 16:19 4209Logback手册中文版文档版本:0.1发布日期:2010年4 ... -
Quartz 监听器的应用
2010-11-08 17:32 2321当我在项目中用到任务调用的时候,有必要在每次调用任务和任务出现 ... -
编写批处理命令来执行JAVA文件
2010-11-04 11:13 1822JAVA工程路径结构 Project ------l ... -
Quartz定时任务框架学习总结
2010-11-01 10:58 1261首先关于Quartz的一篇详细介绍的文章可以参考我博客中的一篇 ... -
mysql中采用concat来拼接中文字符乱码解决方式
2010-10-13 17:47 2344mysql concat乱码问题解决concat(str1,s ... -
WEB工程加入FLEX技术,遇到跨域的问题
2010-09-16 08:15 1572在我FLEX博客中有提到怎么将FLEX整合到JAVA的WEB工 ... -
关于Struts2中如何去取得ServletContext的方法
2010-09-16 08:07 2724在我的上一篇文章中说到,将DB4O的DAO类放入到Servel ... -
SVN服务器配置总结
2010-09-16 07:40 3377软件下载 服务器和客户端安装 建立版本库(Reposito ...
相关推荐
自己自学对DB4o数据库的笔记,对象的SQL基本操作
对象数据库db4o的示例程序,对象数据库db4o, 对象数据库db4o
http://www.db4o.com db4o的官网,可下载最新版本,jar包在项目的database目录下,若构建路径报错请重新添加
db4o8.0以及db4o中文操作指南
db4o 是一个开源的纯面向对象数据库引擎,对于 Java 与 .NET 开发者来说都是一个简单易用的对象持久化工具,使用简单。同时,db4o 已经被第三方验证为具有优秀性能的面向对象数据库, 下面的基准测试图对 db4o 和...
db4o ,net db4o ,net db4o ,net db4o ,net
描述了db4o的信息要点和使用指南,讲述了一些特殊类,及其基本的使用
For the fastest start with db4o please work through the tutorial, available in different formats in the following folder: ./doc/tutorial/ If you are working with db4o for Java, it is recommended...
db4o .net2.0 db4o .net2.0db4o .net2.0 db4o .net2.0db4o .net2.0
DB4O 笔记+常用 JAR包 DB4O 笔记+常用 JAR包 DB4O 笔记+常用 JAR包 DB4O 笔记+常用 JAR包 DB4O 笔记+常用 JAR包
db4o最后发布的版本,包含全部源码、jar包,eclipse下的对象查看插件、全部说明文档等。
该资源为 db4o 之旅 系列文章: 1.介绍了面向对象数据库 db4o 的基本特性,并且与传统关系型数据库以及 OR 映射技术做了比较分析,读者可以体验到 db4o 的全新的面向对象存储的理念,并且给出了性能测试数据。 2....
可以查看、删除DB4O数据库中的数据,支持*.yap、*.db、*.data等DB4O数据库
DB4O 介绍信息.有兴趣的可以看看,了解一下.
本资料转自网上,仅供学习DB4O开发教程使用
非常好的Db4o资料,包括Db4o的七章内容详细介绍及相关的论文。
《DB4O系统应用之起步篇》.《DB4O系统应用之起步篇》.《DB4O系统应用之起步篇》.
DB4O 8.0 Object Manager Enterprise 对象浏览器,db4o-8.0-tutorial.pdf
db4o 权威指南 pdf 非常好
db4o 是一款开放源码对象导向数据库,能使 Java 和 .NET 开发人员不但大幅减低开发时间和成本, 同时能带来前所未有的效能. 另外, db4o 独有的对象导向数据库引擎能应用于免数据库管理人的流动装置或桌面平台, 套装...