warbaby
2005-04-20 14:13
楼上的,先搞清楚B/S结构是什么,你要的功能用纯B/S是没有办法解决的。在浏览器那一层上,只能是请求触发而不能是消息触发。

一般都是定时刷新页面读取数据库。或者你用一个自动刷新的页面定时去读自己接受到的消息,这算是比较严谨的做法。或者给客户端按些小软件,功能好做,但是违背了B/S的初衷

mengk
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();

SportsBaby1980
2005-04-21 08:50
借个地发表一个问题:我要实现一个站内消息系统

问题:甲给乙发了消息,乙的JSP界面如何知道有了新的消息并及时通知,数据定时刷新?观察者模式?

现在有一定的技术能够解决该类问题。

建议你研究一下Echo和jsf

SportsBaby1980
2005-04-21 08:54
存储过程的看法:

不能一刀切的否定存储过程。

使用存储过程要看情景:

如果操作用存储过程很省时间等等,为什么不用?

但不能滥用存储过程,一般涉及到性能等问题,才能考虑用。

banq
2005-04-25 10:13
存储过程不建议这样,如果需要如何实现,可参考我的Jdon框架结合缓存的优化。

编程如画国画,下笔要慎重,否则一个坏笔会破坏整个画面的构图,从此走向畸形,程序员要有:编码方向不能错,宁可不编码,没有设计好,胡乱下笔,会误导大批。

猜你喜欢