2016-08-26 1 views
4

Je travaille avec Jackrabbit 2.13.1.Session non fermée de Jackrabbit détectée sur AccessDeniedException mais la session est nulle

Pourquoi AccessDeniedException provoque une fuite de session?

 try { 
      session = repository.login(creds); //here are creds for user without permissions, just for testing 
     } catch (Throwable t) { 
      if (session != null) { 
       session.logout(); 
      } 
      Throwables.propagateIfInstanceOf(t, javax.jcr.RepositoryException.class); 
      throw Throwables.propagate(t); 
     } 

Cela jette, comme prévu, AccessDeniedException:

Caused by: javax.jcr.LoginException: Workspace access denied 
    at org.apache.jackrabbit.core.RepositoryImpl.login(RepositoryImpl.java:1529) 
    at org.apache.jackrabbit.commons.AbstractRepository.login(AbstractRepository.java:144) 
    at ttt.createSession(RepositoryManager.java:132) 
    ... 51 common frames omitted 

Caused by: javax.jcr.AccessDeniedException: Not allowed to access Workspace default 
    at org.apache.jackrabbit.core.security.DefaultAccessManager.init(DefaultAccessManager.java:159) 
    at org.apache.jackrabbit.core.DefaultSecurityManager.getAccessManager(DefaultSecurityManager.java:280) 
    at org.apache.jackrabbit.core.SessionImpl.createAccessManager(SessionImpl.java:356) 
    at org.apache.jackrabbit.core.SessionImpl.<init>(SessionImpl.java:273) 
    at org.apache.jackrabbit.core.SessionImpl.<init>(SessionImpl.java:239) 
    at org.apache.jackrabbit.core.XASessionImpl.<init>(XASessionImpl.java:101) 
    at org.apache.jackrabbit.core.RepositoryImpl.createSessionInstance(RepositoryImpl.java:1613) 
    at org.apache.jackrabbit.core.RepositoryImpl.createSession(RepositoryImpl.java:956) 
    at org.apache.jackrabbit.core.RepositoryImpl.login(RepositoryImpl.java:1501) 
séance

est nulle, donc je suis incapable d'appeler là-dessus fermeture de session. Mais la session non fermée exception détectée est lancée:

WARN o.a.jackrabbit.core.SessionImpl - Unclosed session detected. The session was opened here: 
java.lang.Exception: Stack Trace 
    at org.apache.jackrabbit.core.SessionImpl.<init>(SessionImpl.java:222) 
    at org.apache.jackrabbit.core.SessionImpl.<init>(SessionImpl.java:239) 
    at org.apache.jackrabbit.core.XASessionImpl.<init>(XASessionImpl.java:101) 
    at org.apache.jackrabbit.core.RepositoryImpl.createSessionInstance(RepositoryImpl.java:1613) 
    at org.apache.jackrabbit.core.RepositoryImpl.createSession(RepositoryImpl.java:956) 
    at org.apache.jackrabbit.core.RepositoryImpl.login(RepositoryImpl.java:1501) 
    at org.apache.jackrabbit.commons.AbstractRepository.login(AbstractRepository.java:144) 
    at ttt.createSession(RepositoryManager.java:132) 

Répondre

1

Bonne prise, cela semble clairement un bug qui existe encore dans 2.13.3 et qui se produit dans le cas où une exception est levée dans le constructeur de SessionImpl, la session est alors partiellement créé mais il est toujours considéré comme vivant et une session en cours qui est sur le point d'être GC est considérée comme une fuite de session par le code actuel c'est pourquoi vous obtenez cet avertissement.

Je viens de créer un ticket pour cela https://issues.apache.org/jira/browse/JCR-4033