Hi Andrew,

Andrew Fortier wrote:
Hi all,

I've been chasing down a bug that has been rearing it's head every now and again. Hopefully someone on this list has an idea of what might be going on.

Occasionally an reference from one object to another will null out spontaneously. Example: A User object has a reference to a UserRole object (mapped by a userRoleId field in the User table). Occasionally, calls to user.getUserRole() will return null even though there is an associated UserRole object in the database (in both the UserRole table and as an id in the User table).

Thus far this has only happened when caching is enabled. We generally use the following settings:

<object-cache class="org.apache.ojb.broker.cache.ObjectCacheDefaultImpl">
   <attribute attribute-name="timeout" attribute-value="900"/>
   <attribute attribute-name="autoSync" attribute-value="true"/>
   <attribute attribute-name="cachingKeyType" attribute-value="0"/>
   <attribute attribute-name="useSoftReferences" attribute-value="true"/>
</object-cache>
(Note: it happens more frequently if the timeout is set to ~45 seconds)

The problem seems to happen only if there are two Users logged into the web-app at the same time, and only if they are accessing the same project. It should be noted that the setUserRole() method is called only once in the entire application code, when the user registers. There is really no way that method is being called when the property is nulled out.


1. Keep in mind that ObjectCacheDefaultImpl is a shared cache, thus it could happen that different user operate on the same object instance.
http://db.apache.org/ojb/docu/guides/objectcache.html#ObjectCacheDefaultImpl

2. If you are using versions <1.0.2 it can happen that partially materialized objects (e.g. without populated reference) are requested by other threads (fixed in 1.0.2).

Did you tried to use the two-level cache? Same issue?
http://db.apache.org/ojb/docu/guides/objectcache.html#ObjectCacheTwoLevelImpl

regards,
Armin

Final note: The UserRole objects are all defined statically (e.g. public UserRole ADMIN = new UserRole("Administrator",ADMIN_ID); ) but are persisted in the database as well.

Thanks for any input! If this is happening in your app as well perhaps we can exchange info to help narrow down possible causes.

-= Andrew Fortier







---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to