工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 4677|回复: 19

EJB中的 Timer 看不明白 请各位高手解释一下!?

[复制链接]
发表于 2006-6-25 17:49 | 显示全部楼层 |阅读模式
例子在《精通EJB》第三版第310页,  由于基础比较差,在Bean类中很多看不懂,请高手们指点指点!
********看不懂的地方另外写在第三贴那了************

无状态会话Bean:
1.
远程接口: CleanDayLimitOrders.java

package coffee;

import javax.ejb.EJBObject;
import java.rmi.RemoteException;


public interface CleanDayLimitOrders extends EJBObject
{
        public void cleanPeriodicallyDayLimitOrders() throws RemoteException;

}



2.
Home接口:  CleanDayLimitOrdersHome.java
package coffee;

import javax.ejb.EJBHome;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import java.io.Serializable;


public interface CleanDayLimitOrdersHome extends EJBHome  
{
        CleanDayLimitOrders create() throws RemoteException,CreateException;
}

[ 本帖最后由 深圳情缘 于 2006-6-25 18:06 编辑 ]
 楼主| 发表于 2006-6-25 17:52 | 显示全部楼层

继续!!!Bean类

package coffee;

import javax.ejb.SessionContext;
import javax.ejb.SessionBean;
import javax.ejb.CreateException;
import javax.ejb.TimedObject;
import javax.ejb.TimerService;
import javax.ejb.Timer;
import java.util.TimeZone;
import java.util.Date;
import java.util.Calendar;
import java.util.SimpleTimeZone;
import java.util.GregorianCalendar;


public class CleanDayLimitOrdersBean implements SessionBean,TimedObject
{
        private SessionContext context;

        public CleanDayLimitOrdersBean(){}       
       
        public void cleanPeriodicallyDayLimitOrders()
        {
                //假定交易发生在NYSE、NASDAQ交易所
                String[] timezoneIDs = TimeZone.getAvailableIDs(-5*60*60*1000);
                SimpleTimeZone est = new SimpleTimeZone(-5*60*60*1000,timezoneIDs[0]);
               
                //提供规则
                est.setStartRule(Calendar.APRIL,1,Calendar.SUNDAY,2*60*60*1000);
                est.setEndRule(Calendar.OCTOBER,-1,Calendar.SUNDAY,2*60*60*1000);
               
                //获得calendar实例
                Calendar cal = new GregorianCalendar(est);
               
                //将calendar设置成当前时间
                cal.setTime(new Date());
               
                //计算当前时间和停止交易时间(16:00) 的差别
                int hourofday = cal.get(cal.HOUR_OF_DAY);
                int minuteofhour = cal.get(cal.MINUTE);

                long start = 0;
                if(hourofday<16)
                {
                        int hourdiff = 16 - hourofday - 1;
                        int mindiff = 60 - minuteofhour;
                        start = (hourdiff*60*60*1000)+(mindiff*60*1000);
                }
               
                //最后,从EJBContext对象中获得Timer服务,并创建相应的Timer 。
                TimerService timerService = context.getTimerService();
                Timer timer = timerService.createTimer(start,10000,null);
               
                System.out.println("Timer create to first expire after "+start+" milliseconds.");
                }
               
                public void ejbTimeout(Timer timer)
                {
                        System.out.println("将那些还未执行过的限价订单从RDBMS中删除");
                }
       

       
        public void setSessionContext(SessionContext context)
        {
                System.out.println("执行setSessionContext方法");
                this.context = context;
        }
        public void ejbActivate()
        {
        }
        public void ejbPassivate()
        {
        }
        public void ejbRemove()
        {
        }

        public void ejbCreate()throws CreateException
        {       
                System.out.println("执行ejbCreate方法");
        }
       
}
回复

使用道具 举报

 楼主| 发表于 2006-6-25 17:58 | 显示全部楼层

不明之处:

不知道下面代码具体的作用是什么??
然后那些(-5*60*60*1000);  (-5*60*60*1000,timezoneIDs[0]);(Calendar.APRIL,1,Calendar.SUNDAY,2*60*60*1000);之类的东西又有什么用
之前都没接触过这些东西,
看不懂:L
基本上下面这大断代码看的是一头雾水,不知道什么跟什么



//假定交易发生在NYSE、NASDAQ交易所
                String[] timezoneIDs = TimeZone.getAvailableIDs(-5*60*60*1000);
                SimpleTimeZone est = new SimpleTimeZone(-5*60*60*1000,timezoneIDs[0]);
               
                //提供规则
                est.setStartRule(Calendar.APRIL,1,Calendar.SUNDAY,2*60*60*1000);
                est.setEndRule(Calendar.OCTOBER,-1,Calendar.SUNDAY,2*60*60*1000);
               
                //获得calendar实例
                Calendar cal = new GregorianCalendar(est);//把est作为参数?也不明白
回复

使用道具 举报

 楼主| 发表于 2006-6-25 23:32 | 显示全部楼层

今天下午试了一下

今天下午试了一下  居然没有触发到下面这个方法!?
我是在15:30分左右运行的    等到16:05分都没见到下面这句话的输出
public void ejbTimeout(Timer timer)
                {
                        System.out.println("将那些还未执行过的限价订单从RDBMS中删除");
                }
回复

使用道具 举报

发表于 2006-6-25 23:59 | 显示全部楼层
hjack,wool不知去哪了?
无奈还不懂!
打算暑假开始学,楼主多多指教啊!
回复

使用道具 举报

 楼主| 发表于 2006-6-26 13:19 | 显示全部楼层

一起努力啦

现在看了都不会应用,郁闷

楼上基础这么好  应该很快就会了

暑假准备开始学HIBERNATE   和 SPRING   
暑假记得常回来看看啊
回复

使用道具 举报

发表于 2006-6-26 13:58 | 显示全部楼层
HIBERNATE 我看了一半,因为要考试就停了,剩下的也是暑假看。
就靠这个暑假了。
暑假我会一直在的。
回复

使用道具 举报

发表于 2006-6-26 14:00 | 显示全部楼层
i am sorry.  对ejb我也不是很懂。
回复

使用道具 举报

发表于 2006-6-26 14:03 | 显示全部楼层
原帖由 hjack 于 2006-6-26 14:00 发表
i am sorry.  对ejb我也不是很懂。


我是很不懂!
回复

使用道具 举报

发表于 2006-6-27 01:09 | 显示全部楼层
EJB我也是学习ING。。。回答不了楼上。。。我现在用spring框架。。。不过我上班后得用了,,,到时和楼主共同学习。。。
回复

使用道具 举报

发表于 2006-6-27 01:43 | 显示全部楼层
String[] timezoneIDs = TimeZone.getAvailableIDs(-5*60*60*1000);
  --东5区 GMT+5
                SimpleTimeZone est = new SimpleTimeZone(-5*60*60*1000,timezoneIDs[0]);
  --所属时区代码 PNT timezoneIDs[0],timezoneIDs[1]的话是MST

                est.setStartRule(Calendar.APRIL,1,Calendar.SUNDAY,2*60*60*1000);
--夏令时开始时间, 标准时间的4月 第一个星期 天 凌晨2点整
                est.setEndRule(Calendar.OCTOBER,-1,Calendar.SUNDAY,2*60*60*1000);
--夏令时结束时间,10月 最后一个星期天 凌晨2点整
回复

使用道具 举报

发表于 2006-6-27 01:48 | 显示全部楼层
Calendar cal = new GregorianCalendar(est);
EST是北美的时区的代码,GMT+5 忽略大小写
回复

使用道具 举报

发表于 2006-6-27 12:47 | 显示全部楼层
原帖由 wool王 于 2006-6-27 01:09 发表
EJB我也是学习ING。。。回答不了楼上。。。我现在用spring框架。。。不过我上班后得用了,,,到时和楼主共同学习。。。


还有我呢,你们不要嫌弃我啊!
回复

使用道具 举报

 楼主| 发表于 2006-6-27 13:23 | 显示全部楼层

哇 还真不是一般的复杂哦

原帖由 joe_233 于 2006-6-27 01:43 发表
String[] timezoneIDs = TimeZone.getAvailableIDs(-5*60*60*1000);
  --东5区 GMT+5
                SimpleTimeZone est = new SimpleTimeZone(-5*60*60*1000,timezoneIDs);
  --所属时区代码 PNT timezoneI ...



还真不是一般的复杂哦
这么难?莫非要学Hibernate    先?
回复

使用道具 举报

发表于 2006-6-27 22:42 | 显示全部楼层
....不用学这些...
只是EJB中一些很简单常用的类 方法

上面例子应用到的地方比如说网上炒汇平台,
汇市由纽约开市,然后随着地球公转到东京,香港,悉尼,...伦敦..等.
24小时不停顿,用户登陆的时候会判断该时区的编码,通过GMT转换为当地时间.
也可以通过判断正在开市地区的编码来确定交易标准时间.

两个时间都通过GMT转换所以才不会起冲突.

因为欧洲大部分地区到夏天会启用夏令时,为了不受影响EJB里面也有有关夏令时的方法使用。
可以设置启动时间和结束时间。在这段时间内,当地的时间与GMT时间不再是正常的时区偏差计算,还要加1.

比如说柏林在东一区,启用夏令时后当地时间应该为GMT+2  北京是GMT+8 所以两地相差是6小时而不是7小时
我们国家以前也用过夏令时,后来为了便于管理而取消
回复

使用道具 举报

发表于 2006-6-27 22:55 | 显示全部楼层
sorry,是随着地球自转
回复

使用道具 举报

发表于 2006-6-27 23:56 | 显示全部楼层
原帖由 深圳情缘 于 2006/6/27 05:23 发表



还真不是一般的复杂哦
这么难?莫非要学Hibernate    先?



你如果学EJB3的话就建议了解下hibernate先。
回复

使用道具 举报

发表于 2012-4-28 15:57 | 显示全部楼层
我们都还好,只是各自的身边再也出现不了那些曾经熟悉的影子。当年的我们,幸福的缺氧。
回复

使用道具 举报

发表于 2012-12-31 01:50 | 显示全部楼层
楼主辛苦了,鼓励一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-4-29 13:56

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表