I think async usage leadd to some random execution order. Ensure it is not random then it should work Le 2 nov. 2014 08:38, "Nrkkalyan" <[email protected]> a écrit :
> Hi > > Thank you. Can you please elaborate what do you mean by synchronously. > > Regards > /Kalyan > 0733312584 > > PS: I am bad at spelling because I use mobile. > > > On 2 nov 2014, at 08:04, Romain Manni-Bucau <[email protected]> > wrote: > > > > This is an app exception and surely a timing issue. Rewrite the app > > synchronously it will work so i sadly think it is on your side > > Le 1 nov. 2014 22:24, "Radhakrishna Kalyan" <[email protected]> a > écrit : > > > >> Sorry > >> Please find the exception at the following url > >> > >> > >> > https://drive.google.com/file/d/0B9j0dIS5bS0wYy1OOE5iaFNKaUU/view?usp=sharing > >> > >> > >> On Sat, Nov 1, 2014 at 10:20 PM, Romain Manni-Bucau < > [email protected] > >> wrote: > >> > >>> Hi > >>> > >>> I dont see any attached file, can you gist or pastebin it? > >>> Le 1 nov. 2014 21:23, "Radhakrishna Kalyan" <[email protected]> a > >> écrit > >>> : > >>> > >>>> > >>>> > >>>> 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> > >> >
