[hibernate-dev] Bytecode enhanced, Reference Cached immutable Entities
John O'Hara
johara at redhat.com
Fri Mar 27 06:58:59 EDT 2015
On 26/03/15 16:35, Steve Ebersole wrote:
> Now the "meat"...
>
> On Thu, Mar 26, 2015 at 10:20 AM, Sanne Grinovero <sanne at hibernate.org
> <mailto:sanne at hibernate.org>> wrote:
>
>
> What is your primary differentiator between 'SharedEntityEntry' and
> 'StatefulEntityEntry' ?
> For our purposes I'd have used different names, but since there's no
> javadoc yet I wonder if you had different intentions.
>
>
> Personally I'd have chosen something like "ImmutableEntityEntry" and
> "MutableEntityEntry", there the Mutable one is a rename of the
> existing implementation, and the Immutable would be a slimmed down
> version which might not need fields such as:
> - loadedState (not needed for readonly)
> - version (what would be the point)
> - ..
>
>
> Well I cannot speak for John's reasoning, but knowing his use case I
> think that what you describe is exactly his intent with the split.
> SharedEntityEntry represents an EntityEntry that is immutable and
> needs to be because it is *shared* between Sessions. I personally
> prefer the names mutable and immutable as well. The docs for
> ImmutableEntityEntry should make it clear that it is shared between
> Sessions and that concurrency is the reason it is immutable.
>
That was my reasoning, but on retrospect, I agree with the
ImmutableEntityEntry and MutableEntityEntry names
>
> A concern I have is to avoid ever needing to "promote" an
> ImmutableEntityEntry into a MutableEntityEntry: it's easy to mark an
> existing instance of ImmutableEntityEntry as READ_ONLY, but there is
> no going back if the entity entry was initially loaded as READ_ONLY.
> One could think of swapping the existing entityentry, but that could
> get hairy and defeats the point of optimising object allocations.
>
> Is there a strong guarantee which we can rely on, that if an
> EntityEntry is marked READ_ONLY at first load, noone will ever need to
> re-mark it as mutable?
> If not, the current check in DefaultEntityEntryFactory basing the
> choice on the current status of the Entity might not be enough, we
> might need to be a bit more conservative and only based that on
> getPersister().isMutable() ?
>
>
> So there is a distinction here between an immutable entity
> (EntityPersister#isMutable == false) and a entity loaded as read-only
> specific to a Session. The first kind can *never* become
> non-read-only. The second kind can. The first kind should be the only
> case where we use ImmutableEntityEntry, because in the second case
> that entity can later become mutable and as you say we would then need
> to "promote" its corresponding ImmutableEntityEntry to a
> MutableEntityEntry (even more instantiations!).
I was unsure what the best property to test was, I will change to test
on getPersister().isMutable()
Thanks
john
--
John O'Hara
johara at redhat.com
JBoss, by Red Hat
Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod Street, Windsor, Berkshire, SI4 1TE, United Kingdom.
Registered in UK and Wales under Company Registration No. 3798903 Directors: Michael Cunningham (USA), Charlie Peters (USA), Matt Parsons (USA) and Michael O'Neill (Ireland).
More information about the hibernate-dev
mailing list