Now that I have all my Hibernate issues resolved, I am back to my 
initial question. How can you control the UserTransaction in long 
running processes?

I have a long running quartz job. Periodically I like to commit the 
transaction, just to speed up performance and to make sure the 
transaction doesn't timeout.

I tried interacting with the UserTransaction by using the @In 
UserTransaction. I would try to use userTransaction.commit(), but I 
always get an error about not being able to nest transactions.

So I took a different approach and applied the @TransactionAttribute to 
specific methods in an ejb3 used in the quartz job. Now, I get errors 
like "Transaction[01:47c9dd5d]: timed out after -1 seconds." and 
"Transaction[01:47c9dd5d]: timed out after 0 seconds." So I am stumped.

How can I regulate transactions within a long running process? Thanks.


Matt

Scott Ferguson wrote:
> On Feb 29, 2008, at 4:58 AM, Matt Johnston wrote:
> 
>> I've downloaded the latest 3.1.5 and tried again with that version.  
>> I am
>> still getting the same results. I have a quartz job that calls an  
>> EJB3.
>> That bean will persist an object to the database. It looks like the
>> transaction is committing, but my data never makes it to the database.
> 
> Thanks Matt,
> 
> I've filed this as http://bugs.caucho.com/view.php?id=2482
> 
> I'm fairly certain the issue is in the @PersistenceContext/ 
> EntityManager.   I don't think the EntityManager is getting registered  
> properly with the transaction context.
> 
> -- Scott
> 
>>
>> Here is the code for my bean:
>> @PersistenceContext(unitName="npguide")
>>      private EntityManager em;
>>
>> @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
>>      public void grab(String url, Date date) {
>>              log.info("starting grab");
>>              Report report = new Report();
>>              report.setDate(new Date());
>>              report.setSection("test section");
>>              report.setText("this is my test text");
>>              em.persist(report);
>>              log.info("report: " + report.getId()+" " + report);
>>      }
>>
>> The Resin log files show this.
>>
>> [06:55:52.307] {NPGuideJobsScheduler_Worker-1}  
>> Transaction[01:b903dcdb]
>> begin
>>  INFO (ReportGrabberBean.java:147) - starting grab
>>  INFO (ReportGrabberBean.java:153) - report: null
>> [EMAIL PROTECTED] Feb 29 06:55:52 CST 2008]
>> [06:55:52.345] {NPGuideJobsScheduler_Worker-1}  
>> Transaction[01:b903dcdb]
>> committing
>>
>> So it says the transaction is committing, but I don't see anything in
>> the database.
>>
>>
>> Matt
>>
>> Scott Ferguson wrote:
>>> On Feb 21, 2008, at 7:18 PM, majohnst wrote:
>>>
>>>> I am trying to create a Quartz job that saves some data to my
>>>> database. The
>>>> quartz process is working correctly and my jobs runs, I can just
>>>> never get
>>>> the data committed to my database.
>>>>
>>>> In my job, I call an EJB3 that accesses my EntityManager.  The
>>>> method in my
>>>> EJB is marked with
>>>> @TransactionAttribute(TransactionAttributeType.REQUIRED)
>>>> and I can access the UserTransaction by injecting it into my bean by
>>>> @In
>>>> protected UserTransaction ut;
>>> If you turn on level="fine" or "finer" logging, you'll see when
>>> transactions are started and completed.
>>>
>>>> When I call my method, the UserTransaction says that it is active. I
>>>> then
>>>> persist my object to the EntityManager. When the quartz job is done,
>>>> the new
>>>> data was never committed to the database. So I tried to manually
>>>> commit the
>>>> usertransaction at the end of my method by using ut.commit(), but
>>>> then I get
>>>> an error:
>>>> "Can't commit outside of a transaction.  Either the
>>>> UserTransaction.begin()
>>>> is missing or the transaction has already been committed or rolled
>>>> back."
>>> The logging message would show whether the issue is the transactions
>>> not begin/committing(), or if the EntityManager is failing to  
>>> register
>>> with the transaction (or commit or similar).
>>>
>>>> So how can I manage transactions in an EJB3 outside of a webpage
>>>> request?
>>> There's no difference between a webpage request and something like a
>>> quartz job with the exception of the context classloader.  The
>>> transactions should be starting the same in both cases.
>>>
>>> -- Scott
>>>
>>>> -- 
>>>> View this message in context: 
>>>> http://www.nabble.com/Transactions-and-Quartz-tp15626725p15626725.html
>>>> Sent from the Resin mailing list archive at Nabble.com.
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> resin-interest mailing list
>>>> resin-interest@caucho.com
>>>> http://maillist.caucho.com/mailman/listinfo/resin-interest
>>>
>>>
>>> _______________________________________________
>>> resin-interest mailing list
>>> resin-interest@caucho.com
>>> http://maillist.caucho.com/mailman/listinfo/resin-interest
>>>
>>>
>>
>> -- 
>>
>> Matt Johnston
>> http://www.lattaoutdoors.com
>> http://www.gearapalooza.com
>>
>>
>> _______________________________________________
>> resin-interest mailing list
>> resin-interest@caucho.com
>> http://maillist.caucho.com/mailman/listinfo/resin-interest
> 
> 
> 
> _______________________________________________
> resin-interest mailing list
> resin-interest@caucho.com
> http://maillist.caucho.com/mailman/listinfo/resin-interest
> 
> 


-- 

Matt Johnston
http://www.lattaoutdoors.com
http://www.gearapalooza.com


_______________________________________________
resin-interest mailing list
resin-interest@caucho.com
http://maillist.caucho.com/mailman/listinfo/resin-interest

Reply via email to