Uploaded image for project: 'Axis2'
  1. Axis2
  2. AXIS2-4007

Axis2 1.4.1 client stub not freed

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.4.1
    • None
    • client-api
    • None
    • Axis2 1.4.1
      jdk1.5.0_12

    Description

      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.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              nchen Nanpeng Chen
              Votes:
              1 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: