ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Chema <demablo...@gmail.com>
Subject Re: java.sql.SQLException: You cannot commit during a managed transaction
Date Fri, 03 Oct 2008 22:29:15 GMT
OK, I'll try it.

But I've got a doubt.
There is code into my application that runs over JBoss but it doesn't
have transactions managed by application server.
For example, all classes stored in a deployed WAR file.

In this case, I wouldn't like to delegate to an EXTERNAL tx manager,
would commitTransaction() work fine ?

So, the only difference between EXTERNAL and JDBC tx manager type is
autocommit configuration ?





2008/10/3 Jeff Butler <jeffgbutler@gmail.com>:
> I'll try one more time - it IS possible if you use the EXTERNAL
> transaction manager.  Give it a try - surely it wouldn't take more
> than 5 minutes of your time to try it???
>
> Jeff Butler
>
> On Fri, Oct 3, 2008 at 4:03 PM, Chema <demablogia@gmail.com> wrote:
>> I guess it's not possible.
>> I 'm going to use JDBC API, I guess
>>
>> Thank you very much !!
>>
>>
>> 2008/10/3 Kai Grabfelder <nospam@kinokai.de>:
>>> Jeff is totaly right, with this configuration iBATIS will never take part in
the container managed transactions...
>>>
>>>
>>> --- Original Nachricht ---
>>> Absender: Jeff Butler
>>> Datum: 03.10.2008 21:14
>>>> I think you should use EXTERNAL transaction manager - this is EXACTLY
>>>> why it exists.  JBOSS, not iBATIS, is your transaction manager in this
>>>> case.
>>>>
>>>> Jeff Butler
>>>>
>>>> On Fri, Oct 3, 2008 at 2:05 PM, Chema <demablogia@gmail.com> wrote:
>>>>> I don't want to keep the secret :-D
>>>>>
>>>>>
>>>>> <settings
>>>>>    cacheModelsEnabled="true"
>>>>>    enhancementEnabled="true"
>>>>>    maxSessions="128"
>>>>>    maxTransactions="64"
>>>>>    maxRequests="512"/>
>>>>>
>>>>>  <transactionManager type="JDBC">
>>>>>    <dataSource type="JNDI">
>>>>>      <property name="DataSource" value="java:/datasource"/>
>>>>>    </dataSource>
>>>>>  </transactionManager>
>>>>>
>>>>>
>>>>> No more.
>>>>> And like you said, I don't use an EXTERNAL tx manager, but JDBC type
>>>>>
>>>>> I think that the only solution is perform "delete" sentences by JDBC
>>>>> API , so don't commit current transaction (managed by application
>>>>> server).
>>>>> What do you think ?
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> 2008/10/3 Jeff Butler <jeffgbutler@gmail.com>:
>>>>>> iBATIS will not call commit() if you have
>>>>>>
>>>>>> <transactionManager type="EXTERNAL">
>>>>>>   ...
>>>>>> </transactionManager>
>>>>>>
>>>>>> I'm guessing this is NOT what you have configured - but it would
be
>>>>>> nice to see your configuration.
>>>>>>
>>>>>> Jeff Butler
>>>>>>
>>>>>> On Fri, Oct 3, 2008 at 1:44 PM, Chema <demablogia@gmail.com>
wrote:
>>>>>>> I can't upgrade because my application runs over JVM 1.4 and
iBatis
>>>>>>> 2.3.0 is the last release compatible with JVM 1.4
>>>>>>>
>>>>>>> About your question, from documentation:
>>>>>>>
>>>>>>> "The <transactionManager> element also allows an optional
attribute
>>>>>>> commitRequired that can be true or
>>>>>>> false. Normally iBATIS will not commit transactions unless an
insert,
>>>>>>> update, or delete operation has been performed
>>>>>>> [...]
>>>>>>> The startTransaction(), commitTransaction() and endTransaction()
>>>>>>> methods, they will all be called
>>>>>>> automatically for you whenever you execute a statement outside
of a
>>>>>>> transactional block as demonstrated in
>>>>>>> the above."
>>>>>>>
>>>>>>> I think it's not by cause of my configuration
>>>>>>>
>>>>>>> Thanks !
>>>>>>>
>>>>>>> Regards
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> 2008/10/3 Kai Grabfelder <nospam@kinokai.de>:
>>>>>>>> sqlMap.delete() performs a commit? That should not be the
case if the tx manager is configured correctly.
>>>>>>>> Whats your configuration? Could you please also try updating
ibatis to 2.3.4, 2.3.0 is really old...
>>>>>>>>
>>>>>>>> Regards
>>>>>>>>
>>>>>>>> Kai
>>>>>>>>
>>>>>>>> --- Original Nachricht ---
>>>>>>>> Absender: Chema
>>>>>>>> Datum: 03.10.2008 15:01
>>>>>>>>> That doesn't work because sqlMap.delete() performs commit
automatically.
>>>>>>>>> I'm using the transaction manager of JBoss , with JNDI/JDBC.
>>>>>>>>> Can I disabled this ? By code is not possible because
Jboss TX manager
>>>>>>>>> throws a SQLExeception.
>>>>>>>>> Another w/a ?
>>>>>>>>>
>>>>>>>>> Thanls !
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> 2008/10/3 Kai Grabfelder <nospam@kinokai.de>:
>>>>>>>>>> if you are using CTM (container managed transactions),
like in your case, you can't start, commit or end
>>>>>>>>>> transactions manually. The container is doing this
for you.
>>>>>>>>>>
>>>>>>>>>> The following should work
>>>>>>>>>>> sqlMap.delete("deleteRecords", param);
>>>>>>>>>>
>>>>>>>>>> If it does not I think your sqlmap configuration
is not correct. Could you post it here?
>>>>>>>>>>
>>>>>>>>>> Regards
>>>>>>>>>>
>>>>>>>>>> Kai
>>>>>>>>>>
>>>>>>>>>> --- Original Nachricht ---
>>>>>>>>>> Absender: Chema
>>>>>>>>>> Datum: 03.10.2008 12:53
>>>>>>>>>>> Hello:
>>>>>>>>>>>
>>>>>>>>>>> I'm using JBoss 3.2 and EJB 2.0 with iBatis 2.3.0
>>>>>>>>>>> I've got configured a external transaction manager
in SQLMap
>>>>>>>>>>> configuration file.
>>>>>>>>>>>
>>>>>>>>>>> When an EJB component ( session bean ) tries
to delete record using by
>>>>>>>>>>> iBatis sqlMap client, JBoss retrieve this
>>>>>>>>>>> error:
>>>>>>>>>>>
>>>>>>>>>>> 11:02:09,406 ERROR [Connection] Error calling
Connection.commit:
>>>>>>>>>>> java.sql.SQLException: You cannot commit during
a managed transaction!
>>>>>>>>>>>         at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.jdbcCommit(BaseWrapperManagedConnection.java:525)
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> This error happens when I perform this
>>>>>>>>>>>
>>>>>>>>>>> sqlMap.startTransaction();
>>>>>>>>>>> sqlMap.delete("deleteRecords", param);
>>>>>>>>>>> sqlMap.commitTransaction();
>>>>>>>>>>> sqlMap.endTransaction();
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> And with a single call (automatic transaction):
>>>>>>>>>>>
>>>>>>>>>>> sqlMap.delete("deleteRecords", param);
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> I would like to delegate all transaction issues
to external
>>>>>>>>>>> transaction manager ( in this case, JBoss)
>>>>>>>>>>> How I can solved this ? Any w/a ?
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Thanks !!
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>>
>>
>

Mime
View raw message