Axis2 1.4.1 client stub not freed
---------------------------------

                 Key: AXIS2-4007
                 URL: https://issues.apache.org/jira/browse/AXIS2-4007
             Project: Axis 2.0 (Axis2)
          Issue Type: Bug
          Components: client-api
    Affects Versions: 1.4.1
         Environment: Axis2 1.4.1
jdk1.5.0_12
            Reporter: Nanpeng Chen


For Axis2 1.4.1, if I instantiate a new client stub for every web service 
request, the stub is not freed. This was not happened with Axis2 1.2. For 
example, I modified Version service's getVersion() to do following:

        public sample.axisversion.GetVersionResponse getVersion() throws 
ExceptionException0 {
                TestServiceStub stub = null;
                try {
                        stub = new 
TestServiceStub("http://localhost:8080/axis2_141/services/TestService/";);
                        HelloResponse response = stub.Hello(new 
HelloRequest("myName"));
                } catch (AxisFault e) {
                        System.err.println(e.getMessage());
                } catch (RemoteException e) {
                        System.err.println(e.getMessage());
                } finally {
                        if (stub != null) {
                                try {
                                        stub.cleanup();
                                } catch (AxisFault e) {
                                        System.err.println(e.getMessage());
                                }
                        }
                }

                GetVersionResponse response = new GetVersionResponse();
                response.set_return("1.4.1");
                return response;
        }

Each time getVersion() is called, it creates a new instance of TestServiceStub, 
and uses it to send out a HelloRequest. I put this modified Version.aar along 
with the TestService.aar into axis2_141.war and deployed it to JBoss. After I 
sent multiple version requests to the Version service, I saw significant memory 
leak for JBOSS.

I also tried to keep an instance of the stub into a singleton class, and use 
the same instance every time as following:
        public sample.axisversion.GetVersionResponse getVersion() throws 
ExceptionException0 {
                TestServiceStub stub = null;
                try {
                        stub = 
TestServiceStubSingleton.INSTANCE.getStub("http://localhost:8080/axis2_141/services/TestService/";);
                        HelloResponse response = stub.Hello(new 
HelloRequest("myName"));
                } catch (AxisFault e) {
                        System.err.println(e.getMessage());
                } catch (RemoteException e) {
                        System.err.println(e.getMessage());
                }

                GetVersionResponse response = new GetVersionResponse();
                response.set_return("1.4.1");
                return response;
        }

This workaround fixed the memory leak. But in our applications, we have 
situations that new client stub has to be created each time. I think the better 
solution is for Axis2 to free the client stub.


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


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to