Hi,
I am sorry, I am not clear, what do you mean by random execution order.
Our requirement is, we have 2 tasks :
*Task1:* The @Asynchronous method, BatchManager.createBatchMessage() is
triggered by a different application through a http rest request.
As I mentioned previously, the goal of this method is to create
a BatchOrder entity in database and send jms message by reading Invoices
table, with all the invoices as xml to a different application. The reason
to use @Asynchronous because the method can take 30-50 minutes to complete
and we don't the http request to wait so long.
*Task2:* OverdueBatchTimerService is scheduled to run every 5 minutes to
find all the batchorders with certain criteria and send an email if the
criteria matches.
If you observe in both tasks the common is the BatchOrder table. Task1 is
inserting into that table and Task2 is selecting from that table.
I believe that both tasks run in 2 different threads, so I am not clear how
can an exception caused in Task2 caused rollback of the transaction in
Task1.
Is it possible?
On Sun, Nov 2, 2014 at 8:45 AM, Romain Manni-Bucau <[email protected]>
wrote:
> 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>
> > >>
> >
>
--
Thanks and Regards
N Radhakrishna Kalyan
P: +46 733 312 584
http://about.me/nrkkalyan
<http://about.me/nrkkalyan>