Hi,

I'm using jackrabbit with a custom login module, the authentication is done by 
sprint security and after authentication succeed,  the user/groups are created 
in jackrabbit in case they do not exist.

As the login module runs operation against jackrabbit using the systemsession 
that belongs to the workspace, when I have users running in parallel, 
jackrabbit just freezes, and if I turn on cluster tag in repository.xml, things 
get worst.

In my research I saw fixes that rewrites some of the jackrabbit classes in 
order to use different sessions in the login module, but I'm not sure if it's 
the only way to go.
Any help will be appretiated.

I pasted 3 threads dump as a lock example:

State: WAITING on 
java.util.concurrent.locks.ReentrantLock$NonfairSync@208cb33c<mailto:java.util.concurrent.locks.ReentrantLock$NonfairSync@208cb33c>
 owned by: http-bio-8080-exec-7
Total blocked: 787  Total waited: 1.460

Stack trace:
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(Unknown Source)
java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(Unknown
 Source)
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(Unknown 
Source)
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(Unknown Source)
java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(Unknown Source)
java.util.concurrent.locks.ReentrantLock.lock(Unknown Source)
org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:194)


State: BLOCKED on 
org.apache.jackrabbit.core.security.principal.DefaultPrincipalProvider@49d88fc<mailto:org.apache.jackrabbit.core.security.principal.DefaultPrincipalProvider@49d88fc>
 owned by: http-bio-8080-exec-1
Total blocked: 1.117  Total waited: 1.805

Stack trace:
org.apache.jackrabbit.core.security.principal.AbstractPrincipalProvider.clearCache(AbstractPrincipalProvider.java:74)
org.apache.jackrabbit.core.security.principal.DefaultPrincipalProvider.onEvent(DefaultPrincipalProvider.java:244)
org.apache.jackrabbit.core.observation.EventConsumer.consumeEvents(EventConsumer.java:249)
org.apache.jackrabbit.core.observation.ObservationDispatcher.dispatchEvents(ObservationDispatcher.java:225)
org.apache.jackrabbit.core.observation.EventStateCollection.dispatch(EventStateCollection.java:475)
org.apache.jackrabbit.core.state.SharedItemStateManager$Update.end(SharedItemStateManager.java:856)
org.apache.jackrabbit.core.state.SharedItemStateManager.update(SharedItemStateManager.java:1537)
org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:400)
org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:375)
org.apache.jackrabbit.core.state.SessionItemStateManager.update(SessionItemStateManager.java:275)
org.apache.jackrabbit.core.ItemSaveOperation.perform(ItemSaveOperation.java:258)
org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:216)
org.apache.jackrabbit.core.ItemImpl.perform(ItemImpl.java:91)
org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:329)
org.apache.jackrabbit.core.session.SessionSaveOperation.perform(SessionSaveOperation.java:65)
org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:216)
org.apache.jackrabbit.core.SessionImpl.perform(SessionImpl.java:361)
org.apache.jackrabbit.core.SessionImpl.save(SessionImpl.java:812)
org.apache.jackrabbit.core.security.user.UserManagerImpl.createUser(UserManagerImpl.java:584)
org.apache.jackrabbit.core.security.user.UserManagerImpl.createUser(UserManagerImpl.java:562)
com.hp.ccp.jackrabbit.user.UserStoreSync.createUser(UserStoreSync.java:46)



State: WAITING on 
java.util.concurrent.locks.ReentrantLock$NonfairSync@208cb33c<mailto:java.util.concurrent.locks.ReentrantLock$NonfairSync@208cb33c>
 owned by: http-bio-8080-exec-7
Total blocked: 473  Total waited: 903

Stack trace:
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(Unknown Source)
java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(Unknown
 Source)
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(Unknown 
Source)
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(Unknown Source)
java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(Unknown Source)
java.util.concurrent.locks.ReentrantLock.lock(Unknown Source)
org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:194)
org.apache.jackrabbit.core.ItemImpl.perform(ItemImpl.java:91)
org.apache.jackrabbit.core.ItemImpl.getPath(ItemImpl.java:376)
org.apache.jackrabbit.core.security.user.UserManagerImpl.createGroup(UserManagerImpl.java:966)
org.apache.jackrabbit.core.security.user.AuthorizableImpl.collectMembership(AuthorizableImpl.java:368)
org.apache.jackrabbit.core.security.user.AuthorizableImpl.memberOf(AuthorizableImpl.java:96)
org.apache.jackrabbit.core.security.user.UserImpl.memberOf(UserImpl.java:37)
org.apache.jackrabbit.core.security.principal.DefaultPrincipalProvider.collectGroupMembership(DefaultPrincipalProvider.java:268)
org.apache.jackrabbit.core.security.principal.DefaultPrincipalProvider.getGroupMembership(DefaultPrincipalProvider.java:199)
org.apache.jackrabbit.core.security.authentication.AbstractLoginModule.getPrincipals(AbstractLoginModule.java:683)
org.apache.jackrabbit.core.security.authentication.AbstractLoginModule.commit(AbstractLoginModule.java:381)
org.apache.jackrabbit.core.security.authentication.LocalAuthContext.login(LocalAuthContext.java:86)
org.apache.jackrabbit.core.RepositoryImpl.login(RepositoryImpl.java:1465)

Thanks,
Luciano

Reply via email to