[ 
https://issues.apache.org/jira/browse/JCR-2378?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexander Klimetschek updated JCR-2378:
---------------------------------------

       Resolution: Fixed
    Fix Version/s: 2.0.0
           Status: Resolved  (was: Patch Available)

Added the finalizer change in revision 831932.

> Avoid exceptions thrown in finalize handler of RepositoryImpl constructor
> -------------------------------------------------------------------------
>
>                 Key: JCR-2378
>                 URL: https://issues.apache.org/jira/browse/JCR-2378
>             Project: Jackrabbit Content Repository
>          Issue Type: Improvement
>          Components: jackrabbit-core
>    Affects Versions: 2.0-alpha11
>            Reporter: Alexander Klimetschek
>            Assignee: Alexander Klimetschek
>            Priority: Minor
>             Fix For: 2.0.0
>
>         Attachments: JCR-2378.patch
>
>
> If an exception happens during initialization of the repository, it might be 
> overlayed by an exception thrown in the finalize handler of the 
> RepositoryImpl constructor (see line 382 ff in [1]). The latter exception 
> wins and the original exception is lost (if you don't have a log). This makes 
> it hard to figure out the real problem.
> This problem is actually a bit self-enforcing: if something goes wrong during 
> startup, the code in the shutdown() method that is called is actually very 
> prone to fail as it might not expect such a broken-startup state. In my case 
> the overlaying NPE happened in 
> ObservationManagerImpl.getRegisteredEventListeners, where this.dispatcher was 
> unexpectedly null [2].
> I think both places should be fixed (NPE guard in ObservationManagerImpl 
> constructor for "dispatcher") and a try/catch block in the finalizer, just 
> logging the exception:
>     } finally {
>         if (!succeeded) {
>             try {
>                 // repository startup failed, clean up...
>                 shutdown();
>             } catch (Throwable t) {
>                 // shutdown() likely to fail now, as startup was broken...
>                 log.error("In addition to startup fail, another problem 
> occurred while shutting down the repository again.", e);
>             }
>         }
>     }
> [1] 
> http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java?view=markup
> [2] Overlaying exception's stacktrace:
> Caused by: java.lang.NullPointerException
>       at 
> org.apache.jackrabbit.core.observation.ObservationManagerImpl.getRegisteredEventListeners(ObservationManagerImpl.java:143)
>       at 
> org.apache.jackrabbit.core.SessionImpl.removeRegisteredEventListeners(SessionImpl.java:1190)
>       at org.apache.jackrabbit.core.SessionImpl.logout(SessionImpl.java:1215)
>       at 
> org.apache.jackrabbit.core.RepositoryImpl$WorkspaceInfo.doDispose(RepositoryImpl.java:2153)
>       at 
> com.day.crx.core.CRXRepositoryImpl$CRXWorkspaceInfo.doDispose(CRXRepositoryImpl.java:1095)
>       at 
> org.apache.jackrabbit.core.RepositoryImpl$WorkspaceInfo.dispose(RepositoryImpl.java:2108)
>       at 
> org.apache.jackrabbit.core.RepositoryImpl.doShutdown(RepositoryImpl.java:1146)
>       at 
> com.day.crx.core.CRXRepositoryImpl.doShutdown(CRXRepositoryImpl.java:845)
>       at 
> org.apache.jackrabbit.core.RepositoryImpl.shutdown(RepositoryImpl.java:1098)
>       at 
> org.apache.jackrabbit.core.RepositoryImpl.<init>(RepositoryImpl.java:387)
>       at com.day.crx.core.CRXRepositoryImpl.<init>(CRXRepositoryImpl.java:201)
>       at com.day.crx.core.CRXRepositoryImpl.create(CRXRepositoryImpl.java:190)
>       ... 28 more

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to