Oh and btw, you can also specify isolation for an Entity in the
persistence.xml as a property. For example,
<property name="eclipselink.cache.shared.default"
value="false"/>
<property name="eclipselink.cache.shared.Publisher"
value="true"/>
<property name="eclipselink.cache.shared.Title"
value="true"/>
Will get you what you're currently trying to do with
@Cache(isolated=false,..) annotations.
Another FYI, there's bug filed to switch to a more "positive" @Cache
property and use "shared" instead of "isolated". This means at some
point before 1.0 your @Cache annotations will require adjusting.
Shaun
Shaun Smith wrote:
Hi Tim,
I'm taking a look at the behavior you're seeing. I'll get back to
you asap.
Shaun
Tim Hollosy wrote:
Sorry to continue to make this thread harder to read than it has to,
but I see I read the javadocs wrong.
alwaysRefresh causes the *cache* to always be refreshed WHEN you hit the DB.
disableHits causes the entity to skip cache hits and go directly to
the databaase, unfortunately this doesn't appear to be working either
though, so I'll keep huntin'.
On Mon, May 12, 2008 at 3:48 PM, Tim Hollosy <hollosyt@xxxxxxxxx> wrote:
Well that didn't work as well as I thought it would. Number One, it
appears setting the defaults in the Persistence Unit Properties
overrides all @Cache Annotations ("Using this property, you can
override the @Cache annotation") -- this is backwards of the way I
thought it'd work. So I just decided to use the @Cache annotation on a
case by case basis - once I turned on isolated the relationships
started being funky and spit out a bunch of errors when setting it on
one base entity that had lots of children. And when isolated was on
globally that was even worse, causing way too many queries.
I'm really kind of stumped why I can't just leave the caching
properties set as default on the PU, then use
@Cache(alwaysRefresh=true). It seems like this should work, but it
definitely doesn't. Really if this annotation worked, I'd be golden.
It looks like playing around with mixing isolated & shared just causes
problems in extraneous sql.
So, I'm kind of back to square one unless someone has some insight to
the alwaysRefresh working in the @Cache annotation.
Thanks
On Mon, May 12, 2008 at 3:04 PM, Tim Hollosy <hollosyt@xxxxxxxxx> wrote:
> Nevermind Shaun, I found it: eclipselink.cache.shared.default=false at
>
> http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_(ELUG)#How_to_Use_the_.40Cache_Annotation
>
> I'll let everyone know if this works since it will be a pretty common use case.
>
>
>
> On Mon, May 12, 2008 at 2:55 PM, Tim Hollosy <hollosyt@xxxxxxxxx> wrote:
> > Shaun,
> > That sounds like it will work great. Is there a way to set the
> > isolation level at the project level and override on an entity basis?
> > The wiki docs just show how to config it with the toplink workbench.
> >
> > Thanks
> >
> >
> >
> > On Mon, May 12, 2008 at 2:50 PM, Shaun Smith <shaun.smith@xxxxxxxxxx> wrote:
> > >
> > > Hi Tim,
> > >
> > > Sounds like you should set caches for non-reference data to "isolated".
> > > Instances of classes who's caches are isolated are not cached in the L2
> > > cache. Once an EM is closed, objects who's classes are isolated can be
> > > GC'd. I think this will get you the behavior you want. Here's how the docs
> > > describe isolate caching:
> > >
> > >
> > > Isolated Client Session Cache
> > >
> > >
> > > This method always goes to the database for the initial read operation of an
> > > object whose descriptor is configured as isolated. By avoiding the shared
> > > session cache, you do not need to use the more complicated descriptor and
> > > query APIs to disable cache hits or always refresh. For more information
> > > about isolated client sessions, see Isolated Client Sessions. This is
> > > particularly useful for achieving serializable transaction isolation (see
> > > What You May Need to Know About Serializable Read Levels)
> > >
> > >
> > > There are some restrictions on relationships between isolated and shared
> > > classes. Isolated classes can have relationships to shared classes but not
> > > vice versa. This works fine when all your shared objects are reference
> > > data.
> > >
> > >
> > > Does this sound like it'll work for you?
> > >
> > >
> > > Shaun
> > >
> > >
> > >
> > > Tim Hollosy wrote:
> > > Shaun, we are in a client server situation:
> > >
> > > ~50 RCP apps hitting the same database independently ,so they would
> > > all technically be "third parties" changing the database behind the
> > > scene, since each client is it's own seperate machine and doesn't
> > > share an L2 cache. So really we need to hit the database 99% of the
> > > time, the 1% of the time we want to hit the cache would be things like
> > > a list of states pulled from the database to populate a drop down
> > > list. There's no need to hit that every time, but all the other data
> > > is quite volatile.
> > >
> > >
> > > I think I confused you by talking about multiple EM's, really it
> > > doesn't matter, since the root of the problem is every client is
> > > independent and doesn't share a cache, which would be a common problem
> > > in most J2SE desktop apps.
> > >
> > > Hopefull that clears it up :)
> > >
> > > Thanks,
> > > Tim
> > >
> > >
> > >
> > >
> > > On Mon, May 12, 2008 at 1:40 PM, Shaun Smith <shaun.smith@xxxxxxxxxx> wrote:
> > >
> > >
> > > Hi Tim,
> > >
> > > Can you clarify your issues/goals before we get into how best to solve
> > > them?
> > >
> > > So you don't want the EM-2 to see changes committed by EM-1? Reading from
> > > the database will just get you the same answer as you'll get from the L2
> > > cache unless you have third parties modifying the database behind the
> > > scenes. Is this the root problem you're trying to combat?
> > >
> > > Shaun
> > >
> > >
> > >
> > >
> > >
> > > --
> > >
> > >
> > >
> > > Shaun Smith | Principal Product Manager, TopLink | +1.905.502.3094
> > > Oracle Fusion Middleware
> > > 110 Matheson Boulevard West, Suite 100
> > > Mississauga, Ontario, Canada L5R 3P4
> > >
> >
> > > _______________________________________________
> > > eclipselink-users mailing list
> > > eclipselink-users@xxxxxxxxxxx
> > > https://dev.eclipse.org/mailman/listinfo/eclipselink-users
> > >
> > >
> >
> >
> >
> > --
> > ./tch
> >
>
>
>
> --
> ./tch
>
--
./tch
--
Shaun Smith | Principal Product Manager, TopLink |
+1.905.502.3094
Oracle Fusion Middleware
110 Matheson Boulevard West, Suite 100
Mississauga, Ontario, Canada L5R 3P4
--
Shaun Smith | Principal Product Manager, TopLink |
+1.905.502.3094
Oracle Fusion Middleware
110 Matheson Boulevard West, Suite 100
Mississauga, Ontario, Canada L5R 3P4
|