Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] J2SE Caching Strategy?

Hi Tim,

    I filed:
   based upon your comments.

   I do think the isolated cache configuration I suggested should work well for you as the it avoids placing objects into the shared cache so they only live as long as your EntityManager.  This is how I'd expect a typical fat client in a 2-tier architecture to behave.
Ideally I'd like to see a very clear way to turn off caching (all the
time) and only use it on specific entities though, without any changes
on how/when SQL is built.
  
You have to careful when you say "turn off caching". :-)   What you probably mean is turn off L2 caching.  If you turn off caching altogether you sacrifice object identity as each time you need to resolve a relationship or query an object you will get a new copy.  You may end up with many copies of the same object.  This can be fine if you can afford the read cost and don't plan on making any changes as one copy is as good as the next for read only data.

      Shaun

Thanks,
Tim

On Mon, May 12, 2008 at 5:33 PM, Shaun Smith <shaun.smith@xxxxxxxxxx> wrote:
  
 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

_______________________________________________
 eclipselink-users mailing list
 eclipselink-users@xxxxxxxxxxx
 https://dev.eclipse.org/mailman/listinfo/eclipselink-users


    


  

--


Oracle
Shaun Smith | Principal Product Manager, TopLink | +1.905.502.3094
Oracle Fusion Middleware
110 Matheson Boulevard West, Suite 100
Mississauga, Ontario, Canada L5R 3P4

Back to the top