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>
>

Reply via email to