You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jackrabbit.apache.org by Simon Jentzsch <si...@yahoo.de> on 2008/03/05 17:20:05 UTC

Shutdown Hangs

Hi,

I'm using jackrabbit together with spring and the 
org.springmodules.jcr.support.OpenSessionInViewFilter.  It works great 
and Spring takes care of all the starting and shutdown-cleanup, but 
whenever I shutdown my Tomcat the Repository hangs on this line:

shutdownLock.writeLock().acquire();    (RepositoryImpl:939)

It seemes to me, that the WriterPreferenceReadWriteLock is waiting for 
all LockWriters to finish, but he is waiting forever.
I don't know who should hold another Lock on it.

I just made an update from 1.3 to 1.4 but the shutdown did not get better.

Does anyone have a Idea?

Here my spring-config:


 <!--  JCR -->
  <bean id="jcrRepository" 
class="org.springmodules.jcr.jackrabbit.RepositoryFactoryBean">
    <!-- normal factory beans params -->
    <property name="configuration" 
value="classpath:/org/x7/core/model/repository.xml"/>
    <property name="homeDir" value="file:."/>
  </bean>

 
<!-- org.springmodules.jcr.JcrSessionFactory -->

   <bean id="jcrSessionFactory" 
class="org.springmodules.jcr.jackrabbit.JackrabbitSessionFactory">
    <property name="repository" ref="jcrRepository"/>
    <property name="credentials">
       <bean class="javax.jcr.SimpleCredentials">
          <constructor-arg index="0" value="bogus"/>
          <constructor-arg index="1">
             <bean factory-bean="password" factory-method="toCharArray"/>
          </constructor-arg>
       </bean>
     </property>
     <property name="eventListeners">
       <list>
         <bean class="org.springmodules.jcr.EventListenerDefinition">
           <property name="listener" ref="jcrDAO"/>
         </bean>
       </list>
    </property>
   </bean>
   
    <!-- create the password to return it as a char[] -->
   <bean id="password" class="org.x7.core.util.CharArrayCreator">
     <constructor-arg index="0" value="pass"/>
   </bean>


 
   <bean id="jcrDAO" class="org.x7.core.jcr.JcrDAO" >
     <property name="sessionFactory" ref="jcrSessionFactory"/>
     <property name="template">
        <bean id="jcrTemplate" class="org.springmodules.jcr.JcrTemplate">
         <property name="sessionFactory" ref="jcrSessionFactory"/>
         <property name="allowCreate" value="true"/>
       </bean>
     </property>
     <property name="transactionMgr">
       <bean 
class="org.springmodules.jcr.jackrabbit.LocalTransactionManager">
         <property name="sessionFactory" ref="jcrSessionFactory"/>
       </bean>
     </property>
   </bean>
  


Thanx

Regards,

Simon



	
		
___________________________________________________________ 
Der frühe Vogel fängt den Wurm. Hier gelangen Sie zum neuen Yahoo! Mail: http://mail.yahoo.de


Re: Shutdown Hangs

Posted by Simon Jentzsch <si...@yahoo.de>.
Thanks for your help!!!
it works!
Spring Modules 0.9 fixed the problem.

Jukka Zitting schrieb:
> Hi,
>
> On Fri, Mar 7, 2008 at 6:35 PM, Simon Jentzsch <si...@yahoo.de> wrote:
>   
>>  When shutting down Spring  calls the "shutdown()"-Method, which aquires
>>  the lock and then closes all sessions. But when the last session will be
>>  closed, it will call the shutdown-method again [5], but this time he is
>>  waiting for the lock.
>>     
>
> This is incorrect, the TransientRepository.shutdown() method newer
> directly calls RepositoryImpl.shutdown().
>
> The problem can be traced back to the TransientRepositoryFactoryBean:
>
>   
>>   [11] org.apache.jackrabbit.core.RepositoryImpl.shutdown
>>  (RepositoryImpl.java:948)
>>   [12]
>>  org.springmodules.jcr.jackrabbit.TransientRepositoryFactoryBean.destroy
>>  (TransientRepositoryFactoryBean.java:67)
>>     
>
> It should not be possible for TransientRepositoryFactoryBean to
> directly invoke methods in RepositoryImpl, bypassing the
> TransientRepository class.
>
> I looked deeper into this, and it seems that in an earlier version of
> TransientRepositoryFactoryBean [1] this was done using reflection to
> reach into the internals of the TransientRepository instance. It seems
> like this was fixed recently [2], and as far as the CVS tags are
> correct the fix should be in Spring Modules 0.9 that was released ...
> yesterday!
>
> [1] https://springmodules.dev.java.net/source/browse/springmodules/projects/jcr/src/java/org/springmodules/jcr/jackrabbit/TransientRepositoryFactoryBean.java?hideattic=0&rev=1.1&view=markup
> [2] https://springmodules.dev.java.net/source/browse/springmodules/projects/jcr/src/java/org/springmodules/jcr/jackrabbit/TransientRepositoryFactoryBean.java?hideattic=0&rev=1.2&r1=1.1&r2=1.2
>
> BR,
>
> Jukka Zitting
>
>   


		
___________________________________________________________ 
Telefonate ohne weitere Kosten vom PC zum PC: http://messenger.yahoo.de


Re: Shutdown Hangs

Posted by Jukka Zitting <ju...@gmail.com>.
Hi,

On Fri, Mar 7, 2008 at 6:35 PM, Simon Jentzsch <si...@yahoo.de> wrote:
>  When shutting down Spring  calls the "shutdown()"-Method, which aquires
>  the lock and then closes all sessions. But when the last session will be
>  closed, it will call the shutdown-method again [5], but this time he is
>  waiting for the lock.

This is incorrect, the TransientRepository.shutdown() method newer
directly calls RepositoryImpl.shutdown().

The problem can be traced back to the TransientRepositoryFactoryBean:

>   [11] org.apache.jackrabbit.core.RepositoryImpl.shutdown
>  (RepositoryImpl.java:948)
>   [12]
>  org.springmodules.jcr.jackrabbit.TransientRepositoryFactoryBean.destroy
>  (TransientRepositoryFactoryBean.java:67)

It should not be possible for TransientRepositoryFactoryBean to
directly invoke methods in RepositoryImpl, bypassing the
TransientRepository class.

I looked deeper into this, and it seems that in an earlier version of
TransientRepositoryFactoryBean [1] this was done using reflection to
reach into the internals of the TransientRepository instance. It seems
like this was fixed recently [2], and as far as the CVS tags are
correct the fix should be in Spring Modules 0.9 that was released ...
yesterday!

[1] https://springmodules.dev.java.net/source/browse/springmodules/projects/jcr/src/java/org/springmodules/jcr/jackrabbit/TransientRepositoryFactoryBean.java?hideattic=0&rev=1.1&view=markup
[2] https://springmodules.dev.java.net/source/browse/springmodules/projects/jcr/src/java/org/springmodules/jcr/jackrabbit/TransientRepositoryFactoryBean.java?hideattic=0&rev=1.2&r1=1.1&r2=1.2

BR,

Jukka Zitting

Re: Shutdown Hangs

Posted by Simon Jentzsch <si...@yahoo.de>.
Hi Marcel,

Thanx for your response. It's not easy to get a good threaddump, because 
when you shutdown tomcat as a service this option is not available, but 
i used the jdb running the tomcat in debugmode.

I debugged it many times now, and so far thisis my explanition:

  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] 
EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock$WriterLock.acquire 
(null)
  [4] org.apache.jackrabbit.core.RepositoryImpl.shutdown 
(RepositoryImpl.java:939)
  [5] org.apache.jackrabbit.core.TransientRepository.stopRepository 
(TransientRepository.java:275)
  [6] org.apache.jackrabbit.core.TransientRepository.loggedOut 
(TransientRepository.java:427)
  [7] org.apache.jackrabbit.core.SessionImpl.notifyLoggedOut 
(SessionImpl.java:573)
  [8] org.apache.jackrabbit.core.SessionImpl.logout (SessionImpl.java:1.246)
  [9] org.apache.jackrabbit.core.XASessionImpl.logout 
(XASessionImpl.java:403)
  [10] org.apache.jackrabbit.core.RepositoryImpl.doShutdown 
(RepositoryImpl.java:981)
  [11] org.apache.jackrabbit.core.RepositoryImpl.shutdown 
(RepositoryImpl.java:948)
  ...


When shutting down Spring  calls the "shutdown()"-Method, which aquires 
the lock and then closes all sessions. But when the last session will be 
closed, it will call the shutdown-method again [5], but this time he is 
waiting for the lock.

Any Idea why this happens?

thanx

simon


This is my Threaddump:

 > http-80-1:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.tomcat.util.net.AprEndpoint$Worker.await 
(AprEndpoint.java:1.256)
  [4] org.apache.tomcat.util.net.AprEndpoint$Worker.run 
(AprEndpoint.java:1.281)
  [5] java.lang.Thread.run (null)
ajp-8009-1:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.tomcat.util.net.AprEndpoint$Worker.await 
(AprEndpoint.java:1.256)
  [4] org.apache.tomcat.util.net.AprEndpoint$Worker.run 
(AprEndpoint.java:1.281)
  [5] java.lang.Thread.run (null)
ajp-8009-Poller-7:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.tomcat.util.net.AprEndpoint$Poller.run 
(AprEndpoint.java:1.126)
  [4] java.lang.Thread.run (null)
ajp-8009-Poller-6:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.tomcat.util.net.AprEndpoint$Poller.run 
(AprEndpoint.java:1.126)
  [4] java.lang.Thread.run (null)
ajp-8009-Poller-5:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.tomcat.util.net.AprEndpoint$Poller.run 
(AprEndpoint.java:1.126)
  [4] java.lang.Thread.run (null)
ajp-8009-Poller-4:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.tomcat.util.net.AprEndpoint$Poller.run 
(AprEndpoint.java:1.126)
  [4] java.lang.Thread.run (null)
ajp-8009-Poller-3:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.tomcat.util.net.AprEndpoint$Poller.run 
(AprEndpoint.java:1.126)
  [4] java.lang.Thread.run (null)
ajp-8009-Poller-2:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.tomcat.util.net.AprEndpoint$Poller.run 
(AprEndpoint.java:1.126)
  [4] java.lang.Thread.run (null)
ajp-8009-Poller-1:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.tomcat.util.net.AprEndpoint$Poller.run 
(AprEndpoint.java:1.126)
  [4] java.lang.Thread.run (null)
ajp-8009-Poller-0:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.tomcat.util.net.AprEndpoint$Poller.run 
(AprEndpoint.java:1.126)
  [4] java.lang.Thread.run (null)
ajp-8009-Acceptor-0:
  [1] java.lang.Thread.sleep (native method)
  [2] org.apache.tomcat.util.net.AprEndpoint$Acceptor.run 
(AprEndpoint.java:994)
  [3] java.lang.Thread.run (null)
http-80-Sendfile-0:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.tomcat.util.net.AprEndpoint$Sendfile.run 
(AprEndpoint.java:1.487)
  [4] java.lang.Thread.run (null)
http-80-Poller-7:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.tomcat.util.net.AprEndpoint$Poller.run 
(AprEndpoint.java:1.126)
  [4] java.lang.Thread.run (null)
http-80-Poller-6:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.tomcat.util.net.AprEndpoint$Poller.run 
(AprEndpoint.java:1.126)
  [4] java.lang.Thread.run (null)
http-80-Poller-5:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.tomcat.util.net.AprEndpoint$Poller.run 
(AprEndpoint.java:1.126)
  [4] java.lang.Thread.run (null)
http-80-Poller-4:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.tomcat.util.net.AprEndpoint$Poller.run 
(AprEndpoint.java:1.126)
  [4] java.lang.Thread.run (null)
http-80-Poller-3:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.tomcat.util.net.AprEndpoint$Poller.run 
(AprEndpoint.java:1.126)
  [4] java.lang.Thread.run (null)
http-80-Poller-2:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.tomcat.util.net.AprEndpoint$Poller.run 
(AprEndpoint.java:1.126)
  [4] java.lang.Thread.run (null)
http-80-Poller-1:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.tomcat.util.net.AprEndpoint$Poller.run 
(AprEndpoint.java:1.126)
  [4] java.lang.Thread.run (null)
http-80-Poller-0:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.tomcat.util.net.AprEndpoint$Poller.run 
(AprEndpoint.java:1.126)
  [4] java.lang.Thread.run (null)
http-80-Acceptor-0:
  [1] java.lang.Thread.sleep (native method)
  [2] org.apache.tomcat.util.net.AprEndpoint$Acceptor.run 
(AprEndpoint.java:994)
  [3] java.lang.Thread.run (null)
IndexMerger:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.commons.collections.buffer.BlockingBuffer.remove 
(BlockingBuffer.java:107)
  [4] org.apache.jackrabbit.core.query.lucene.IndexMerger.run 
(IndexMerger.java:263)
Timer-1:
  [1] java.lang.Object.wait (native method)
  [2] java.util.TimerThread.mainLoop (null)
  [3] java.util.TimerThread.run (null)
IndexMerger:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.commons.collections.buffer.BlockingBuffer.remove 
(BlockingBuffer.java:107)
  [4] org.apache.jackrabbit.core.query.lucene.IndexMerger.run 
(IndexMerger.java:263)
ObservationManager:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] org.apache.commons.collections.buffer.BlockingBuffer.remove 
(BlockingBuffer.java:107)
  [4] org.apache.jackrabbit.core.observation.ObservationDispatcher.run 
(ObservationDispatcher.java:138)
  [5] java.lang.Thread.run (null)
Thread-4:
  [1] java.lang.Thread.sleep (native method)
  [2] org.x7.core.content.dao.DocLogDAO.run (DocLogDAO.java:191)
  [3] java.lang.Thread.run (null)
Store org.hibernate.cache.StandardQueryCache Spool Thread:
  [1] java.lang.Thread.sleep (native method)
  [2] net.sf.ehcache.store.DiskStore.spoolAndExpiryThreadMain 
(DiskStore.java:573)
  [3] net.sf.ehcache.store.DiskStore.access$800 (DiskStore.java:65)
  [4] net.sf.ehcache.store.DiskStore$SpoolAndExpiryThread.run 
(DiskStore.java:1.057)
Store org.hibernate.cache.UpdateTimestampsCache Spool Thread:
  [1] java.lang.Thread.sleep (native method)
  [2] net.sf.ehcache.store.DiskStore.spoolAndExpiryThreadMain 
(DiskStore.java:573)
  [3] net.sf.ehcache.store.DiskStore.access$800 (DiskStore.java:65)
  [4] net.sf.ehcache.store.DiskStore$SpoolAndExpiryThread.run 
(DiskStore.java:1.057)
Store org.x7.core.content.base.AbstractGUIDObject Spool Thread:
  [1] java.lang.Thread.sleep (native method)
  [2] net.sf.ehcache.store.DiskStore.spoolAndExpiryThreadMain 
(DiskStore.java:573)
  [3] net.sf.ehcache.store.DiskStore.access$800 (DiskStore.java:65)
  [4] net.sf.ehcache.store.DiskStore$SpoolAndExpiryThread.run 
(DiskStore.java:1.057)
Timer-0:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] java.util.TimerThread.mainLoop (null)
  [4] java.util.TimerThread.run (null)
Thread-1:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] 
EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock$WriterLock.acquire 
(null)
  [4] org.apache.jackrabbit.core.RepositoryImpl.shutdown 
(RepositoryImpl.java:939)
  [5] org.apache.jackrabbit.core.TransientRepository.stopRepository 
(TransientRepository.java:275)
  [6] org.apache.jackrabbit.core.TransientRepository.loggedOut 
(TransientRepository.java:427)
  [7] org.apache.jackrabbit.core.SessionImpl.notifyLoggedOut 
(SessionImpl.java:573)
  [8] org.apache.jackrabbit.core.SessionImpl.logout (SessionImpl.java:1.246)
  [9] org.apache.jackrabbit.core.XASessionImpl.logout 
(XASessionImpl.java:403)
  [10] org.apache.jackrabbit.core.RepositoryImpl.doShutdown 
(RepositoryImpl.java:981)
  [11] org.apache.jackrabbit.core.RepositoryImpl.shutdown 
(RepositoryImpl.java:948)
  [12] 
org.springmodules.jcr.jackrabbit.TransientRepositoryFactoryBean.destroy 
(TransientRepositoryFactoryBean.java:67)
  [13] 
org.springframework.beans.factory.support.DisposableBeanAdapter.destroy 
(DisposableBeanAdapter.java:154)
  [14] 
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean 
(DefaultSingletonBeanRegistry.java:397)
  [15] 
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton 
(DefaultSingletonBeanRegistry.java:375)
  [16] 
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons 
(DefaultSingletonBeanRegistry.java:348)
  [17] 
org.springframework.context.support.AbstractApplicationContext.destroyBeans 
(AbstractApplicationContext.java:856)
  [18] 
org.springframework.context.support.AbstractApplicationContext.doClose 
(AbstractApplicationContext.java:834)
  [19] 
org.springframework.context.support.AbstractApplicationContext.close 
(AbstractApplicationContext.java:801)
  [20] 
org.springframework.web.context.ContextLoader.closeWebApplicationContext 
(ContextLoader.java:357)
  [21] 
org.springframework.web.context.ContextLoaderListener.contextDestroyed 
(ContextLoaderListener.java:70)
  [22] org.apache.catalina.core.StandardContext.listenerStop 
(StandardContext.java:3.805)
  [23] org.apache.catalina.core.StandardContext.stop 
(StandardContext.java:4.364)
  [24] org.apache.catalina.core.ContainerBase.removeChild 
(ContainerBase.java:893)
  [25] org.apache.catalina.startup.HostConfig.undeployApps 
(HostConfig.java:1.180)
  [26] org.apache.catalina.startup.HostConfig.stop (HostConfig.java:1.151)
  [27] org.apache.catalina.startup.HostConfig.lifecycleEvent 
(HostConfig.java:313)
  [28] org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent 
(LifecycleSupport.java:120)
  [29] org.apache.catalina.core.ContainerBase.stop 
(ContainerBase.java:1.055)
  [30] org.apache.catalina.core.ContainerBase.stop 
(ContainerBase.java:1.067)
  [31] org.apache.catalina.core.StandardEngine.stop 
(StandardEngine.java:448)
  [32] org.apache.catalina.core.StandardService.stop 
(StandardService.java:510)
  [33] org.apache.catalina.core.StandardServer.stop 
(StandardServer.java:734)
  [34] org.apache.catalina.startup.Catalina.stop (Catalina.java:602)
  [35] org.apache.catalina.startup.Catalina.start (Catalina.java:577)
  [36] sun.reflect.NativeMethodAccessorImpl.invoke0 (native method)
  [37] sun.reflect.NativeMethodAccessorImpl.invoke (null)
  [38] sun.reflect.DelegatingMethodAccessorImpl.invoke (null)
  [39] java.lang.reflect.Method.invoke (null)
  [40] org.apache.catalina.startup.Bootstrap.start (Bootstrap.java:295)
  [41] org.apache.catalina.startup.Bootstrap.main (Bootstrap.java:433)
Attach Listener:
Signal Dispatcher:
Finalizer:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.ref.ReferenceQueue.remove (null)
  [3] java.lang.ref.ReferenceQueue.remove (null)
  [4] java.lang.ref.Finalizer$FinalizerThread.run (null)
Reference Handler:
  [1] java.lang.Object.wait (native method)
  [2] java.lang.Object.wait (Object.java:485)
  [3] java.lang.ref.Reference$ReferenceHandler.run (null)
main:



Marcel Reutegger schrieb:
> Hi Simon,
>
> can you please post the complete thread dump, which includes all other 
> threads?
>
> thanks
>
> regards
>  marcel
>
>
>
> Simon Jentzsch wrote:
>> Hi,
>>
>> I'm using jackrabbit together with spring and the 
>> org.springmodules.jcr.support.OpenSessionInViewFilter.  It works 
>> great and Spring takes care of all the starting and shutdown-cleanup, 
>> but whenever I shutdown my Tomcat the Repository hangs on this line:
>>
>> shutdownLock.writeLock().acquire();    (RepositoryImpl:939)
>>
>> It seemes to me, that the WriterPreferenceReadWriteLock is waiting 
>> for all LockWriters to finish, but he is waiting forever.
>> I don't know who should hold another Lock on it.
>>
>> I just made an update from 1.3 to 1.4 but the shutdown did not get 
>> better.
>>
>> Does anyone have a Idea?
>>
>> Here my spring-config:
>>
>>
>> <!--  JCR -->
>>  <bean id="jcrRepository" 
>> class="org.springmodules.jcr.jackrabbit.RepositoryFactoryBean">
>>    <!-- normal factory beans params -->
>>    <property name="configuration" 
>> value="classpath:/org/x7/core/model/repository.xml"/>
>>    <property name="homeDir" value="file:."/>
>>  </bean>
>>
>>
>> <!-- org.springmodules.jcr.JcrSessionFactory -->
>>
>>   <bean id="jcrSessionFactory" 
>> class="org.springmodules.jcr.jackrabbit.JackrabbitSessionFactory">
>>    <property name="repository" ref="jcrRepository"/>
>>    <property name="credentials">
>>       <bean class="javax.jcr.SimpleCredentials">
>>          <constructor-arg index="0" value="bogus"/>
>>          <constructor-arg index="1">
>>             <bean factory-bean="password" factory-method="toCharArray"/>
>>          </constructor-arg>
>>       </bean>
>>     </property>
>>     <property name="eventListeners">
>>       <list>
>>         <bean class="org.springmodules.jcr.EventListenerDefinition">
>>           <property name="listener" ref="jcrDAO"/>
>>         </bean>
>>       </list>
>>    </property>
>>   </bean>
>>      <!-- create the password to return it as a char[] -->
>>   <bean id="password" class="org.x7.core.util.CharArrayCreator">
>>     <constructor-arg index="0" value="pass"/>
>>   </bean>
>>
>>
>>
>>   <bean id="jcrDAO" class="org.x7.core.jcr.JcrDAO" >
>>     <property name="sessionFactory" ref="jcrSessionFactory"/>
>>     <property name="template">
>>        <bean id="jcrTemplate" class="org.springmodules.jcr.JcrTemplate">
>>         <property name="sessionFactory" ref="jcrSessionFactory"/>
>>         <property name="allowCreate" value="true"/>
>>       </bean>
>>     </property>
>>     <property name="transactionMgr">
>>       <bean 
>> class="org.springmodules.jcr.jackrabbit.LocalTransactionManager">
>>         <property name="sessionFactory" ref="jcrSessionFactory"/>
>>       </bean>
>>     </property>
>>   </bean>
>>  
>>
>>
>> Thanx
>>
>> Regards,
>>
>> Simon
>>
>>
>>
>>            
>> ___________________________________________________________ Der frühe 
>> Vogel fängt den Wurm. Hier gelangen Sie zum neuen Yahoo! Mail: 
>> http://mail.yahoo.de
>>
>>
>
>


		
___________________________________________________________ 
Telefonate ohne weitere Kosten vom PC zum PC: http://messenger.yahoo.de


Re: Shutdown Hangs

Posted by Marcel Reutegger <ma...@gmx.net>.
Hi Simon,

can you please post the complete thread dump, which includes all other threads?

thanks

regards
  marcel



Simon Jentzsch wrote:
> Hi,
> 
> I'm using jackrabbit together with spring and the 
> org.springmodules.jcr.support.OpenSessionInViewFilter.  It works great 
> and Spring takes care of all the starting and shutdown-cleanup, but 
> whenever I shutdown my Tomcat the Repository hangs on this line:
> 
> shutdownLock.writeLock().acquire();    (RepositoryImpl:939)
> 
> It seemes to me, that the WriterPreferenceReadWriteLock is waiting for 
> all LockWriters to finish, but he is waiting forever.
> I don't know who should hold another Lock on it.
> 
> I just made an update from 1.3 to 1.4 but the shutdown did not get better.
> 
> Does anyone have a Idea?
> 
> Here my spring-config:
> 
> 
> <!--  JCR -->
>  <bean id="jcrRepository" 
> class="org.springmodules.jcr.jackrabbit.RepositoryFactoryBean">
>    <!-- normal factory beans params -->
>    <property name="configuration" 
> value="classpath:/org/x7/core/model/repository.xml"/>
>    <property name="homeDir" value="file:."/>
>  </bean>
> 
> 
> <!-- org.springmodules.jcr.JcrSessionFactory -->
> 
>   <bean id="jcrSessionFactory" 
> class="org.springmodules.jcr.jackrabbit.JackrabbitSessionFactory">
>    <property name="repository" ref="jcrRepository"/>
>    <property name="credentials">
>       <bean class="javax.jcr.SimpleCredentials">
>          <constructor-arg index="0" value="bogus"/>
>          <constructor-arg index="1">
>             <bean factory-bean="password" factory-method="toCharArray"/>
>          </constructor-arg>
>       </bean>
>     </property>
>     <property name="eventListeners">
>       <list>
>         <bean class="org.springmodules.jcr.EventListenerDefinition">
>           <property name="listener" ref="jcrDAO"/>
>         </bean>
>       </list>
>    </property>
>   </bean>
>      <!-- create the password to return it as a char[] -->
>   <bean id="password" class="org.x7.core.util.CharArrayCreator">
>     <constructor-arg index="0" value="pass"/>
>   </bean>
> 
> 
> 
>   <bean id="jcrDAO" class="org.x7.core.jcr.JcrDAO" >
>     <property name="sessionFactory" ref="jcrSessionFactory"/>
>     <property name="template">
>        <bean id="jcrTemplate" class="org.springmodules.jcr.JcrTemplate">
>         <property name="sessionFactory" ref="jcrSessionFactory"/>
>         <property name="allowCreate" value="true"/>
>       </bean>
>     </property>
>     <property name="transactionMgr">
>       <bean 
> class="org.springmodules.jcr.jackrabbit.LocalTransactionManager">
>         <property name="sessionFactory" ref="jcrSessionFactory"/>
>       </bean>
>     </property>
>   </bean>
>  
> 
> 
> Thanx
> 
> Regards,
> 
> Simon
> 
> 
> 
>     
>        
> ___________________________________________________________ Der frühe 
> Vogel fängt den Wurm. Hier gelangen Sie zum neuen Yahoo! Mail: 
> http://mail.yahoo.de
> 
>