You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Torben Riis (JIRA)" <ji...@apache.org> on 2009/09/06 15:00:02 UTC

[jira] Commented: (AXIS2-4163) ServiceClient - finalize() method calls super.finalize() too early

    [ https://issues.apache.org/jira/browse/AXIS2-4163?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12751896#action_12751896 ] 

Torben Riis commented on AXIS2-4163:
------------------------------------

Hi,

I think even this version of finalize is still not good enough. 
If you have a setup with a client invoking an asynchronous service, which starts a local server for "replyTo" calls, the call to cleanup in finalize triggers the local server to shutdown on GC.

In my case I had a ThreadPoolExecutor 200 ServiceClient requests, and of cause, before all jobs had been executed gc starts invoking finalize on finished jobs, which triggers the local replyTo server to shutdown...

My circumvention was to override finalize, but I still believe that it would be better if the default implementation was removed..

Regards
Torben Riis
Multi-Support A/S R&D

> ServiceClient - finalize() method calls super.finalize() too early
> ------------------------------------------------------------------
>
>                 Key: AXIS2-4163
>                 URL: https://issues.apache.org/jira/browse/AXIS2-4163
>             Project: Axis 2.0 (Axis2)
>          Issue Type: Bug
>          Components: client-api
>    Affects Versions: 1.4.1
>            Reporter: Erik-Berndt Scheper
>         Attachments: stacktrace.txt
>
>
> The finalize() method in ServiceClient.java incorrectly calls super.finalize() before cleaning up:
>     protected void finalize() throws Throwable {
>         super.finalize();
>         cleanup();
>     }
> This leads to EJBClassLoader errors in GlassFish when the garbage collector runs. To fix this, it should be changed to:
> // Manual finalizer chaining
> @Override protected void finalize() throws Throwable {
>     try {
>         // Finalize subclass state
>         cleanup();
>     } finally {
>         super.finalize();
>     }
> }
> See attached stack trace for details.

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