Hi, David, I agree that (c) would be the best solution for the long term. As I look at this problem more, I think it will be necessary to do (b) in the short-term because the WSDLDefinition can be accessed via a Parameter on the AxisService - this is effectively an interface and I want to avoid changing interfaces. Doing (b) would allow this interface to continue to be supported until we can deprecate it and replace it with (c). Ann
On 07/16/2007 04:07 AM "David Illsley" <[EMAIL PROTECTED]> wrote (c) sounds like the best long term solution to me. It looks like the objects are just used to serve up ?wsdl and MEX requests, which only requires the host/port to be modified. We'd probably get better performance if we just wrote the definitions to a temporary file and used a templating solution to modify the address on each request. David On 15/07/07, Ann Robinson <[EMAIL PROTECTED]> wrote: > > > Hi, all, > I've been investigating an out-of-memory error that happens on the server > in some environments. In analyzing the java heap dumps, one of the biggest > consumers of memory is with the wsdl4j WSDLDefinition objects. The heap > dump indicates that the WSDLDefinition uses the xerces dom for underlying > support, particularly for schemas. This makes the WSDLDefinition very > heavy-weight. > > The heap dump also shows that the WSDLDefinition objects of concern are the > ones being saved in the AxisService's ParameterInclude list. Comments in > the code (WSDL11ToAxisServiceBuilder) indicate that this is done so that, if > some component needs to utilize the WSDLDefinition, the component can access > it via a Parameter in the AxisService. > > Is it possible to reduce the utilization of the WSDLDefinition? > Some ideas are: > (a) releasing it when it is no longer needed > - this might not be possible to determine > > (b) putting a wrapper on the WSDLDefinition object > > - so that the WSDLDefinition,or a portion of the WSDLDefinition, > can be released > - but if the WSDLDefinition is accessed after it was released, > the wrapper can reload the WSDLDefinition transparently to the > user > > (c) create a layer for caching wsdl-related information > - this would allow for releasing memory based on some algorithm > and/or interface that could indicate what's no longer needed > > Ann -- David Illsley - IBM Web Services Development
