Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] EclipseLink caching behavior

Hi, thanks for your prompt answer. This is really weird, I run the test again
and now I can't reproduce it. Before writing this post I run the test in the
debugger and checked that the test is doing what it is supposed to do.

The oddest thing is that at that stage I got the test to pass by adding
eclipselink.cache.shared.default=false to persistence.xml. Now it is working
without it. Hmm, there must have been a bug in the test. Sorry for wasting
your time.



James Sutherland wrote:
> 
> As you have described it i2's value should not be changed.  So you may
> need to dig deeper to see what is going on, as it is not correct.  Perhaps
> print the identity of the objects, and determine when the value gets
> changed.  Perhaps also set logging to finest.
> 
> Ensure that you are creating a new EntityManager for i2, not using the old
> one, the old one is still the same persistence context, and will have any
> changes made to the objects.
> 
> 
> Syvalta wrote:
>> 
>> Hi,
>> 
>> I noticed there are quite a lot of discussion about EclipseLink caching,
>> but couldn't spot this specific case. It seems that updating an Entity
>> causes the cache to be updated, even the entity is detached. I would not
>> expect that to happen for a detached object. Actually, I would expect the
>> cache to be updated only after a successful transaction commit.
>> 
>> Some example code:
>> 
>>         open(true, true, true);  // Creates EMF, EM and begins TX
>>         Item i1 = new Item("item-1");
>>         i1.setValue("val-1");
>>         // First add item
>>         em.persist(i1);
>>         close(true, true, false); // Commits TX, closes EM, but does not
>> close EMF
>> 
>>         // change Item
>>         i1.setValue("changed");  // Detached now
>> 
>>         open(false, true, true);  // Uses existing EMF, opens EM and
>> begins TX
>>         Item i2 = getItem("item-1");  // Fetches item using Query by name
>>         close(true, true, true);
>> 
>>         System.out.println("i1: " + i1.getValue());
>>         System.out.println("i2: " + i2.getValue() + ", should be val-1");
>>         return !i1.getValue().equals(i2.getValue());
>> 
>> So, we
>> 1. add an Entity
>> 2. close the EntityManager making the entity detached
>> 3. change the entity
>> 4. create a new EntityManager
>> 5. fetch the same entity by using it's name field (which is not @Id) in a
>> query
>> 
>> Current result: in point 5 we get the changed value, i.e. i2.getValue()
>> returns "changed"
>> Expected result: in point 5 we get the original value, i.e. i2.getValue()
>> returns "item-1"
>> 
>> My expectation would be the same even we would be getting the entity (in
>> point 5) from the same entityManager, but it surprises me even more that
>> the changed value is returned from a new entityManager.
>> 
>> Any insights? Are my expectations valid? I'm using EclipseLink 1.0.1 in
>> J2SE mode.
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/EclipseLink-caching-behavior-tp20790844p20807876.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.



Back to the top