Hi all,

As far as I know, FOR UPDATE would only break SQLite, and I can live with
that.

Gareth, would optimistic instead of pessimistic work for your situation?
The database does less of the work and it's more scalable. I haven't tested
it out, but OFBiz provides optimistic locking if you turn on enable-lock.

Cheers

Paul Foxworthy



On 27 October 2017 at 03:49, Jacques Le Roux <[email protected]>
wrote:

> I agree with Scott and Taher,
>
> About your question Gareth, we once had a hard coded  "for update"
> somewhere in OFBiz code (in SequenceUtil.SequenceBank.fillBank() ).
> I put it in. Then Jacopo crossed an issue in a cluster and rightly changed
> it to something better
> See https://issues.apache.org/jira/browse/OFBIZ-2353 for more where
> Adrian gave some directions also.
>
> Since I did not read all in the thread and there is no patch yet I don't
> know if something alike applies to EntityQuery API. Putting a for update is
> certainly much simpler, so just saying for now.
>
> Jacques
>
>
>
> Le 26/10/2017 à 10:46, Gareth Carter a écrit :
>
>> HI all
>>
>> Thank for the response
>>
>> It could be considered a hint, if the underlying db does not support it
>> then don't use it. Adding an attribute on the datasource could be the way
>> to go but I also believe we need methods to tell the system when to use it,
>> you don't need it all the time only in selective cases.
>>
>> Until support is added I see ofbiz as purely RDMS. I don't believe ofbiz
>> should restrict itself on the assumption it might support different
>> databases such as nosql.
>>
>> There could be an alternative to forUpdate, anyone considered
>> implementing a distributed locking mechanism? The whole point for using
>> forUpdate is to prevent one or more code blocks changing the same database
>> records concurrently, db row locks help but are not supported by all
>> databases but an external locking mechanism may provide a generic way of
>> dealing with this. OFBiz already provides a semaphore on services but I
>> believe you need something at entity level
>> Gareth Carter
>> Software Development Analyst
>> Stannah Management Services Ltd
>> IT Department
>> Ext:
>> 7036
>> DDI:
>> 01264 364311
>>
>>
>> Please consider the environment before printing this email.
>>
>> -----Original Message-----
>> From: Taher Alkhateeb [mailto:[email protected]]
>> Sent: 26 October 2017 6:13 AM
>> To: OFBIZ Development Mailing List <[email protected]>
>> Subject: Re: Updates to EntityQuery
>>
>> Hmmm usually my first gut reaction would be "keep things consistent",
>> however Scott made a good argument for supporting non-common DB features.
>> So my suggestion would be to use something like the widget's
>> <platform-specific ...> tag (or equivalent in code) for any features not
>> supported in all DBMSs. By labeling it as such the user is aware that the
>> DB selection is restricted.
>>
>> Now with regards to your comment about NoSQL, such databases are
>> fundamentally different, and act more like a key-value based entities
>> without a schema or the resulting ACID properties. It is possible to make
>> it work with the entity engine, but then you'd lose the flexibility it
>> gives you because you want to restrict yourself to the relational model
>> that we apply in OFBiz. The idea of NoSQL is to think at a different
>> conceptual level of your domain model.
>>
>> On Thu, Oct 26, 2017 at 4:33 AM, Scott Gray <[email protected]>
>> wrote:
>>
>>> I think it's better to have for-update available for use for the
>>> majority of use-cases than it is to exclude it altogether.  I'd rather
>>> lose the databases that don't support it than constrain the ones that
>>> do and are used most by pretty much everyone.  It would be nice to
>>> hear from anyone using a database that doesn't support it since I'm
>>> just guessing most of us use postgres or mysql.
>>>
>>> Has anyone actually looked at how NoSQL databases might work with the
>>> OFBiz entity engine or are the concepts too far removed from SQL for
>>> it to even be workable?
>>>
>>> If we did want to support for-update globally, we could always have
>>> the delegator simulate it by issuing an UPDATE to lock the rows prior
>>> to performing the SELECT.  Although it might not work perfectly in all
>>> cases, it could be a good compromise. e.g.
>>> UPDATE table SET lastUpdatedTxStamp = NOW() WHERE ...conditions --
>>> lock the rows SELECT * FROM table WHERE ...conditions -- select the
>>> rows
>>>
>>> Regards
>>> Scott
>>>
>>>
>>>
>>> On 26 October 2017 at 13:45, Paul Foxworthy <[email protected]> wrote:
>>>
>>> Hi Gareth,
>>>>
>>>> FOR UPDATE is standard SQL, but even so SQLite for one doesn't support
>>>> it:
>>>>
>>>> http://sqlite.1065341.n5.nabble.com/SELECT-FOR-UPDATE-td89630.html
>>>> https://sqlite.org/lang_select.html
>>>>
>>>> FOR UPDATE only makes sense for relational databases. Adding
>>>> assumptions it's available would make it harder to use a NoSQL database
>>>> in future.
>>>>
>>>> In the case of SQLite, in effect it's got serialized isolation
>>>> anyway, so the FOR UPDATE is not strictly necessary.
>>>>
>>>> I suggest OFBiz shouldn't have a method that generates syntactically
>>>> incorrect SQL for any database we want to support, and we claim to
>>>> support several. Where there are variations between SQL dialects, we
>>>> have attributes in the data source, such as "join-style".
>>>>
>>>> So think our choices are:
>>>>
>>>> 1. Add an attribute to say "SELECT ... FOR UPDATE" is supported by a
>>>> data source. OFBiz would only add the "FOR UPDATE" if it is
>>>> supported. In the case of SQLite, I suspect we'd get away without it,
>>>> but there may be other databases where the absence of "FOR UPDATE"
>>>> might bring on unexpected behaviour.
>>>>
>>>> 2. Don't provide a method to expose FOR UPDATE.
>>>>
>>>> Could you achieve the results you want with a higher transaction
>>>> isolation level like repeatable read, or with optimistic locking
>>>> (enable-lock)?
>>>>
>>>> What do you think?
>>>>
>>>> Cheers
>>>>
>>>> Paul Foxworthy
>>>>
>>>>
>>>> On 26 October 2017 at 07:50, Gareth Carter
>>>> <[email protected]>
>>>> wrote:
>>>>
>>>> Ok I will create a Jira with patch for review.
>>>>>
>>>>>
>>>>>
>>>>> Sent from my Samsung Galaxy smartphone.
>>>>>
>>>>>
>>>>>
>>>>> Gareth Carter
>>>>>
>>>>>
>>>>> Software Development Analyst
>>>>>
>>>>>
>>>>> Stannah Management Services Ltd
>>>>>
>>>>>
>>>>> IT Department
>>>>>
>>>>>
>>>>> Ext:
>>>>>
>>>>>
>>>>> 7036
>>>>>
>>>>>
>>>>> DDI:
>>>>>
>>>>>
>>>>> 01264 364311
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> [http://logos.stannah.co.uk/stan150.jpg]
>>>>>
>>>>>
>>>>> [http://logos.stannah.co.uk/enviro.jpg]Please consider the
>>>>> environment before printing this email.
>>>>>
>>>>>
>>>>> -------- Original message --------
>>>>> From: deepak nigam <[email protected]>
>>>>> Date: 25/10/2017 14:06 (GMT+00:00)
>>>>> To: [email protected]
>>>>> Subject: Re: Updates to EntityQuery
>>>>>
>>>>> Looking good to me also. Let me know if I can be of any help.
>>>>>
>>>>>
>>>>> Thanks & Regards
>>>>> --
>>>>> Deepak Nigam
>>>>>
>>>>> On Wed, Oct 25, 2017 at 6:26 PM, Yash Sharma <
>>>>> [email protected]>
>>>>> wrote:
>>>>>
>>>>> I am all up for it, please let me know if I could help.
>>>>>>
>>>>>> Thanks & Regards,
>>>>>> --
>>>>>> *Pradhan Yash Sharma*
>>>>>> *HotWax Systems* |
>>>>>> www.hotwaxsystems.com<http://www.hotwaxsystems.com>
>>>>>>
>>>>>> On Wed, Oct 25, 2017 at 6:23 PM, Yash Sharma <
>>>>>> [email protected]>
>>>>>> wrote:
>>>>>>
>>>>>> Yes, Usage of the stream will surely enhance performance to a
>>>>>>> certain extent and removes ceremony from the code base. I think
>>>>>>> Parallel
>>>>>>>
>>>>>> streams
>>>>>
>>>>>> will add enhancements in many folds as we are using a multicore
>>>>>>>
>>>>>> processor
>>>>>
>>>>>> (I have not tested yet), but the Functional approach seems promising.
>>>>>>>
>>>>>>> Thanks & Regards,
>>>>>>> --
>>>>>>> *Pradhan Yash Sharma*
>>>>>>> *HotWax Systems* | www.hotwaxsystems.com<http://
>>>>>>>
>>>>>> www.hotwaxsystems.com>
>>>>
>>>>> On Wed, Oct 25, 2017 at 5:59 PM, Gareth Carter <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>> forUpdate
>>>>>>>>
>>>>>>>> We patched EntityFindOptions with a new field "forUpdate" with
>>>>>>>>
>>>>>>> shorthand
>>>>>
>>>>>> methods in EntityQuery to enable. We then made a change to
>>>>>>>> GenericDAO.selectListIteratorByCondition to add "FOR UPDATE"
>>>>>>>> on the
>>>>>>>>
>>>>>>> end
>>>>>
>>>>>> of the SQL select statement - this allows for DB row locks (we
>>>>>>>> use
>>>>>>>>
>>>>>>> postgres
>>>>>>
>>>>>>> and works but have not tested other databases). I believe
>>>>>>>> there may
>>>>>>>>
>>>>>>> have
>>>>>
>>>>>> been a discussion about this before
>>>>>>>>
>>>>>>>>
>>>>>>>> forEach on EntityQuery
>>>>>>>>
>>>>>>>> Use Consumer in java and groovy to iterate over a query. This
>>>>>>>> can
>>>>>>>>
>>>>>>> reduce
>>>>>
>>>>>> memory consumption (replacement for queryList()) and boiler
>>>>>>>> plate
>>>>>>>>
>>>>>>> code
>>>>
>>>>> (eg
>>>>>>
>>>>>>> queryIterator(), while loop and close)
>>>>>>>>
>>>>>>>> Example:
>>>>>>>>
>>>>>>>> EntityQuery.use(delegator).from("Foobar")
>>>>>>>> .forEach(item ->
>>>>>>>>      Debug.logInfo(item.toString(), module); );
>>>>>>>>
>>>>>>>> A further update could be to provide stream capabilities
>>>>>>>>
>>>>>>>> Hope this helps, I can provide a patch aswell
>>>>>>>>
>>>>>>>> Gareth Carter
>>>>>>>> Software Development Analyst
>>>>>>>> Stannah Management Services Ltd IT Department
>>>>>>>> Ext:
>>>>>>>> 7036
>>>>>>>> DDI:
>>>>>>>> 01264 364311
>>>>>>>>
>>>>>>>>
>>>>>>>> Please consider the environment before printing this email.
>>>>>>>>
>>>>>>>> -----Original Message-----
>>>>>>>> From: Arun Patidar [mailto:[email protected]]
>>>>>>>> Sent: 25 October 2017 5:49 AM
>>>>>>>> To: [email protected]
>>>>>>>> Cc: [email protected]
>>>>>>>> Subject: Re: Updates to EntityQuery
>>>>>>>>
>>>>>>>> Hello Gareth,
>>>>>>>>
>>>>>>>> Please provide some more details or patch to understand  - forUpdate
>>>>>>>>
>>>>>>> and
>>>>>
>>>>>> forEach method utility.
>>>>>>>>
>>>>>>>> getFieldMap method looks good to me.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Thanks & Regards
>>>>>>>> ---
>>>>>>>> Arun Patidar
>>>>>>>> Manager, Enterprise Software Development
>>>>>>>>
>>>>>>>> HotWax Systems Pvt Ltd.
>>>>>>>>
>>>>>>>> www.hotwaxsystems.com<http://www.hotwaxsystems.com>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Tue, Oct 24, 2017 at 9:06 PM, Gareth Carter <
>>>>>>>> [email protected]>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>> Hi all
>>>>>>>>>
>>>>>>>>> We have internally patched EntityQuery with some additional
>>>>>>>>> functionality and before I create a Jira was going to see what the
>>>>>>>>>
>>>>>>>> community thinks.
>>>>>>>>
>>>>>>>>> New functionality:
>>>>>>>>>
>>>>>>>>> -       New method getFieldMap which returns a Map object of
>>>>>>>>>
>>>>>>>> selected
>>>>>
>>>>>> fields from GenericValue objects, useful for creating cache map
>>>>>>>>> objects for lookup
>>>>>>>>>
>>>>>>>>> -       Support forUpdate
>>>>>>>>>
>>>>>>>>> -       forEach method to accept Consumer
>>>>>>>>>
>>>>>>>>> We have found these useful and believe the project can benefit,
>>>>>>>>>
>>>>>>>> let
>>>>
>>>>> me
>>>>>
>>>>>> know what you think
>>>>>>>>>
>>>>>>>>> Regards
>>>>>>>>>
>>>>>>>>> Gareth Carter
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Software Development Analyst
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Stannah Management Services Ltd
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> IT Department
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Ext:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> 7036
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> DDI:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> 01264 364311
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> [http://logos.stannah.co.uk/stan150.jpg]
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> [http://logos.stannah.co.uk/enviro.jpg]Please consider the
>>>>>>>>>
>>>>>>>> environment
>>>>>>
>>>>>>> before printing this email.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> This email is intended only for the above addressee. It may
>>>>>>>>>
>>>>>>>> contain
>>>>
>>>>> privileged information. If you are not the addressee you must not
>>>>>>>>> copy, distribute, disclose or use any of the information in it. If
>>>>>>>>>
>>>>>>>> you
>>>>>
>>>>>> have received it in error, please delete it and notify the sender.
>>>>>>>>>
>>>>>>>>> Stannah Lift Holdings Ltd registered No. 686996, Stannah
>>>>>>>>>
>>>>>>>> Management
>>>>
>>>>> Services Ltd registered No. 2483693, Stannah Lift Services Ltd
>>>>>>>>> registered No. 1189799, Stannah Microlifts Ltd registered No.
>>>>>>>>>
>>>>>>>> 964804,
>>>>>
>>>>>> Stannah Lifts Ltd registered No. 1189836, Stannah Stairlifts Ltd
>>>>>>>>> registered No. 1401451, Global Upholstery Solutions Ltd registered
>>>>>>>>>
>>>>>>>> No.
>>>>>
>>>>>> 02452728.
>>>>>>>>
>>>>>>>>> All registered offices at Watt Close, East Portway, Andover,
>>>>>>>>> Hampshire,
>>>>>>>>> SP10 3SD, England.
>>>>>>>>>
>>>>>>>>> All Registered in England and Wales.
>>>>>>>>>
>>>>>>>>> This message has been scanned for malware by Websense.
>>>>>>>>> www.websense.com<http://www.websense.com>
>>>>>>>>>
>>>>>>>>>
>>>>>>>> To report this email as spam, please send the original message,
>>>>>>>>
>>>>>>> complete
>>>>>
>>>>>> with headers to [email protected]
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>
>>>> --
>>>> Coherent Software Australia Pty Ltd
>>>> PO Box 2773
>>>> Cheltenham Vic 3192
>>>> Australia
>>>>
>>>> Phone: +61 3 9585 6788
>>>> Web: http://webdefence.global.blackspider.com/urlwrap/?q=AXicFYxN
>>>> CsIwEEa_E02K-NPqRlDs2t5gKJGIaVIm0wYPVnDr0rt4COP28d5Di8MHWN6A
>>>> -OeqZkoy08B338egEj31ccDcXDfn7tJV63q3bdCyWHV0YlErx6QcArsi0vSA
>>>> Ux33xuScC3BWbNAUb5pL8l8RTwbA9wX8ANMdKWg&Z
>>>> Email: [email protected]
>>>>
>>>>
>


-- 
Coherent Software Australia Pty Ltd
PO Box 2773
Cheltenham Vic 3192
Australia

Phone: +61 3 9585 6788
Web: http://www.coherentsoftware.com.au/
Email: [email protected]

Reply via email to