AnsweredAssumed Answered

ActionExecuter and transaction

Question asked by zomurn on Feb 22, 2010
Latest reply on Feb 22, 2010 by zomurn
Hello,

I coded an action executer which does a heavy process : move thousands of documents from one folder to another.
I'd like to know how this process run "transactionaly speaking".
I know that the fileFolderService.move() is executed inside a REQUIRED transaction (creates if no one is existing otherwise do the job inside the existing one)
I know that the ActionExecuter Interface is executed itself inside a similar transaction : it is coded like this in alfresco API.
Consequently, I suppose that my heavy process remains all in memory or cached in a file on hard disk.
At the end of the method executeImpl() of my custom action executer, no logs appears anymore so.
But In fact, a heavy underneath process is running : the commit of the transaction which can be long.

So How do I know how much time the commit take ? Because I stopped the server believing that the heavy process was ended (through logs) but in fact no.
And a big error stack trace appears when shuting down the server : cache is not alive !

14:14:48,711 User:System INFO  [james.imapserver.JamesServerContext] Closing com.opsera.omm.james.imapserver.JamesServerContext@14aad5eb: display name [com.opsera.omm.james.imapserver.JamesServerContext@14aad5eb]; startup date [Sat Feb 20 12:30:10 CET 2010]; parent: org.alfresco.config.JBossEnabledWebApplicationContext@5289e2f1
14:14:48,966  ERROR [quartz.core.JobRunShell] Job DEFAULT.ftsIndexerJobDetail threw an unhandled Exception:
java.lang.IllegalStateException: The org.alfresco.cache.uriToModelsCache Cache is not alive.
   at net.sf.ehcache.Cache.checkStatus(Cache.java:1588)
   at net.sf.ehcache.Cache.get(Cache.java:774)
   at net.sf.ehcache.Cache.get(Cache.java:755)
   at org.alfresco.repo.cache.EhCacheAdapter.get(EhCacheAdapter.java:87)
   at org.alfresco.repo.cache.TransactionalCache.get(TransactionalCache.java:348)
   at org.alfresco.repo.dictionary.DictionaryDAOImpl.getUriToModels(DictionaryDAOImpl.java:977)
   at org.alfresco.repo.dictionary.DictionaryDAOImpl.getModelsForUri(DictionaryDAOImpl.java:377)
   at org.alfresco.repo.dictionary.DictionaryDAOImpl.getProperty(DictionaryDAOImpl.java:644)
   at org.alfresco.repo.dictionary.DictionaryComponent.getProperty(DictionaryComponent.java:345)
   at org.alfresco.repo.search.impl.lucene.ADMLuceneIndexerImpl.indexProperty(ADMLuceneIndexerImpl.java:800)
   at org.alfresco.repo.search.impl.lucene.ADMLuceneIndexerImpl.createDocuments(ADMLuceneIndexerImpl.java:605)
   at org.alfresco.repo.search.impl.lucene.ADMLuceneIndexerImpl.updateFullTextSearch(ADMLuceneIndexerImpl.java:1540)
   at org.alfresco.repo.search.impl.lucene.fts.FullTextSearchIndexerImpl.index(FullTextSearchIndexerImpl.java:188)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
   at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
   at $Proxy33.index(Unknown Source)
   at org.alfresco.repo.search.impl.lucene.fts.FTSIndexerJob.execute(FTSIndexerJob.java:52)
   at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
   at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:529)
14:14:48,967  ERROR [quartz.core.ErrorLogger] Job (DEFAULT.ftsIndexerJobDetail threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: java.lang.IllegalStateException: The org.alfresco.cache.uriToModelsCache Cache is not alive.]
   at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
   at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:529)
Caused by: java.lang.IllegalStateException: The org.alfresco.cache.uriToModelsCache Cache is not alive.
   at net.sf.ehcache.Cache.checkStatus(Cache.java:1588)
   at net.sf.ehcache.Cache.get(Cache.java:774)
   at net.sf.ehcache.Cache.get(Cache.java:755)
   at org.alfresco.repo.cache.EhCacheAdapter.get(EhCacheAdapter.java:87)
   at org.alfresco.repo.cache.TransactionalCache.get(TransactionalCache.java:348)
   at org.alfresco.repo.dictionary.DictionaryDAOImpl.getUriToModels(DictionaryDAOImpl.java:977)
   at org.alfresco.repo.dictionary.DictionaryDAOImpl.getModelsForUri(DictionaryDAOImpl.java:377)
   at org.alfresco.repo.dictionary.DictionaryDAOImpl.getProperty(DictionaryDAOImpl.java:644)
   at org.alfresco.repo.dictionary.DictionaryComponent.getProperty(DictionaryComponent.java:345)
   at org.alfresco.repo.search.impl.lucene.ADMLuceneIndexerImpl.indexProperty(ADMLuceneIndexerImpl.java:800)
   at org.alfresco.repo.search.impl.lucene.ADMLuceneIndexerImpl.createDocuments(ADMLuceneIndexerImpl.java:605)
   at org.alfresco.repo.search.impl.lucene.ADMLuceneIndexerImpl.updateFullTextSearch(ADMLuceneIndexerImpl.java:1540)
   at org.alfresco.repo.search.impl.lucene.fts.FullTextSearchIndexerImpl.index(FullTextSearchIndexerImpl.java:188)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
   at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
   at $Proxy33.index(Unknown Source)
   at org.alfresco.repo.search.impl.lucene.fts.FTSIndexerJob.execute(FTSIndexerJob.java:52)
   at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
   … 1 more
This error comes from ehCache (hibernate ?)

After that, my DB was corrupted, I needed to restore.

Outcomes