请教高手:J2EE使用定时器和对象的缓存...
多谢多谢!这几个问题搞定,我就爽的很来噢,多谢
2> 看不懂
3> 看下CallrableStatement就知道了
2. 缓存和操作失败是什么关系?上面就是基于缓存的。
3. 不推荐使用存储过程,违反可维护性、可拓展性,难于维护,只有编写存储过程的人知道其中诀窍,唯一优点是性能好,请问性能再快,也只能一台数据库服务器啊,如果访问量再上去,你用什么技术再提升呢?还是要回到可伸缩的分布式计算中间件的解决思路上。
一般都是定时刷新页面读取数据库。或者你用一个自动刷新的页面定时去读自己接受到的消息,这算是比较严谨的做法。或者给客户端按些小软件,功能好做,但是违背了B/S的初衷
1。java.util.Timer和java.util.TimerTask虽然功能上弱了点,但还是比较好用的两个工具类,能满足一般的应用。但要注意的是,如果时间间隔太短,而对某个表进行扫描,我觉得这样做是有问题的。比如,我每隔5秒钟要对N多通话记录(假如N的值比较大),进行计算话费,这时用Timer和TimerTask就会有问题了,因为每隔5秒它会开启一个新的线程,但是5秒前的线程可能并没有处理完所有的通话记录,这时就有可能会出现一条通话记录生成了多个话费的问题,哈哈,多收了用户的钱,这下麻烦了,小心人家告你,嘿嘿。。。
所以在用这两个类的时候一定要问一问,在我这个时间间隔中是否能处理完所有的数据?
2。通常缓存都是把数据或者对象暂时保存到内存的,我晕,你居然想到了对象序列化到文件,不知道文件IO很慢吗?与其这样还不如持久化到数据库呢!看你是否能将第一次创建的对象保存到静态的HashMap或ArrayList中。
3。“存储过程里面能直接返回一个类似于java里面的对象数组”。
哈哈,这个问题我原来就遇到过,说实话我也很讨厌这样做,但是没办法。我COPY一段代码给你吧,我不想做任何解释。
StringBuffer sb = new StringBuffer("{CALL sp_listschedule_local(?, ?, ?, ")
.append(" ?,?,?,?,?,?,?) }");
CallableStatement cstmt = conn.prepareCall(sb.toString());
int i = 1;
/*七个传入参数*/
cstmt.setString(i++, param.getRideDate());
cstmt.setString(i++, param.getIsDisCount());
cstmt.setString(i++, param.getStartStationId());
cstmt.setString(i++, param.getToStationId());
cstmt.setString(i++, param.getScheduleId());
cstmt.setInt(i++, param.getSellLimittedTime().intValue());
cstmt.setInt(i++, param.getSelfOrgId().intValue());
cstmt.setInt(i++, param.getIsBuPiao().intValue());
cstmt.setString(i++, param.getSqlStr());
/*一个输出参数*/
int[] retIndex = {i};
cstmt.registerOutParameter(i++, oracle.jdbc.driver.OracleTypes.CURSOR);
/*执行过程*/
cstmt.executeUpdate();
int j=0;
ResultSet rs = (ResultSet) cstmt.getObject(retIndex[j++]);
ListScheduleDto dto = ListScheduleRet.createNomalDtosFromResultSet(rs);
ListScheduleRet ret = new ListScheduleRet();
ret.setDto(dto);
cstmt.close();
现在有一定的技术能够解决该类问题。
建议你研究一下Echo和jsf
编程如画国画,下笔要慎重,否则一个坏笔会破坏整个画面的构图,从此走向畸形,程序员要有:编码方向不能错,宁可不编码,没有设计好,胡乱下笔,会误导大批。
定时器:你可以使用用操作系统的定时器触发你的java程序(就是一个普通的java程序),如unix底下的crontab,当然你可以选择部署在应用服务器所在的机器上。
缓存:不知道你的需求,至于序列化,java中实现了serializable接口就可以序列化,具体看api文档。
至于抛弃数据库的高论,我看了文章,不知道除了对象和模式以外(我只是说您所理解的高度),不知道你知不知道所有业务逻辑的建模都是有他的数学基础的,建议你去看看关系数学。如果您是说设计那算我没说了,新来的那些毕业生做了3天java都可以跟我口若悬河的谈设计的,呵呵。
哎。。。。无语
定时器:你可以使用用操作系统的定时器触发你的java程序(就是一个普通的java程序),如unix底下的crontab,当然你可以选择部署在应用服务器所在的机器上。
缓存:不知道你的需求,至于序列化,java中实现了serializable接口就可以序列化,具体看api文档。
至于抛弃数据库的高论,我看了你的文章,不知道除了对象和模式以外(我只是说您所理解的高度),不知道你知不知道所有业务逻辑的建模都是有他的数学基础的,建议你去看看关系数学。如果您是说设计那算我没说了,新来的那些毕业生做了3天java都可以跟我口若悬河的谈设计的,呵呵。
〉数据库是什么东西?只是对象持久化之一
无语。。。
http://www.opensymphony.com/quartz/
http://jcrontab.sourceforge.net/index.shtml
都是不e的x, 不^我比^推] Quartz
都可以我的子笾胁榭椿臼褂玫馁Y料 ( http://www.sentom.net/list.asp?id=32 )
另外, Caching 的部分, 其 JCP 原本要定x相P的 Spec
http://www.jcp.org/en/jsr/detail?id=107
但是 2001 年之後tt]有幼, 自然在 Opensource 中也有各N作方式
例如 jCache..
http://jcache.sourceforge.net/
不^通常各 Application Server Vendor 都有相P的作
JBoss 的 Cache 也是不e
http://www.jboss.org/products/jbosscache
如果你研究一下 JBossCache 泻艽蟮Wc突破
然 jakarta commons 也有相P的 cache 作
http://jakarta.apache.org/commons/sandbox/cache/
不^F在在研l中, 已可以玩一玩了
如果要利用在 Hibernate 冉陀幸韵 libs,
OSCache ( http://www.opensymphony.com/oscache/ )
EHcache ( http://ehcache.sourceforge.net/ )
@篇文章得很完整, 可以⒖ ( http://forum.javaeye.com/viewtopic.php?t=6593&postdays=0&postorder=asc&start=0 )