Почему непостоянный таймер ejb не срабатывает?

Я пытаюсь заменить существующую логику в нашем приложении, которая использует постоянные программные таймеры на непостоянные таймеры из-за недавней проблемы, с которой мы столкнулись. Файловая система, используемая 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.

Сделали некоторый анализ и не смогли исправить то же самое. любое руководство будет полезно..

1 ответ

В конце концов обнаружили, что один из классов в EventContextWrapper не сериализуем, и поэтому мы получили вышеуказанную ошибку. Мы изменили этот класс для реализации сериализуемого, и это сработало. Все еще не уверен, как получилось, когда использовался постоянный таймер.

Другие вопросы по тегам