Hi guys,

I have been trying to prove ehcache work with a testcase
in appfuse without luck. Can someone enlighten me a bit?

Basically, I added the config as below and turned on
logging to DEBUG but cache just doesn't seem to be working.

i.e.

I added 

   <prop key="hibernate.cache.use_second_level_cache">true</prop> 
   <prop 
key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
                
to sessionFactory bean in applicationContext-hibernate.xml as

 <!-- Hibernate SessionFactory -->
    <bean id="sessionFactory" 
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mappingResources">
            <list>
              ....
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">@HIBERNATE-DIALECT@</prop>
                <prop key="hibernate.query.substitutions">true 'Y', false 
'N'</prop>
                <!-- Create/update the database tables automatically when the 
JVM starts up
                <prop key="hibernate.hbm2ddl.auto">update</prop> -->
                <!-- Turn batching off for better error messages under 
PostgreSQL 
                <prop key="hibernate.jdbc.batch_size">0</prop> -->
                
                <prop key="hibernate.cache.use_second_level_cache">true</prop> 
                <prop 
key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
                
            </props>
        </property>
    </bean>
    
then add xdoclet to the pojo such that generated mapping file looks like

...
    
<class name="org.i18nfuse.model.ApplicationResource" table="app_resource" 
lazy="true">



    <cache  usage="read-write"/>


    .....




<setname="keyValues" lazy="true" inverse="true" cascade="all">

    <cache usage="read-write"/>

    <key column="app_resource_id"></key>


    <one-to-many class="org.i18nfuse.model.KeyValue"/>


</set>

</class> 

...

also added to applicationContext-service.xml the line as below for test cases

  <bean id="cacheManager" 
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" />

the ehcache.xml is just the default one from appfuse

then write up a simple test case such as

public class ApplicationResourcePerformance2Test extends BaseDaoTestCase {
 
    private ApplicationResourceDao dao = null;
    
    // bean defined in applicationContext-service.xml
    private CacheManager cacheManager;

    public void setApplicationResourceDao(ApplicationResourceDao dao) {
        this.dao = dao;
    }
  
 public void setCacheManager(CacheManager cacheManager) {
  this.cacheManager = cacheManager;
 }
 
  public void testCachePerformance() throws Exception {

      for (int i = 0; i < 1000; i++ ) {
       ApplicationResource appRes = new ApplicationResource(
         String.valueOf(i), String.valueOf(i), String.valueOf(i));
      }
      
      StopWatch watch = new StopWatch();
      watch.start();
      
       // retrieve all mock data as above
       List appResList = dao.getApplicationResources(null);
      watch.stop();
      
      logger.info( "loading time before caching: " + watch.getTime() );

       printCacheInfo();
   
      watch.reset();
      dao.flush();  
      
      // print cache info
      printCacheInfo();
      watch.start();
      appResList = dao.getApplicationResources(null);
      watch.stop();
      
      logger.info( "loading time after caching: " + watch.getTime() );

     }
  
  private void printCacheInfo() {
         String names[] = cacheManager.getCacheNames();
   Cache tempCache;
   for (int i = 0; i < names.length; i++) {
    tempCache = cacheManager.getCache(names[i]);
    logger.info("cache name: " + names[i] + ", size: " + tempCache.getSize());
   }
  }

}

the log for printCacheInfo() is like

[i18nfuse] INFO [main] SettingsFactory.buildSettings(204) | Order SQL updates 
by primary key: disabled
[i18nfuse] INFO [main] SettingsFactory.createQueryTranslatorFactory(369) | 
Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
[i18nfuse] INFO [main] ASTQueryTranslatorFactory.<init>(24) | Using 
ASTQueryTranslatorFactory
[i18nfuse] INFO [main] SettingsFactory.buildSettings(212) | Query language 
substitutions: {true='Y', false='N'}
[i18nfuse] INFO [main] SettingsFactory.buildSettings(217) | JPA-QL strict 
compliance: disabled
[i18nfuse] INFO [main] SettingsFactory.buildSettings(222) | Second-level cache: 
enabled
[i18nfuse] INFO [main] SettingsFactory.buildSettings(226) | Query cache: 
disabled
[i18nfuse] INFO [main] SettingsFactory.createCacheProvider(356) | Cache 
provider: org.hibernate.cache.EhCacheProvider
[i18nfuse] INFO [main] SettingsFactory.buildSettings(241) | Optimize cache for 
minimal puts: disabled
[i18nfuse] INFO [main] SettingsFactory.buildSettings(250) | Structured 
second-level cache entries: disabled
[i18nfuse] INFO [main] SettingsFactory.buildSettings(277) | Statistics: disabled
[i18nfuse] INFO [main] SettingsFactory.buildSettings(281) | Deleted entity 
synthetic identifier rollback: disabled
[i18nfuse] INFO [main] SettingsFactory.buildSettings(296) | Default 
entity-mode: pojo
[i18nfuse] INFO [main] SessionFactoryImpl.<init>(161) | building session factory
[i18nfuse] WARN [main] EhCacheProvider.buildCache(86) | Could not find 
configuration [org.i18nfuse.model.ApplicationResource]; using defaults.
[i18nfuse] WARN [main] EhCacheProvider.buildCache(86) | Could not find 
configuration [org.i18nfuse.model.KeyValue]; using defaults.
[i18nfuse] INFO [main] SessionFactoryObjectFactory.addInstance(82) | Not 
binding factory to JNDI, no JNDI name configured
[i18nfuse] WARN [main] CacheManager.detectAndFixDiskStorePathConflict(302) | 
Creating a new instance of CacheManager using the diskStorePath 
"C:\DOCUME~1\samuel\LOCALS~1\Temp\" which is already used by an existing 
CacheManager.
The source of the configuration was classpath.
The diskStore path for this CacheManager will be set to 
C:\DOCUME~1\samuel\LOCALS~1\Temp\\ehcache_auto_created_1188645946453.
To avoid this warning consider using the CacheManager factory methods to create 
a singleton CacheManager or specifying a separate ehcache configuration 
(ehcache.xml) for each CacheManager instance.
[i18nfuse] INFO [main] 
ApplicationResourcePerformance2Test.startNewTransaction(309) | Began 
transaction (1): transaction manager [EMAIL PROTECTED]; default rollback = true

[i18nfuse] INFO [main] 
ApplicationResourcePerformance2Test.testCachePerformance2(45) | loading time 
before caching: 609

[i18nfuse] INFO [main] ApplicationResourcePerformance2Test.printCacheInfo(62) | 
# of cache regions: 2
[i18nfuse] INFO [main] ApplicationResourcePerformance2Test.printCacheInfo(66) | 
cache name: org.i18nfuse.model.ApplicationResource, size: 0
[i18nfuse] INFO [main] ApplicationResourcePerformance2Test.printCacheInfo(66) | 
cache name: userCache, size: 0

[i18nfuse] INFO [main] ApplicationResourcePerformance2Test.printCacheInfo(62) | 
# of cache regions: 2
[i18nfuse] INFO [main] ApplicationResourcePerformance2Test.printCacheInfo(66) | 
cache name: org.i18nfuse.model.ApplicationResource, size: 0
[i18nfuse] INFO [main] ApplicationResourcePerformance2Test.printCacheInfo(66) | 
cache name: userCache, size: 0

[i18nfuse] INFO [main] 
ApplicationResourcePerformance2Test.testCachePerformance2(56) | loading time 
after caching: 0

[i18nfuse] INFO [main] ApplicationResourcePerformance2Test.endTransaction(275) 
| Rolled back transaction after test execution
[i18nfuse] INFO [Thread-2] SessionFactoryImpl.close(767) | closing


as you can see above, although loading time seems to have greatly reduced
in loading all ApplicationResource pojo with dao.getApplicationResources(null);
, the log in printCacheInfo() indicates the cache never stored anything!!!


What am I doing wrong? Help.


Thanks

Sam

Reply via email to