[mapguide-users] too Many Connections error(JSP+MySQL)
Zac Spitzer
zac.spitzer at gmail.com
Wed Aug 6 05:59:21 EDT 2008
try using featureReader close()
z
On Wed, Aug 6, 2008 at 7:30 PM, 徐震 <xuzhengeology at gmail.com> wrote:
> Hi,
> I use JSP and MySQL to develop .FDO connects these two parts together.
> In the software,i use resource service and feature service to search
> data stored in the MySQL database.Once i run the page for searching.
> I will got two sleep process in MySQL.I guess the reason is i forgot to
> close connections.So i go back to the code to close connections and
> services.No use.
>
> Codes here:
>
> public Vector select(String mapName,String layerName,String
> layerClassName,String filterString) throws MgException
> {
> MgResourceService resService =
> (MgResourceService)siteConnection.CreateService(MgServiceType.ResourceService);
> MgFeatureService featService =
> (MgFeatureService)siteConnection.CreateService(MgServiceType.FeatureService);
>
> MgMap map = new MgMap();
> map.Open(resService, mapName);
>
> MgLayer layer = getLayerByName(map, layerName);
>
> MgFeatureQueryOptions query = new MgFeatureQueryOptions();
>
> query.SetFilter(filterString);
> MgResourceIdentifier resId = new
> MgResourceIdentifier(layer.GetFeatureSourceId());
> MgFeatureReader featureReader =featService.SelectFeatures(resId,
> layerClassName, query);
> Vector vec=new Vector();
> while (featureReader.ReadNext())
> {
>
> MgAgfReaderWriter geometryReaderWriter = new MgAgfReaderWriter();
> String mc = featureReader.GetString("MC");
> long id=featureReader.GetInt64("FeatId");
> long id1=featureReader.GetInt64("id");
> MgByteReader byteReader = featureReader.GetGeometry("GEOMETRY");
>
> MgGeometry geometry = geometryReaderWriter.Read(byteReader);
> MgPoint point = geometry.GetCentroid();
> double x = point.GetCoordinate().GetX();
> double y = point.GetCoordinate().GetY();
> xy n=new xy(x,y,id,id1,mc);
> vec.add(n);
> geometryReaderWriter.delete(); //close
> }
>
> resService.delete(); //close
> featService.delete(); //close
> map.delete(); //close
> return vec;
>
> }
>
> out of this function,i closed the connection to the site with
> "siteConnection.delete();"
>
> Once i run this function ,checking the process of MySQL with "show
> processlist" in MySQL command shell,i will got two more sleep process,which
> can not be closed.
>
> original:
>
> mysql> show processlist;
>
> | Id | User | Host | db | Command | Time | State
> | Info
> | 1 | root | localhost:4955 | psd | Sleep | 2
> | | NULL
> | 193 | root | localhost:3941 | NULL | Query | 0 | NULL |
> show processlist |
> | 194 | root | localhost:3963 | jsof_data | Sleep |
> 4 | | NULL
> | 195 | root | localhost:3964 | jsof_data | Sleep | 8
> | | NULL
>
> 2 rows in set (0.00 sec)
>
> ofter used the function:
>
> mysql> show processlist;
>
> | Id | User | Host | db | Command | Time | State
> | Info
> | 1 | root | localhost:4955 | psd | Sleep | 2
> | | NULL
> | 193 | root | localhost:3941 | NULL | Query | 0 | NULL |
> show processlist |
> | 194 | root | localhost:3963 | jsof_data | Sleep |
> 4 | | NULL
> | 195 | root | localhost:3964 | jsof_data | Sleep | 8
> | | NULL
> | 196 | root | localhost:3965 | jsof_data | Sleep
> | 2 | | NULL
> | 197 | root | localhost:3966 | jsof_data | Sleep | 3
> | | NULL
>
>
>
> 6 rows in set (0.00 sec)
>
> i tried to kill the sleep process with the ways as follow:
>
> <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
> <%@ page import="java.sql.*"%>
> <%@ page import="java.util.*"%>
> <%@ page import="java.io.*"%>
>
> <%
> String path = request.getContextPath();
> String basePath = request.getScheme() + "://"
> + request.getServerName() + ":" +
> request.getServerPort()
> + path + "/";
> Class.forName("com.mysql.jdbc.Driver");
> String url =
> "jdbc:mysql://localhost/psd?characterEncoding=utf8&user=root&password=root";
> Connection conn = DriverManager.getConnection(url);
> Statement stmt = conn.createStatement();
> Statement stmt2 = conn.createStatement();
> ResultSet rs = stmt.executeQuery("show processlist");
> while (rs.next()) {
> String Id = rs.getString("Id");
> String cmd = rs.getString("Command");
> String Time = rs.getString("Time");
> int i = Integer.parseInt(Time);
> if(i>10&&cmd.equals("Sleep")) //Kill the
> process which has been slept for more than 10 seconds
> stmt2.executeQuery("kill "+Id);
> else
> }
> rs.close();
> stmt.close();
> stmt2.close();
> conn.close();
> %>
>
> But i will get "The MySQL has gone away"error message.I have to restart
> MapGuideServer service to fix this problem.
>
> Can anyhelp me on this problem?
>
> Thanks for your attention:)
>
> Jacky.
>
> _______________________________________________
> mapguide-users mailing list
> mapguide-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>
>
--
Zac Spitzer -
http://zacster.blogspot.com (My Blog)
+61 405 847 168
More information about the mapguide-users
mailing list