tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Radhakrishna Kalyan <nrkkal...@gmail.com>
Subject Re: Exception while running openejb application
Date Sat, 01 Nov 2014 21:51:07 GMT
Hi Romain,

@Lock is on OverdueBatchTimerService which is declared with @Singleton.
Do you mean to say that we can not use @Stateless classes in any other
class which is declared with @Lock?

I too guess that it may be a timing issue. We have not configured any kind
of thread management.
Can you please provide any pointers how to solve the timing issue?

More over if you have observed there is one more exception. I am not clear
why does this happen.
    org.apache.openejb.core.timer.TimerStoreException: Transaction has been

This was caused in the finally block while performing
@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());*
        }
    }

My intention is to create a timer service to run every 5 mins to perform
certain task. I have created single action timer only to make sure if the
task takes more than 5 mins (i.e 10 mins) then a new timer task should not
start in the 10th minute, before even completing the first schedule task.


Thanks in advance.

Regards.
Kalyan





On Sat, Nov 1, 2014 at 10:26 PM, Romain Manni-Bucau <
rmannibucau@tomitribe.com> wrote:

> 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" <nrkkalyan@gmail.com> a écrit
> :
>
> > Sorry if anyone is missing the attachment file.
> >
> >
> > On Sat, Nov 1, 2014 at 9:22 PM, Radhakrishna Kalyan <nrkkalyan@gmail.com
> >
> > 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>
> >
>



-- 
Thanks and Regards
N Radhakrishna Kalyan

P:  +46 733 312 584
http://about.me/nrkkalyan
<http://about.me/nrkkalyan>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message