First stateless and @lock is not useful. Then i guess you just have a timing issue due to the use of asynch. Did you configure it? Default is 3 threads, can be too few for you. Le 1 nov. 2014 22:21, "Radhakrishna Kalyan" <[email protected]> a écrit :
> Sorry if anyone is missing the attachment file. > > > On Sat, Nov 1, 2014 at 9:22 PM, Radhakrishna Kalyan <[email protected]> > wrote: > >> >> >> Hi, >> >> Yesterday we had deployed our application in our production for the first >> time which was developed using OpenEJB standalone. >> But we got an exception after a while when we tried to perform certain >> operation. >> Please find the attached exception file. >> >> The application shall read certain data from a table(Invoice) in database >> and create an entry in an another table (BatchOrder). After that it shall >> create an xml message using that data >> and send to a jms queue. >> In the console log everything looks fine and the jms message has been >> sent. >> In the console log the id of the newly created BatchOrder record is >> printed, but at the end when we check the database no record has been >> created in the table BatchOrder. >> >> The classes involved are 3: >> BatchManager >> BatchOrderDao >> OverdueBatchTimerService >> >> Here is the following code snippet of my application. >> >> >> --------------------------------------------------------------------------------------------------------------------------- >> @Stateless >> public class BatchManager{ >> @EJB >> private BatchOrderDao batchOrderDao; >> >> @Asynchronous >> @Lock(LockType.READ) >> public void createBatchMessage(...){ >> ...Some code to read Invoice table... >> >> batchOrderDao.create(batchOrder); >> >> ...Some more code to send jms message... >> >> } >> } >> >> >> --------------------------------------------------------------------------------------------------------------------------- >> @Stateless >> public class BatchOrderDao{ >> >> @PersistenceContext(unitName = "datasource") >> private EntityManager entityManager; >> >> public void create(BatchOrder entity){ >> entityManager.persist(entity); >> entityManager.flush(); >> } >> >> @SuppressWarnings("unchecked") >> public List<Long> findBatchesWithOverdueReceipts(final Date date) { >> final Criteria criteria = >> getSession().createCriteria(BatchOrder.class); >> >> criteria.setProjection(Projections.distinct(Projections.property("iId"))); >> criteria.add(Restrictions.isNull("iAlarmed")); >> ....Some more Restrictions..... >> return criteria.list(); >> } >> >> } >> >> >> --------------------------------------------------------------------------------------------------------------------------- >> @Entity >> @Cacheable >> @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) >> @Table(name = "BATCH_ORDER") >> public class BatchOrder { >> private static final long serialVersionUID = 1L; >> >> @Id >> @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "IdSeq") >> @SequenceGenerator(name = "IdSeq", sequenceName = "BOID_SEQ", >> allocationSize = 1) >> @Column(name = "BO_ID", unique = true, nullable = false, updatable = >> false) >> private Long iId; >> >> @Column(name = "BO_ALARMED", unique = false, nullable = true, updatable >> = true) >> private Date iAlarmed; >> >> .... Some more fields.... >> >> } >> >> --------------------------------------------------------------------------------------------------------------------------- >> @Singleton >> @Startup >> @Lock(LockType.READ) >> private class OverdueBatchTimerService{ >> @Inject >> private BatchOrderDao dao; >> @Resource >> private TimerService timerService; >> private static final long _5MINUTES_IN_MILLISECONDS = 5l * 60l * >> 1000l; >> >> @PostConstruct >> public void initialize() throws Exception { >> timerService.createSingleActionTimer(_5MINUTES_IN_MILLISECONDS, >> new TimerConfig()); >> } >> >> @Timeout >> public void onTimeout(final Timer timer) { >> try{ >> .. Some Code.... >> dao.findBatchesWithOverdueReceipts(time); >> .... Some more code.... >> } catch (final Exception ignore) { >> LOG.error("Some exception occured while excecuting onTimeout, >> but IGNORED.", ignore); >> } finally { >> >> timerService.createSingleActionTimer(_5MINUTES_IN_MILLISECONDS, new >> TimerConfig()); >> } >> } >> } >> >> --------------------------------------------------------------------------------------------------------------------------- >> >> Please let me know if I am making any mistake. >> >> >> -- >> Thanks and Regards >> N Radhakrishna Kalyan >> >> P: +46 733 312 584 >> http://about.me/nrkkalyan >> <http://about.me/nrkkalyan> >> > > > > -- > Thanks and Regards > N Radhakrishna Kalyan > > P: +46 733 312 584 > http://about.me/nrkkalyan > <http://about.me/nrkkalyan> >
