[mapguide-users] Mapguide JavaAjaxViewer Update Features Memory
Leak?
jjdoc
jjdoc at mailcity.com
Tue Dec 14 00:58:46 EST 2010
Hi,
I'm trying to repeatedly update a feature in one of the resources using
Ajax Java Viewer and custom Java code. After about 10-20min, the Mapguide
server will reach 200MB memory usage and fail, throwing the following
exception:
<2010-12-10T22:44:48> 3624 Ajax Viewer 127.0.0.1 Anonymous
Error: Cannot create any more connections to the OSGeo.SHP FDO provider.
StackTrace:
- MgFeatureServiceHandler.ProcessOperation() line 83 file
c:\osgeo\mapguide_21\mgdev\server\src\services\feature\FeatureServiceHandler.cpp
- MgOpUpdateFeatures.Execute() line 111 file
c:\osgeo\mapguide_21\mgdev\server\src\services\feature\OpUpdateFeatures.cpp
- MgServerUpdateFeatures.UpdateFeatures() line 128 file
c:\osgeo\mapguide_21\mgdev\server\src\services\feature\ServerUpdateFeatures.cpp
- MgFdoConnectionManager.Open() line 259 file
c:\osgeo\mapguide_21\mgdev\server\src\common\manager\FdoConnectionManager.cpp
Looks like it runs out of connections to the feature service.
I read some previous messages related to this issue,and the suggestion was
to use Dispose() on all services and resources when done in one iteration.
However, I can't find this method in the Java API for services or
resourceIdentifiers. Below is my test code. It is trying to update the Name
attribute of the Park resource to a value of "nowa3". this jsp page will be
called repeatedly from UI:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="org.osgeo.mapguide.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.text.*" %>
<%@ page import="javax.servlet.jsp.*" %>
<%@ page import="javax.servlet.http.*" %>
<%@ include file ="utilityfunctions.jsp" %>
<%!
String mapName = "";
String sessionId = "";
String selText = "";
boolean queryInfo;
%>
<%
System.out.println("In dynamic update.\n");
response.setContentType("text/xml; charset=UTF-8");
request.setCharacterEncoding("UTF-8");
mapName = sessionId = selText = "";
queryInfo = false;
//fetch the parameters for this request
//
//GetRequestParameters(request);
mapName="basemap";
sessionId = request.getParameter("SESSION");
MgResourceIdentifier resId=null;
try
{
System.out.println("here-4.");
InitializeWebTier();
System.out.println("here-3.");
MgUserInformation cred = new MgUserInformation(sessionId);
cred.SetClientIp(GetClientIp(request));
cred.SetClientAgent(GetClientAgent());
System.out.println("here-2.");
//connect to the site and get an instance of the resource service
//
MgSiteConnection site = new MgSiteConnection();
site.Open(cred);
MgResourceService resourceSrvc =
(MgResourceService)site.CreateService(MgServiceType.ResourceService);
MgFeatureService featureService =
(MgFeatureService)site.CreateService(MgServiceType.FeatureService);
System.out.println("here-1.");
//load the map runtime state
//
MgMap map = new MgMap();
map.Open(resourceSrvc, mapName);
System.out.println("here0.");
resId = new
MgResourceIdentifier("Library://test/Data/Park.FeatureSource");
String filter = "Name like '%'" ;
System.out.println("here.");
MgFeatureCommandCollection commands = new MgFeatureCommandCollection();
MgPropertyCollection properties = new MgPropertyCollection();
String name = "nowa3";
properties.Add(new MgStringProperty("Name",name ));
MgUpdateFeatures updateCommandRed = new MgUpdateFeatures("Park",
properties, filter);
commands.Add(updateCommandRed);
//exceute commands
if (commands.GetCount() >=1 )
{
System.out.println("Issueing commands.");
ReleaseReader(featureService.UpdateFeatures(resId, commands, false),
commands);
//featureService.UpdateFeatures(resId, commands, false);
}
System.out.println("here2.");
//Now test if name has changed:
MgFeatureQueryOptions queryOptions = new MgFeatureQueryOptions();
queryOptions.SetFilter(filter);
System.out.println("here3.");
MgFeatureReader featureReader = featureService.SelectFeatures(resId,
"Park", queryOptions);
System.out.println("here4.");
int i = 0;
while (featureReader.ReadNext())
{
i++;
int propCount = featureReader.GetPropertyCount();
for(int j=0; j<propCount; j++)
{
String propertyName = featureReader.GetPropertyName(j);
System.out.println("prop " + propertyName + ", type=" +
featureReader.GetPropertyType(propertyName));
}
String newname = featureReader.GetString("Name");
System.out.println("Name=" + newname);
//String id = featureReader.GetString("Id");
// out.write("Name after changing:" + newname);
// out.write("Id :" + id);
}
System.out.println("here5.");
//featureService.Dispose();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
//resId.Dispose();
}
%>
Any help is apprecated. I am using Mapguide 2.1.0
Thanks.
--
View this message in context: http://osgeo-org.1803224.n2.nabble.com/Mapguide-JavaAjaxViewer-Update-Features-Memory-Leak-tp5833542p5833542.html
Sent from the MapGuide Users mailing list archive at Nabble.com.
More information about the mapguide-users
mailing list