Hi Armin,

Ya, I am using declarative transaction. Thanks a lot for your help.

Regards,
Stephen

>-----Original Message-----
>From: Armin Waibel [mailto:[EMAIL PROTECTED] 
>Sent: 29 November 2003 09:00
>To: OJB Users List
>Subject: Re: Container managed Transaction
>
>
>Hi Stephen,
>
>Stephen Ting wrote:
>
>> Hi Armin,
>> 
>> Ya, I didn't knows I have to use setRollbackOnly() to rollback on 
>> cm-tx. Bad, on my limited Knowledge on J2EE.
>> But when I include the setRollbackOnly() just before the 
>method return
>> statement. I get the following exception. Is this expected 
>or there is
>> something wrong which I didn't realize or
>> Overlook.
>
>This is expected, signals that ODMG-api does not commit.
>By the way, I forget to say this will only work with declarative tx 
>(cm-tx), if you are using programmatic tx (bm-tx) you have to 
>use the "normal" userTransaction.rollback()/setRollbackOnly() methods.
>
>regards,
>Armin
>
>
>> 
>> Your help are very much appreciated.
>> 
>> Regards,
>> Stephen
>> 
>> 2003-11-29 08:39:23,514 INFO  [STDOUT] 
>> [org.apache.ojb.odmg.J2EETransactionImpl] ERROR: 2003-11-29 
>> 08:39:23,514 INFO  [STDOUT] Could not commit, because tx status was 
>> marked rollback 2003-11-29 08:39:23,530 ERROR [STDERR]
>> org.apache.ojb.broker.OJBRuntimeException: Could not commit, 
>because tx
>> status was marked rollback
>>      at
>> 
>org.apache.ojb.odmg.J2EETransactionImpl.beforeCompletion(Unknow
>n Source)
>>      at
>> 
>org.jboss.tm.TransactionImpl.doBeforeCompletion(TransactionImpl
>.java:130
>> 4)
>>      at
>> org.jboss.tm.TransactionImpl.rollback(TransactionImpl.java:452)
>>      at
>> 
>org.jboss.ejb.plugins.TxInterceptorCMT.endTransaction(TxInterce
>ptorCMT.j
>> ava:390)
>>      at
>> 
>org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxIn
>terceptor
>> CMT.java:277)
>>      at
>> 
>org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.
>java:128)
>>      at
>> 
>org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterc
>eptor.jav
>> a:118)
>>      at
>> org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:191)
>>      at
>> 
>org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(Prox
>yFactoryF
>> inderInterceptor.java:122)
>>      at
>> 
>org.jboss.ejb.StatelessSessionContainer.internalInvoke(Stateles
>sSessionC
>> ontainer.java:331)
>>      at org.jboss.ejb.Container.invoke(Container.java:700)
>>      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>      at
>> 
>sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccesso
>rImpl.jav
>> a:39)
>>      at
>> 
>sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMetho
>dAccessor
>> Impl.java:25)
>>      at java.lang.reflect.Method.invoke(Method.java:324)
>>      at
>> 
>org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(Reflect
>edMBeanDi
>> spatcher.java:284)
>>      at
>> org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:546)
>>      at
>> org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:101)
>>      at
>> 
>org.jboss.invocation.InvokerInterceptor.invoke(InvokerIntercept
>or.java:9
>> 0)
>>      at
>> 
>org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterc
>eptor.jav
>> a:46)
>>      at
>> 
>org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:45)
>>      at
>> 
>org.jboss.proxy.ejb.StatelessSessionInterceptor.invoke(Stateles
>sSessionI
>> nterceptor.java:100)
>>      at
>> org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:85)
>>      at $Proxy72.updateDoc(Unknown Source)
>>      at
>> 
>my.com.shinyang.eply.bd.LogPondDelegateEJBImpl.updateDoc(LogPon
>dDelegate
>> EJBImpl.java:85)
>>      at
>> 
>my.com.shinyang.eply.syl.webdesk.SylLogPondAction.editLogPond(S
>ylLogPond
>> Action.java:707)
>>      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>      at
>> 
>sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccesso
>rImpl.jav
>> a:39)
>>      at
>> 
>sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMetho
>dAccessor
>> Impl.java:25)
>>      at java.lang.reflect.Method.invoke(Method.java:324)
>>      at
>> 
>org.apache.struts.actions.DispatchAction.dispatchMethod(Dispatc
>hAction.j
>> ava:280)
>>      at
>> 
>org.apache.struts.actions.DispatchAction.execute(DispatchAction
>.java:216
>> )
>>      at
>> 
>org.apache.struts.action.RequestProcessor.processActionPerform(
>RequestPr
>> ocessor.java:484)
>>      at
>> 
>org.apache.struts.action.RequestProcessor.process(RequestProces
>sor.java:
>> 274)
>>      at
>> 
>org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
>>      at
>> org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
>>      at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
>>      at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>>      at
>> 
>org.apache.catalina.core.ApplicationFilterChain.internalDoFilte
>r(Applica
>> tionFilterChain.java:247)
>>      at
>> 
>org.apache.catalina.core.ApplicationFilterChain.doFilter(Applic
>ationFilt
>> erChain.java:193)
>>      at
>> 
>org.apache.catalina.core.StandardWrapperValve.invoke(StandardWr
>apperValv
>> e.java:256)
>>      at
>> 
>org.apache.catalina.core.StandardPipeline$StandardPipelineValve
>Context.i
>> nvokeNext(StandardPipeline.java:643)
>>      at
>> 
>org.apache.catalina.core.StandardPipeline.invoke(StandardPipeli
>ne.java:4
>> 80)
>>      at
>> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
>>      at
>> 
>org.apache.catalina.core.StandardContextValve.invoke(StandardCo
>ntextValv
>> e.java:191)
>>      at
>> 
>org.apache.catalina.core.StandardPipeline$StandardPipelineValve
>Context.i
>> nvokeNext(StandardPipeline.java:643)
>>      at
>> 
>org.jboss.web.tomcat.security.JBossSecurityMgrRealm.invoke(JBos
>sSecurity
>> MgrRealm.java:220)
>>      at
>> 
>org.apache.catalina.core.StandardPipeline$StandardPipelineValve
>Context.i
>> nvokeNext(StandardPipeline.java:641)
>>      at
>> 
>org.apache.catalina.authenticator.AuthenticatorBase.invoke(Auth
>enticator
>> Base.java:553)
>>      at
>> 
>org.apache.catalina.core.StandardPipeline$StandardPipelineValve
>Context.i
>> nvokeNext(StandardPipeline.java:641)
>>      at
>> 
>org.apache.catalina.valves.CertificatesValve.invoke(Certificate
>sValve.ja
>> va:246)
>>      at
>> 
>org.apache.catalina.core.StandardPipeline$StandardPipelineValve
>Context.i
>> nvokeNext(StandardPipeline.java:641)
>>      at
>> 
>org.jboss.web.tomcat.tc4.statistics.ContainerStatsValve.invoke(
>Container
>> StatsValve.java:76)
>>      at
>> 
>org.apache.catalina.core.StandardPipeline$StandardPipelineValve
>Context.i
>> nvokeNext(StandardPipeline.java:641)
>>      at
>> 
>org.apache.catalina.core.StandardPipeline.invoke(StandardPipeli
>ne.java:4
>> 80)
>>      at
>> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
>>      at
>> 
>org.apache.catalina.core.StandardContext.invoke(StandardContext
>.java:241
>> 6)
>>      at
>> 
>org.apache.catalina.core.StandardHostValve.invoke(StandardHostV
>alve.java
>> :180)
>>      at
>> 
>org.apache.catalina.core.StandardPipeline$StandardPipelineValve
>Context.i
>> nvokeNext(StandardPipeline.java:643)
>>      at
>> 
>org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDis
>patcherVa
>> lve.java:171)
>>      at
>> 
>org.apache.catalina.core.StandardPipeline$StandardPipelineValve
>Context.i
>> nvokeNext(StandardPipeline.java:641)
>>      at
>> 
>org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportV
>alve.java
>> :172)
>>      at
>> 
>org.apache.catalina.core.StandardPipeline$StandardPipelineValve
>Context.i
>> nvokeNext(StandardPipeline.java:641)
>>      at
>> 
>org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(S
>ecurityAs
>> sociationValve.java:65)
>>      at
>> 
>org.apache.catalina.core.StandardPipeline$StandardPipelineValve
>Context.i
>> nvokeNext(StandardPipeline.java:641)
>>      at
>> 
>org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve
>.java:577
>> )
>>      at
>> 
>org.apache.catalina.core.StandardPipeline$StandardPipelineValve
>Context.i
>> nvokeNext(StandardPipeline.java:641)
>>      at
>> 
>org.apache.catalina.core.StandardPipeline.invoke(StandardPipeli
>ne.java:4
>> 80)
>>      at
>> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
>>      at
>> 
>org.apache.catalina.core.StandardEngineValve.invoke(StandardEng
>ineValve.
>> java:174)
>>      at
>> 
>org.apache.catalina.core.StandardPipeline$StandardPipelineValve
>Context.i
>> nvokeNext(StandardPipeline.java:643)
>>      at
>> 
>org.apache.catalina.core.StandardPipeline.invoke(StandardPipeli
>ne.java:4
>> 80)
>>      at
>> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
>>      at
>> 
>org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
>>      at
>> 
>org.apache.coyote.http11.Http11Processor.process(Http11Processo
>r.java:60
>> 1)
>>      at
>> 
>org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler
>.processC
>> onnection(Http11Protocol.java:392)
>>      at
>> 
>org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoin
>t.java:56
>> 5)
>>      at
>> 
>org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(T
>hreadPool
>> .java:619)
>>      at java.lang.Thread.run(Thread.java:534)
>> 
>> 
>> 
>> 
>>>-----Original Message-----
>>>From: Armin Waibel [mailto:[EMAIL PROTECTED]
>>>Sent: 29 November 2003 05:08
>>>To: OJB Users List
>>>Subject: Re: Container managed Transaction
>>>
>>>
>>>Hi,
>>>
>>>Stephen Ting wrote:
>>>
>>>
>>>>I didn't called the sessionContext.setRollbackOnly(). Simply I just
>>>>call the return statement.
>>>>
>>>
>>>You said you are using a cm-tx and you do only a return if something
>>>does not match. The container does not know about that and 
>>>commit the tx after method return --> OJB commit dirty objects too.
>>>
>>>If you want to rollback the tx use setRollbackOnly()
>>>
>>>
>>>>tx = odmg.currentTransaction();
>>>>broker = ((NarrowTransaction)tx).getBroker();
>>>>
>>>>//update the changed document
>>>>((NarrowTransaction)tx).markDirty(document);
>>>>
>>>>List origBlock = document.getLogPondBlockList();
>>>>if(origBlock != null){                      
>>>>    Iterator orig = origBlock.iterator();
>>>>    while(orig.hasNext()){
>>>>            ((NarrowTransaction)tx).markDirty(orig.next());
>>>>    }
>>>>}
>>>>
>>>>Collection existed = broker.getCollectionByQuery(query);
>>>>LogPond dbLogPond = (LogPond)existed.iterator().next();     
>>>
>>>             
>>>
>>>>List dbBlock = dbLogPond.getLogPondBlockList();
>>>>if(dbBlock != null){                        
>>>>    Iterator i = dbBlock.iterator();
>>>>    while(i.hasNext()){
>>>>            LogPondBlock dbLogPondBlock = (LogPondBlock)i.next();
>>>>
>>>>            if(document.getLogPondBlock(dbLogPondBlock) == null){
>>>>                    ((NarrowTransaction)tx).markDelete(orig.next());
>>>>
>>>>            }else{
>>>
>>>===>           getSessionContext().setRollbackOnly();
>>>
>>>hmm, maybe I misunderstood your question.
>>>
>>>regards,
>>>Armin
>>>
>>>
>>>>              ///error.. Can't delete this item 
>>>>              ON EXIST OF THIS METHOD, I FOUND THAT THE
>>>
>>>ABOVE MARK DIRTY STILL
>>>
>>>>TAKE EFFECT
>>>>              return;       
>>>>            }
>>>>    }
>>>>}
>>>>
>>>>Regards,
>>>>Stephen     
>>>>
>>>>
>>>>
>>>>
>>>>>-----Original Message-----
>>>>>From: Armin Waibel [mailto:[EMAIL PROTECTED]
>>>>>Sent: 28 November 2003 16:17
>>>>>To: OJB Users List
>>>>>Subject: Re: Container managed Transaction
>>>>>
>>>>>
>>>>>Hi Stephen,
>>>>>
>>>>>Stephen Ting wrote:
>>>>>
>>>>>
>>>>>>Can i programatic rollback managed transaction in ODMG api?
>>>>>>
>>>>>>I have the following challenge.
>>>>>>
>>>>>>1. ((NarrowTransaction)tx).markDirty(document1);
>>>>>>2. ((NarrowTransaction)tx).markDirty(subDoc1);
>>>>>>3. ((NarrowTransaction)tx).markDelete(subDoc2);
>>>>>>
>>>>>>In the above sequence, says I excute statement 1 and 2 
>>>>>>successfully, before reaching statement 3 I detected some errors 
>>>>>>and need to exit the method and rollback. In my testing, the SQL 
>>>>>>Statement in 1 and 2 will get excuted.
>>>>>
>>>>>What do you do when the error was detected?
>>>>>Did you call sessionContext.setRollbackOnly() ?
>>>>>Could you post some pseudo code?
>>>>>
>>>>>Normally 1 and 2 shouldn't be executed when all method 
>calls made in 
>>>>>a cm-tx.
>>>>>
>>>>>regards,
>>>>>Armin
>>>>>
>>>>>
>>>>>
>>>>>>My question is can I rollback
>>>>>>sql statement 1 and 2 and assume I didn't mark document1
>>>
>>>and subDoc1?
>>>
>>>>>>Thanks
>>>>>>
>>>>>>Regards,
>>>>>>Stephen Ting
>>>>>>
>>>>>>
>>>>>>------------------------------------------------------------
>>>
>>>---------
>>>
>>>>>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>>For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>>-----------------------------------------------------------
>---------
>>>>>-
>>>>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>>------------------------------------------------------------
>---------
>>>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>For additional commands, e-mail: [EMAIL PROTECTED]
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>>
>>>
>>>---------------------------------------------------------------------
>>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>> 
>> 
>> 
>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to