EJB中的 Timer 看不明白 请各位高手解释一下!?
例子在《精通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 编辑 ]
继续!!!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);
//提供规则
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方法");
}
}
不明之处:
不知道下面代码具体的作用是什么??然后那些(-5*60*60*1000);(-5*60*60*1000,timezoneIDs);(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);
//提供规则
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作为参数?也不明白
今天下午试了一下
今天下午试了一下居然没有触发到下面这个方法!?我是在15:30分左右运行的 等到16:05分都没见到下面这句话的输出
public void ejbTimeout(Timer timer)
{
System.out.println("将那些还未执行过的限价订单从RDBMS中删除");
} hjack,wool不知去哪了?
无奈还不懂!
打算暑假开始学,楼主多多指教啊!
一起努力啦
现在看了都不会应用,郁闷楼上基础这么好应该很快就会了
暑假准备开始学HIBERNATE 和 SPRING
暑假记得常回来看看啊 HIBERNATE 我看了一半,因为要考试就停了,剩下的也是暑假看。
就靠这个暑假了。
暑假我会一直在的。 i am sorry.对ejb我也不是很懂。 原帖由 hjack 于 2006-6-26 14:00 发表
i am sorry.对ejb我也不是很懂。
我是很不懂! EJB我也是学习ING。。。回答不了楼上。。。我现在用spring框架。。。不过我上班后得用了,,,到时和楼主共同学习。。。 String[] timezoneIDs = TimeZone.getAvailableIDs(-5*60*60*1000);
--东5区 GMT+5
SimpleTimeZone est = new SimpleTimeZone(-5*60*60*1000,timezoneIDs);
--所属时区代码 PNT timezoneIDs,timezoneIDs的话是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点整 Calendar cal = new GregorianCalendar(est);
EST是北美的时区的代码,GMT+5 忽略大小写 原帖由 wool王 于 2006-6-27 01:09 发表
EJB我也是学习ING。。。回答不了楼上。。。我现在用spring框架。。。不过我上班后得用了,,,到时和楼主共同学习。。。
还有我呢,你们不要嫌弃我啊!
哇 还真不是一般的复杂哦
原帖由 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 先? ....不用学这些...
只是EJB中一些很简单常用的类 方法
上面例子应用到的地方比如说网上炒汇平台,
汇市由纽约开市,然后随着地球公转到东京,香港,悉尼,...伦敦..等.
24小时不停顿,用户登陆的时候会判断该时区的编码,通过GMT转换为当地时间.
也可以通过判断正在开市地区的编码来确定交易标准时间.
两个时间都通过GMT转换所以才不会起冲突.
因为欧洲大部分地区到夏天会启用夏令时,为了不受影响EJB里面也有有关夏令时的方法使用。
可以设置启动时间和结束时间。在这段时间内,当地的时间与GMT时间不再是正常的时区偏差计算,还要加1.
比如说柏林在东一区,启用夏令时后当地时间应该为GMT+2北京是GMT+8 所以两地相差是6小时而不是7小时
我们国家以前也用过夏令时,后来为了便于管理而取消 sorry,是随着地球自转 原帖由 深圳情缘 于 2006/6/27 05:23 发表
还真不是一般的复杂哦
这么难?莫非要学Hibernate 先?
你如果学EJB3的话就建议了解下hibernate先。 我们都还好,只是各自的身边再也出现不了那些曾经熟悉的影子。当年的我们,幸福的缺氧。 楼主辛苦了,鼓励一下
页:
[1]