David explanation makes sense (well... he is the architect isn' it ? ;o).
I'm not surprised at all by the surrounding transaction being better than the 
multitude (though I understand that in some cases of
course it might be needed)

Curious way of communication indeed, well as David said always communication :o)

Jacques

De : "David E Jones" <[EMAIL PROTECTED]>
>
> It is a little funny... but I guess communication through whatever
> means is better than none at all, well, to a certain extent.
>
> For this particular comment: if you don't create a transaction the
> database WILL in effect create one for you, even for reads, so there
> isn't much benefit from a performance or resource perspective. Given
> the sensitive nature of the concurrency for any read or write
> operation transactions are a vital part of what OFBiz needs in the
> data persistence layer, and so even if it did require additional
> resources it would be well worth it.
>
> As for making the transaction scope as granular as possible, that is a
> good idea in some cases but should be driven by the business level
> requirements and not performance ones. The funny thing is that doing
> transactions around each query instead of a transaction for the entire
> service may actually perform worse (has to setup and close a lot more
> transactions), and it would definitely introduce more possible
> problems with data inconsistency and such.
>
> -David
>
>
> On Dec 12, 2007, at 9:54 AM, Jacopo Cappellato wrote:
>
> > Walter,
> >
> > thanks very much for the communication effort but... do we really
> > need to communicate with Si thru you?
> >
> > That is funny.
> >
> > Jacopo
> >
> > Walter Vaughan wrote:
> >> -------- Original Message --------
> >> Subject:     Re: [Fwd: Re: Transaction related error in log when the]
> >> Date:     Wed, 12 Dec 2007 08:03:42 -0800
> >> From:     Si Chen <[EMAIL PROTECTED]>
> >> Reply-To:     [EMAIL PROTECTED]
> >> Organization:     Open Source Strategies, Inc.
> >> To:     Walter Vaughan <[EMAIL PROTECTED]>
> >> References:     <[EMAIL PROTECTED]>
> >> Interesting.  My opinion (and feel free to pass it along) is that
> >> they should wrap their minilang find in a transaction and not use a
> >> transaction for the get inventory service.  This service doesn't
> >> actually store data and wrapping a transaction uses resources
> >> unnecessarily and could create database locks.
> >> Walter Vaughan wrote:
> >>>
> >>>
> >>> -------- Original Message --------
> >>> Subject:     Re: Transaction related error in log when the
> >>> Date:     Tue, 11 Dec 2007 11:05:57 -0700
> >>> From:     David E Jones <[EMAIL PROTECTED]>
> >>> Reply-To:     [email protected]
> >>> To:     [email protected]
> >>> References:     <[EMAIL PROTECTED]> <[EMAIL PROTECTED]
> >>> > <[EMAIL PROTECTED]>
> >>>
> >>>
> >>>
> >>> It would be good to hear Si's comment on that, but my vote is
> >>> definitely for removing it.
> >>>
> >>> A service should only really have use-transaction set to false if
> >>> it  is doing it's own transaction management internally, like
> >>> manually or  in sub-services only.
> >>>
> >>> -David
> >>>
> >>>
> >>> On Dec 11, 2007, at 11:00 AM, Jacopo Cappellato wrote:
> >>>
> >>>> David,
> >>>>
> >>>> thanks for the explanation.
> >>>>
> >>>> So I guess that it is ok to remove the use-transaction="false"
> >>>> for  these services, right?
> >>>>
> >>>> Jacopo
> >>>>
> >>>> David E Jones wrote:
> >>>>> This is an important error message. The problem is that the
> >>>>> Entity  Engine can't just create a transaction for these because
> >>>>> it can't  commit or rollback the transaction because the
> >>>>> connection and  ResultSet stay open until the EntityListIterator
> >>>>> is closed, which  is done by the code calling the EE and so the
> >>>>> transaction must be  managed outside the EE.
> >>>>> It is not correct that read only operations don't need a
> >>>>> transaction. Part of the definition of transaction isolation
> >>>>> definitely involves reading as well as writing.
> >>>>> -David
> >>>>> On Dec 11, 2007, at 8:13 AM, Jacopo Cappellato wrote:
> >>>>>> The following error is logged (even if the service works as
> >>>>>> expected) when the service "getInventoryAvailableByFacility"
> >>>>>> is  called:
> >>>>>>
> >>>>>> = =
> >>>>>> =
> >>>>>> =
> >>>>>> =
> >>>>>> =================================================================
> >>>>>> 2007-12-11 15:54:57,906 (default-invoker-Thread-6)
> >>>>>> [ GenericDelegator.java:2031:ERROR] ---- exception report
> >>>>>> ---------------------------------------------------------- 
> >>>>>> ERROR:  Cannot do a find that returns an EntityListIterator
> >>>>>> with no  transaction in place. Wrap this call in a transaction.
> >>>>>> Exception:  java.lang.Exception Message: Stack Trace ---- stack
> >>>>>> trace
> >>>>>> ---------------------------------------------------------------  java
> >>>>>> .lang.Exception: Stack Trace
> >>>>>> org.ofbiz.entity.GenericDelegator.find(GenericDelegator.java:
> >>>>>> 2030)
> >>>>>> org
> >>>>>>  .ofbiz
> >>>>>>  .entity
> >>>>>>  .GenericDelegator
> >>>>>>  .findListIteratorByCondition(GenericDelegator.java:2008)
> >>>>>> org
> >>>>>> .ofbiz.minilang.method.entityops.FindByAnd.exec(FindByAnd.java:
> >>>>>> 88)
> >>>>>> org.ofbiz.minilang.SimpleMethod.runSubOps(SimpleMethod.java:
> >>>>>> 931)
> >>>>>> org.ofbiz.minilang.method.ifops.IfCompare.exec(IfCompare.java:
> >>>>>> 121)
> >>>>>> org.ofbiz.minilang.SimpleMethod.runSubOps(SimpleMethod.java:
> >>>>>> 931) org.ofbiz.minilang.SimpleMethod.exec(SimpleMethod.java:
> >>>>>> 568)
> >>>>>> org
> >>>>>> .ofbiz.minilang.SimpleMethod.runSimpleMethod(SimpleMethod.java:
> >>>>>> 105)
> >>>>>> org
> >>>>>> .ofbiz
> >>>>>> .minilang.SimpleMethod.runSimpleService(SimpleMethod.java: 87)
> >>>>>> org
> >>>>>>  .ofbiz
> >>>>>>  .minilang
> >>>>>>  .SimpleServiceEngine.serviceInvoker(SimpleServiceEngine.java:
> >>>>>> 76)
> >>>>>> org
> >>>>>>  .ofbiz
> >>>>>>  .minilang.SimpleServiceEngine.runSync(SimpleServiceEngine.java:
> >>>>>> 51)
> >>>>>> org
> >>>>>> .ofbiz
> >>>>>> .service.ServiceDispatcher.runSync(ServiceDispatcher.java:
> >>>>>> 375)
> >>>>>> org
> >>>>>> .ofbiz
> >>>>>> .service.ServiceDispatcher.runSync(ServiceDispatcher.java:
> >>>>>> 208)
> >>>>>> org
> >>>>>> .ofbiz
> >>>>>> .service.GenericDispatcher.runSync(GenericDispatcher.java: 136)
> >>>>>>
> >>>>>> = =
> >>>>>> =
> >>>>>> =
> >>>>>> =
> >>>>>> =================================================================
> >>>>>>
> >>>>>> I think this is caused by the service definition that has:
> >>>>>>
> >>>>>> use-transaction="false"
> >>>>>>
> >>>>>> I've noticed that this flag has been set by Si in rev. r438286:
> >>>>>>
> >>>>>> "Turned off transactions for all the getInventory_ services -- 
> >>>>>> they do not store anything and should not require them.  Also
> >>>>>> added marketing package ATP/QOH to the
> >>>>>> getProductInventorySummaryForItems service which searches
> >>>>>> across  all facilities"
> >>>>>>
> >>>>>> Is there a reason for setting this flag? Should we remove it?
> >>>>>> Or  is the error a fake error that should be fixed instead?
> >>>>>>
> >>>>>> Jacopo
> >>>>>>
> >>>>
> >>>
> >>>
> >
>
>

Reply via email to