|
|
|
请教高手:J2EE使用定时器和对象的缓存...
作者:xucc80
发表时间:2005年04月19日 19:58
回复
原贴网址:
http://www.jdon.com/jivejdon/thread/20017.html
目前遇到几个问题,请教一下有经验的人:1,在java的J2EE应用开发中,怎么使用定时器,比如每隔5分钟,去扫描某个表,执行一个特定的操作。2,缓存,当某个操作失败的时候,怎么使用缓存,记得好像java里面可以把一个对象序列化为一个本地文件之类的,是不是有这种搞法,缓存之后,每隔一定的时间去进行某种操作,比如利用缓存的数据,调用一个web service之类...3,存储过程里面能直接返回一个类似于java里面的对象数组,类似结果集的东西吗 多谢多谢!这几个问题搞定,我就爽的很来噢,多谢
|
|
Re: 请教高手:J2EE使用定时器和对象的缓存...
|
发表: 2005年04月19日 20:48
|
回复
|
|
|
|
1> session bean好像有定时功能。也可以用java.util.Timer,虽然J2EE规范不赞成你自己创建线程
2> 看不懂
3> 看下CallrableStatement就知道了
|
|
|
|
Re: 请教高手:J2EE使用定时器和对象的缓存...
|
发表: 2005年04月19日 21:06
|
回复
|
|
|
|
关于你的第二点,我发表点看法 实现这个的方案比较多,例如保存为文件,序列化,保存到数据库等。 总之,能把对象的状态保存,然后能再取得即可。
|
|
|
|
Re: 请教高手:J2EE使用定时器和对象的缓存...
|
发表: 2005年04月20日 08:17
|
回复
|
|
|
|
我的解决方案比较特殊 供参考: 1. 在J2EE中不推荐定时扫描数据库,而是使用观察者模式、JMS等,当内存该状态发生变化时,通知执行某特定事件,这种方式可降低数据库的负载。既然用了中间件,就尽量分载,否则没有意义。
2. 缓存和操作失败是什么关系?上面就是基于缓存的。
3. 不推荐使用存储过程,违反可维护性、可拓展性,难于维护,只有编写存储过程的人知道其中诀窍,唯一优点是性能好,请问性能再快,也只能一台数据库服务器啊,如果访问量再上去,你用什么技术再提升呢?还是要回到可伸缩的分布式计算中间件的解决思路上。
|
|
|
|
Re: 请教高手:J2EE使用定时器和对象的缓存...
|
发表: 2005年04月20日 10:04
|
回复
|
|
|
|
借个地发表一个问题:我要实现一个站内消息系统 问题:甲给乙发了消息,乙的JSP界面如何知道有了新的消息并及时通知,数据定时刷新?观察者模式?
|
|
|
|
Re: 请教高手:J2EE使用定时器和对象的缓存...
|
发表: 2005年04月20日 14:13
|
回复
|
|
|
|
楼上的,先搞清楚B/S结构是什么,你要的功能用纯B/S是没有办法解决的。在浏览器那一层上,只能是请求触发而不能是消息触发。
一般都是定时刷新页面读取数据库。或者你用一个自动刷新的页面定时去读自己接受到的消息,这算是比较严谨的做法。或者给客户端按些小软件,功能好做,但是违背了B/S的初衷
|
|
|
|
Re: 请教高手:J2EE使用定时器和对象的缓存...
|
发表: 2005年04月20日 14:34
|
回复
|
|
|
|
有时候事情不是向想象的那样的,为了保护对原有系统的投入,不会因为要做新的应用,就把原来的东西全部换掉。对于异构系统的集成,经常会碰到这样的问题。所以在这个基础上,首先考虑的是问题来了搞不搞的定,其次才是如何能做得更好。不知道我的说法大家是否赞成。
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();
|
|
|
|
Re: 请教高手:J2EE使用定时器和对象的缓存...
|
发表: 2005年04月21日 08:50
|
回复
|
|
|
|
借个地发表一个问题:我要实现一个站内消息系统 问题:甲给乙发了消息,乙的JSP界面如何知道有了新的消息并及时通知,数据定时刷新?观察者模式?
现在有一定的技术能够解决该类问题。 建议你研究一下Echo和jsf
|
|
|
|
Re: 请教高手:J2EE使用定时器和对象的缓存...
|
发表: 2005年04月21日 08:54
|
回复
|
|
|
|
存储过程的看法: 不能一刀切的否定存储过程。 使用存储过程要看情景: 如果操作用存储过程很省时间等等,为什么不用? 但不能滥用存储过程,一般涉及到性能等问题,才能考虑用。
|
|
|
|
Re: 请教高手:J2EE使用定时器和对象的缓存...
|
发表: 2005年04月25日 10:13
|
回复
|
|
|
|
存储过程不建议这样,如果需要如何实现,可参考我的Jdon框架结合缓存的优化。
编程如画国画,下笔要慎重,否则一个坏笔会破坏整个画面的构图,从此走向畸形,程序员要有:编码方向不能错,宁可不编码,没有设计好,胡乱下笔,会误导大批。
|
|
|
|
Re: 请教高手:J2EE使用定时器和对象的缓存...
|
发表: 2005年04月30日 11:50
|
回复
|
|
|
|
多谈问题,少谈主义!
定时器:你可以使用用操作系统的定时器触发你的java程序(就是一个普通的java程序),如unix底下的crontab,当然你可以选择部署在应用服务器所在的机器上。 缓存:不知道你的需求,至于序列化,java中实现了serializable接口就可以序列化,具体看api文档。
至于抛弃数据库的高论,我看了文章,不知道除了对象和模式以外(我只是说您所理解的高度),不知道你知不知道所有业务逻辑的建模都是有他的数学基础的,建议你去看看关系数学。如果您是说设计那算我没说了,新来的那些毕业生做了3天java都可以跟我口若悬河的谈设计的,呵呵。
|
|
|
|
Re: 请教高手:J2EE使用定时器和对象的缓存...
|
发表: 2005年04月30日 12:03
|
回复
|
|
|
|
>数据库是什么东西?只是对象持久化之一
哎。。。。无语
|
|
|
|
Re: 请教高手:J2EE使用定时器和对象的缓存...
|
发表: 2005年04月30日 12:04
|
回复
|
|
|
|
多谈问题,少谈主意!
定时器:你可以使用用操作系统的定时器触发你的java程序(就是一个普通的java程序),如unix底下的crontab,当然你可以选择部署在应用服务器所在的机器上。 缓存:不知道你的需求,至于序列化,java中实现了serializable接口就可以序列化,具体看api文档。
至于抛弃数据库的高论,我看了你的文章,不知道除了对象和模式以外(我只是说您所理解的高度),不知道你知不知道所有业务逻辑的建模都是有他的数学基础的,建议你去看看关系数学。如果您是说设计那算我没说了,新来的那些毕业生做了3天java都可以跟我口若悬河的谈设计的,呵呵。
〉数据库是什么东西?只是对象持久化之一
无语。。。
|
|
|
|
Re: 请教高手:J2EE使用定时器和对象的缓存...
|
发表: 2005年05月07日 02:01
|
回复
|
|
|
|
|
You can check JMX Time service. Use scheduler can do what you want
|
|
|
|
Re: 请教高手:J2EE使用定时器和对象的缓存...
|
发表: 2005年05月07日 11:07
|
回复
|
|
|
|
J2EE Timer 其利用 java.util.Timer 就可以得很好了 如果你想要比^}s的 Timer F 可以利用 Opensource 中的 Quartz or JCrontab
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.java***.com/viewtopic.php?t=6593&postdays=0&postorder=asc&start=0 )
|
|
|
|
这个主题共有 20 回复 / 2 页 [
1 2
下一页
]
| |
|
|
|
|