我正在尝试替换我们的应用程序中的现有逻辑,该逻辑由于我们遇到的最近问题而将持久性程序计时器用于非持久性计时器。 WAS用于写入定时器持久性信息的文件系统已满,Derby数据库以只读模式重新启动,使我们的应用程序无法触发定时器发布,我们不得不重新启动服务器来修复它。
这是用于触发编程计时器的当前代码
Timer timer = timerService.createTimer(100,eventContextWrapper);
根据http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.html中引用的示例,将我们的代码更改为
TimerConfig tC = new TimerConfig(eventContextWrapper, false);
Timer timer = timerService.createSingleActionTimer(100, tC);
但我们正面临以下异常
[5/31/17 22:18:23:348 GMT+08:00] 000000bf SystemErr R org.omg.CORBA.MARSHAL: Unable to read value from underlying bridge : null vmcid: IBM minor code: 896 completed: No
[5/31/17 22:18:23:348 GMT+08:00] 000000bf SystemErr R at com.ibm.rmi.iiop.CDRReader.read_value(CDRReader.java:771)
[5/31/17 22:18:23:348 GMT+08:00] 000000bf SystemErr R at com.ibm.rmi.iiop.EncoderInputStream.read_value(EncoderInputStream.java:840)
[5/31/17 22:18:23:348 GMT+08:00] 000000bf SystemErr R at com.ibm.ws.ejbcontainer.util.ORBObjectCopierImpl.copy(ORBObjectCopierImpl.java:52)
[5/31/17 22:18:23:348 GMT+08:00] 000000bf SystemErr R at com.ibm.ws.ejbcontainer.util.ObjectUtil.copy(ObjectUtil.java:159)
[5/31/17 22:18:23:349 GMT+08:00] 000000bf SystemErr R at com.ibm.ejs.container.TimerNpImpl.<init>(TimerNpImpl.java:240)
[5/31/17 22:18:23:349 GMT+08:00] 000000bf SystemErr R at com.ibm.ejs.container.TimerNpImpl.<init>(TimerNpImpl.java:276)
[5/31/17 22:18:23:349 GMT+08:00] 000000bf SystemErr R at com.ibm.ws.runtime.component.WASEJBRuntimeImpl.createTimer(WASEJBRuntimeImpl.java:1371)
[5/31/17 22:18:23:349 GMT+08:00] 000000bf SystemErr R at com.ibm.ejs.container.BeanO.createSingleActionTimer(BeanO.java:2551)
com.test.customer.event.EventTimerBean.triggerTimer(EventTimerBean.java:62)
第62行是调用createSingleActionTimer的地方。
做了一些分析并且无法修复。任何领导都会有所帮助..
答案 0 :(得分:0)
最终发现EventContextWrapper中的一个类不可序列化,这就是我们收到上述错误的原因。我们更改了该类以实现serializable并且它工作正常。还是不确定,当使用持久计时器时它是如何工作的。