2016-08-26 2 views
4

Я работаю с Jackrabbit 2.13.1.Неизвестный сеанс Jackrabbit обнаружен в AccessDeniedException, но сеанс равен

Почему AccessDeniedException вызывает утечку сеанса?

 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); 
     } 

Это бросает, как и ожидалось, 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) 

сессия является недействительным, так что я не в состоянии вызвать выход из системы на нем. Но незакрытой сессии обнаружено исключение:

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) 

ответ

1

Хороший улов, это звучит ясно, как ошибка, что до сих пор существует в 2.13.3 и что происходит в случае, исключение в конструкторе SessionImpl, сессия затем частично создан, но он по-прежнему считается живым, а живая сессия, которая должна быть GCed, считается утечкой сеанса текущим кодом, поэтому вы получаете это предупреждение.

Я только что создал билет для этого https://issues.apache.org/jira/browse/JCR-4033