hi Marc,
here is this the definition of "use-trasaction"
<<
If set to true and there is no transaction already in place
the Service Engine will begin one. If set to false or there is a
transaction already in place the Service Engine will do
nothing (this also means that if set to false and a
transaction is already in place it will do nothing).
>>
from that definition we are not sure that there is no transction for
current service.
what is the problème with your output ?
did u check table to see if record was realy deleted or not ?
I used to suspend a Tx (TransactionUtil.suspend() return current Tx if
there is one) and then call resume after my code.
+ Transaction currentTx = TransactionUtil.suspend();
boolean transactionBegan = TransactionUtil.begin();
Debug.logVerbose("transactionBegan = "+transactionBegan,
MODULE);
delegator.removeByCondition("TableA", completeCondition);
TransactionUtil.commit(transactionBegan);
Debug.logVerbose("transactionBegan = "+transactionBegan,
MODULE);
Debug.logVerbose("Deleting from tableA", MODULE);
transactionBegan = TransactionUtil.begin();
delegator.removeByCondition("TableB", completeCondition);
TransactionUtil.commit(transactionBegan);
Debug.logVerbose("Deleting from tableB", MODULE);
+ if(UtilValidate.isNotEMpty(currentTx))
+ TransactionUtil.resume(currentTx);
Le 21/07/2014 14:34, Marc von der Brüggen a écrit :
Hi,
I disabled the service's transaction
use-transaction="false"
and handle it manually. It seems to be fine, now.
boolean transactionBegan = TransactionUtil.begin();
Debug.logVerbose("transactionBegan = "+transactionBegan,
MODULE);
delegator.removeByCondition("TableA", completeCondition);
TransactionUtil.commit(transactionBegan);
Debug.logVerbose("transactionBegan = "+transactionBegan,
MODULE);
Debug.logVerbose("Deleting from tableA", MODULE);
transactionBegan = TransactionUtil.begin();
delegator.removeByCondition("TableB", completeCondition);
TransactionUtil.commit(transactionBegan);
Debug.logVerbose("Deleting from tableB", MODULE);
My output is:
transactionBegan = true
transactionBegan = true
Deleting from tableA
Deleting from tableB
Do I have to close the transaction after a commit and what is the
correct way?
Call TransactionUtil.suspend() and
TransactionUtil.cleanSuspendedTransactions()?
Thank you very much!
Kind regards
Marc
Am 15.07.2014 11:51, schrieb Nicolas Malin:
Hi,
Le 15/07/2014 10:12, Marc von der Brüggen a écrit :
Hello Nicolas,
thank you very much for your help.
I tried it:
Debug.logVerbose("### Store List Prices
("+productPrices.size()+") ###", MODULE);
Transaction transaction = null;
transaction = TransactionUtil.suspend();
boolean transactionBegan = TransactionUtil.begin();
delegator.storeAll(productPrices);
TransactionUtil.commit(transactionBegan);
TransactionUtil.resume(transaction);
TransactionUtil.commit();
Debug.logVerbose("### List Prices Stored
("+productPrices.size()+") ###", MODULE);
but the output is still the same:
[java] 2014-07-15 09:58:54,831 (default-invoker-Thread-6) [
OfbizPriceImporter.java:688:DEBUG] ### Store List Prices (1234) ###
[java] 2014-07-15 09:58:54,831 (default-invoker-Thread-6) [
TransactionUtil.java:348:WARN ] No transaction in place, so not
suspending.
I'm really surprising on that ! If you haven't transaction available,
your service don't open a transaction or you have disable on the
entity engine your transaction manager.
In this case just :
boolean transactionBegan = TransactionUtil.begin();
delegator.storeAll(productPrices);
TransactionUtil.commit();
works.
[java] 2014-07-15 09:58:55,990 (default-invoker-Thread-6) [
TransactionUtil.java:210:WARN ] [TransactionUtil.commit] Not
committing transaction, status is No Transaction (6)
[java] 2014-07-15 09:58:55,990 (default-invoker-Thread-6) [
OfbizPriceImporter.java:696:DEBUG] ### List Prices Stored (1234) ###
Kind regards
Marc
Am 10.07.2014 15:12, schrieb Nicolas Malin:
Ok I understand.
If you run a commit in your code at the service end, the
transaction has been already commited
So, open a new transaction like this :
Transaction transaction = null;
try {
transaction = TransactionUtil.suspend();
boolean transactionBegan = TransactionUtil.begin();
delegator.storeAll(listOfGenericValues);
TransactionUtil.commit(transactionBegan );
TransactionUtil.resume(transaction);
} catch (YourExceptionLevel e) {
Debug.logError(e, module);
TransactionUtil.rollback();
TransactionUtil.resume(transaction);
}
Le 10/07/2014 14:59, Marc von der Brüggen a écrit :
Hi Nicolas,
I didn't set use-transaction="false", so that the service can
handle the transactions by itself.
Before I tried
delegator.storeAll(listOfGenericValues);
TransactionUtil.commit();
it looked like this:
boolean transactionBegan = TransactionUtil.begin();
delegator.storeAll(listOfGenericValues);
TransactionUtil.commit(transactionBegan );
However, transactionBegan was always false.
Kind regards
Marc
Am 10.07.2014 11:59, schrieb Nicolas Malin:
Do you open a transaction before ?
TransactionUtil.begin();
delegator.storeAll(listOfGenericValues);
TransactionUtil.commit();
Nicolas
Le 10/07/2014 11:18, Marc von der Brüggen a écrit :
Hello,
does delegator.storeAll(listOfGenericValues) always perform a
commit?
I want to make sure the data is committed, but if I do the
following:
delegator.storeAll(listOfGenericValues);
TransactionUtil.commit();
I receive a warning:
[java] 2014-07-10 10:20:55,841 (default-invoker-Thread-6) [
TransactionUtil.java:210:WARN ] [TransactionUtil.commit] Not
committing transaction, status is No Transaction (6)
Thank you very much!
Kind regards
Marc