axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stefan Mair (JIRA)" <j...@apache.org>
Subject [jira] Commented: (AXIS2-4007) Axis2 1.4.1 client stub not freed
Date Thu, 08 Jan 2009 17:30:59 GMT

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

Stefan Mair commented on AXIS2-4007:
------------------------------------

I think this solves the problem not complet.

In ServiceClient is a Method setAxisService, where the removeService-Method (from the AxisConfiguration)
ist also called. This removes the Service also, without removing the endpoints.

I think its better to add the fix from the AXIS2-3870 to the Method removeService also

Or just a other suggestion:
Why not doing the same as in addService (it calles addServiceGroup)

Why not implementing removeService like this

public synchronized void removeService(String name) throws AxisFault {
        AxisService service = (AxisService) allServices.remove(name);
        if (service != null) {
            AxisServiceGroup serviceGroup = service.getAxisServiceGroup();
            removeServiceGroup(serviceGroup.getServiceGroupName());
        }
}



> 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.


Mime
View raw message