[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ojb-user
Subject:    Re: Setting ObjectCacheDescriptor programatically
From:       Armin Waibel <arminw () apache ! org>
Date:       2006-08-10 15:55:42
Message-ID: 44DB56FE.9010608 () apache ! org
[Download RAW message or body]

Steve Vangasse wrote:
> Thanks Armin. I should have checked the source code.
> 
> Switching logging on for CacheDistributor gives the following output:
> 
> DEBUG org.apache.ojb.broker.cache.CacheDistributor  - Create new 
> ObjectCache implementation for mainConnection
> 
> I don't get any of the details that you get. 

Maybe OJB doesn't lookup the cache in your test. Which OJB version do 
you use?


> The reason I thought it was 
> not having any effect was because the classes I am trying to exclude 
> from the cache are still being cached. Switching on logging for the 
> org.apache.ojb.broker.cache package shows this:
> 
> DEBUG org.apache.ojb.broker.cache.MaterializationCache  - Push to cache: 
> com.shopformat.customer.Customer{600022}
> 

This is the expected behavior. Internal OJB use three grades of caches:
Materialisation Cache (used while object materialization to avoid 
endless loops on circular references), first and second level cache (if 
enabled). Thus the MC is mandatory for correct object materialization.

After materialization the MC push all objects to the ObjectCache 
implementation.


> I am using the following in my class descriptor:
> 
> <class-descriptor class="com.shopformat.customer.Customer" 
> table="customer">
> <object-cache class="org.apache.ojb.broker.cache.ObjectCacheEmptyImpl"/>
> ......
> </class-descriptor>

In this case class Custom will never be cached (MC push objects to a 
NOOP-class ObjectCacheEmptyImpl).


> 
> I assumed the classes without this line will then fall back on the 
> settings of the ObjectCacheDescriptor that was set programatically.

correct, by default the cache implementation declared on 
jdbc-connection-descriptor level is used (if not set, 
ObjectCacheEmptyImpl is used as default cache implementation in 
ObjectCacheDescriptor).


> Can 
> you think of any reason why my Customer class is still being cached? I 
> am getting this log output:
> 
> INFO  org.apache.ojb.broker.cache.CacheDistributor  - Specified cache 
> class org.apache.ojb.broker.cache.ObjectCacheEmptyImpl does not 
> implement interface org.apache.ojb.broker.cache.ObjectCacheInternal and 
> will be wrapped by a helper class
> 
> Does that mean that it is ignoring the ObjectCacheEmptyImpl class?
> 

This only mean that it was wrapped by a helper class with additional 
internal used methods. ObjectCacheEmptyImpl itself will be used for caching.

regards,
Armin

> Thanks,
> 
> Steve Vangasse
> 
> Boardshop.co.uk - Board Sports Equipment and Clothing for the UK and Europe
> www.boardshop.co.uk
> 0870 0600 688
> 
> 
> 
> ----- Original Message ----- From: "Armin Waibel" <arminw@apache.org>
> To: "OJB Users List" <ojb-user@db.apache.org>
> Sent: Thursday, August 10, 2006 1:55 PM
> Subject: Re: Setting ObjectCacheDescriptor programatically
> 
> 
>> Hi Steve,
>>
>> this seems to be a bug in the #toXML() method of 
>> JdbcConnectionDescriptor (the cascade call to ObjectCacheDescriptor is 
>> missing). I will fix this. But this doesn't affect the 
>> stability/usability of OJB.
>>
>> To check the usage of your specified ObjectCacheDescriptor set the log 
>> level of class CacheDistributor to DEBUG/INFO (if you use OJB's own 
>> simple Logger change entry in OJB-logging.properties).
>>
>> Then you should get something like:
>>
>> [org.apache.ojb.broker.cache.CacheDistributor] INFO:
>> <====
>> Setup new object cache instance on CONNECTION LEVEL for
>> PersistenceBroker: 
>> org.apache.ojb.broker.core.PersistenceBrokerImpl@13c0b53
>> descriptorBasedCache: false
>> Connection jcdAlias: default
>> Calling class: class org.apache.ojb.broker.StoredProcedureTest$Customer
>> ObjectCache: 
>> org.apache.ojb.broker.metadata.ObjectCacheDescriptor@1abcc03[ObjectCache=class 
>> org.apache.ojb.broker.cache.ObjectCacheTwoLevelImpl,Properties={autoSync=true, 
>> cacheExcludes=, 
>> copyStrategy=org.apache.ojb.broker.cache.ObjectCacheTwoLevelImpl$CopyStrategyImpl, 
>> cachingKeyType=0, forceProxies=false, timeout=900, 
>> applicationCache=org.apache.ojb.broker.cache.ObjectCacheDefaultImpl, 
>> useSoftReferences=true}]
>> ====>
>>
>> Please let me know if this doesn't work.
>>
>> regards,
>> Armin
>>
>> Steve Vangasse wrote:
>>> I'm having trouble setting up a JdbcConnectionDescriptor 
>>> programatically. I'm adding a ConnectionPoolDescriptor, 
>>> SequenceDescriptor and an ObjectCacheDescriptor to the 
>>> JdbcConnectionDescriptor but the ObjectCacheDescriptor doesn't appear 
>>> when I call JdbcConnectionDescriptor.toXML() and doesn't have any 
>>> effect when the application is running. Here is my code:
>>>
>>> ********
>>>
>>> JdbcConnectionDescriptor jcd = new JdbcConnectionDescriptor();
>>> jcd.setJcdAlias("mainConnection");
>>> jcd.setDatasourceName("java:comp/env/jdbc/mainConnection");
>>> jcd.setDbms("MySQL");
>>> jcd.setJdbcLevel(3.0);
>>> jcd.setBatchMode(false);
>>> jcd.setUseAutoCommit(1);
>>> jcd.setIgnoreAutoCommitExceptions(false);
>>>
>>> ObjectCacheDescriptor ocd = new 
>>> ObjectCacheDescriptor(ObjectCacheTwoLevelImpl.class);
>>> ocd.addAttribute("applicationCache", 
>>> "org.apache.ojb.broker.cache.ObjectCacheDefaultImpl");
>>> ocd.addAttribute("copyStrategy", 
>>> "org.apache.ojb.broker.cache.ObjectCacheTwoLevelImpl$CopyStrategyImpl");
>>> ocd.addAttribute("timeout", "900");
>>> ocd.addAttribute("autoSync", "true");
>>> ocd.addAttribute("cachingKeyType", "1");
>>> ocd.addAttribute("useSoftReferences", "true");
>>> log.debug(ocd.toXML());
>>>
>>> ConnectionPoolDescriptor cpd = new ConnectionPoolDescriptor();
>>> cpd.setLogAbandoned(true);
>>> cpd.setValidationQuery("SELECT 1");
>>>
>>> jcd.setConnectionPoolDescriptor(cpd);
>>> jcd.setObjectCacheDescriptor(ocd);
>>> jcd.setSequenceDescriptor(new SequenceDescriptor(jcd, 
>>> SequenceManagerNativeImpl.class));
>>> connectionRepository.addDescriptor(jcd);
>>>
>>> log.debug(jcd.toXML());
>>> *********
>>>
>>> I can't use an XML file for reasons I won't go into here. Can anyone 
>>> see what I might be doing wrong here? Has anyone else attempted to do 
>>> this? Any help would be much appreciated.
>>>
>>> Thanks,
>>>
>>> Steve Vangasse
>>>
>>> Boardshop.co.uk - Board Sports Equipment and Clothing for the UK and 
>>> Europe
>>> www.boardshop.co.uk
>>> 0870 0600 688
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic