Hi Adrian,

How would this work in a clustered or load balanced environment? With
multiple nodes always checking their own local caches incorrect data would
be persisted all the time.

Regards,

Rupert

On 18 March 2015 at 12:16, Adrian Crum <adrian.c...@sandglass-software.com>
wrote:

> I would like to share some insights into the entity cache feature, some
> best practices I like to follow, and some related information.
>
> Some OFBiz experts may disagree with some of my views, and that is okay.
> Different experiences with OFBiz will lead to different viewpoints.
>
> The OFBiz entity caching feature is intended to improve performance by
> keeping GenericValue instances in memory - decreasing the number of calls
> to the database.
>
> Background
> ----------
>
> Initially, the entity cache was very unreliable due to a number of flaws
> in its design and in the code that calls it (it was guaranteed to produce
> stale data). As a result, I personally avoided using the entity cache
> feature.
>
> Some time ago, Adam Heath did a lot of work on the entity cache. After
> that, Jacopo and I did a lot of work fixing stale data issues in the entity
> cache. Today, the entity cache is much improved and unit tests ensure it
> produces the correct data (except for one edge case that Jacopo has
> identified).
>
> I mention all of this because the previous quirky behavior led to some
> "best practices" that didn't make much sense. A search through the OFBiz
> mail archives will produce a mountain of conflicting and confusing
> information.
>
> Today
> -----
>
> Since the current entity cache is reliable, there is no reason NOT to use
> it. My preference is to make ALL Delegator calls use the cache. If all code
> uses the cache, then individual entities can have their caching
> characteristics configured outside of code. This enables sysadmins to
> fine-tune entity caches for best performance.
>
> [Some experts might disagree with this approach because the entity cache
> will consume all available memory. But the idea is to configure the cache
> so that doesn't happen.]
>
> If you code Delegator calls to avoid the cache, then there is no way for a
> sysadmin to configure the caching behavior - that bit of code will ALWAYS
> make a database call.
>
> If you make all Delegator calls use the cache, then there is an additional
> complication that will add a bit more code: the GenericValue instances
> retrieved from the cache are immutable - if you want to modify them, then
> you will have to clone them. So, this approach can produce an additional
> line of code.
>
>
> --
> Adrian Crum
> Sandglass Software
> www.sandglass-software.com
>



-- 
Rupert Howell

Provolve Ltd
Front Office, Deale House, 16 Lavant Street, Petersfield, GU32 3EW, UK

t: 01730 267868 / m: 079 0968 5308
e:  ruperthow...@provolve.com
w: http://www.provolve.com

Reply via email to