Tomcat6 kann keine Verbindung zu MySql (Der Fahrer hat nicht alle empfangenen Pakete vom server)
mir läuft ein Apache-Tomcat-6.0.20 /MySQL 5.1.37-lubuntu /sun-java6-jdk /sun-java6-jre /sun-java6-bin auf meinem lokalen Rechner mit Ubuntu 9.10 als OS.
Ich versuche, eine einfache DB-Abfrage, Beispiel für die Ausführung für 2 Tage jetzt, aber ich bekomme immer noch diese Ausnahme:
org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.)"
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause
javax.servlet.ServletException: javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.)"
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
org.apache.jsp.index_jsp._jspService(index_jsp.java:104)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause
javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.)"
org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.getConnection(QueryTagSupport.java:285)
org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.doStartTag(QueryTagSupport.java:168)
org.apache.jsp.index_jsp._jspx_meth_sql_005fquery_005f0(index_jsp.java:274)
org.apache.jsp.index_jsp._jspx_meth_c_005fotherwise_005f0(index_jsp.java:216)
org.apache.jsp.index_jsp._jspx_meth_c_005fchoose_005f0(index_jsp.java:130)
org.apache.jsp.index_jsp._jspService(index_jsp.java:93)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
meine web.xml sieht wie folgt aus :
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/testDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
den context.xml sieht wie folgt aus :
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/my1stApp" docBase="/var/www/jsp/my1stApp" debug="5" reloadable="true" crossContext="true">
<Resource name="jdbc/testDB" auth="Container" type="javax.sql.DataSource"
maxActive="5" maxIdle="5" maxWait="10000"
username="user" password="password" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/some"/>
</Context>
und der jsp-Datei sieht wie folgt aus:
<%@ page contentType="text/html" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<html>
<head>
<title>DroneLootTool</title>
</head>
<body bgcolor="white">
<sql:query var="res" dataSource="jdbc/testDB">
select name, othername
from mytable
</sql:query>
<h2>Results</h2>
<c:forEach var="row" items="${res.rows}">
Name ${row.name}<br/>
MoreName ${row.othername}<br/><br/>
</c:forEach>
</body>
</html>
- gelesen, viele Foren-Einträge /versucht viele verschiedene Einstellungen (immer wieder geändert, um die ursprünglichen Einstellungen, wenn es nicht' arbeiten)
- set TOMCAT6_SECURITY=no in der /etc/default/tomcat6, weil TOMCAT6_SECURITY=ja, war ärger zu
- die skip-networking flag nicht gesetzt ist, die DB (BIND 127.0.0.1 gesetzt ist)
- firewall ist swiched aus (sudo ufw disable)
- MySQL funktioniert (mehrfach getestet mit dem Benutzer verwendet, in diesem skript)
- telnet localhost 3306 sagt
Trying ::1...
Trying 127.0.0.1...
Verbunden mit localhost.
Escape character is '^]'.
Connection closed by foreign host.
Den TestConnection.java produziert die folgende Ausgabe:
mich@mein-laptop:~/Desktop$ java -classpath '/usr/share/java/mysql.jar werden:./' TestConnection com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/testDB myuser mypassword
com.mysql.jdbc.CommunicationsException: Communications link failure
Last packet sent to the server was 0 ms ago.
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1070)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2103)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:718)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:298)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at TestConnection.checkConnection(TestConnection.java:40)
at TestConnection.main(TestConnection.java:21)
Caused by: com.mysql.jdbc.CommunicationsException: Communications link failure
Last packet sent to the server was 0 ms ago.
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1070)
at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:666)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1069)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2031)
... 7 more
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2431)
at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:590)
... 9 more
Connection failed.
ich weiß nicht, ob es einen Unterschied gibt zwischen der Art der java-Treiber verbindet die DB und die Perl-DBI-Modul nicht, aber dieses PERL-skript funktioniert
#!/usr/bin/perl -w
use CGI;
use DBI;
use strict;
print CGI::header();
my $dbh = DBI->connect("dbi:mysql:some:localhost", "user", "password");
my $sSql = "SELECT * from mytable";
my $ppl = $dbh->selectall_arrayref( $sSql );
foreach my $pl (@$ppl)
{
my @array = @$pl;
print @array;
}
$dbh->disconnect;
aktiviert --log-warnings auf die mysql, aber ich bekam keine neuen Warnungen.
Wenn ich war auf der Suche die Protokolle für die Warnungen fand ich diese Meldung, wenn ich starten Sie den tomcat, weiß nicht, ob es hilft, das problem zu finden :
Feb 2 19:50:37 tobias-laptop jsvc.exec[3129]: 02.02.2010 19:50:37 org.apache.catalina.startup.HostConfig checkResources#012INFO: Undeploying context [/myapp]
Feb 2 19:50:37 tobias-laptop jsvc.exec[3129]: 02.02.2010 19:50:37 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads#012SCHWERWIEGEND: A web application appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it. This is very likely to create a memory leak.
Feb 2 19:50:37 tobias-laptop jsvc.exec[3129]: 02.02.2010 19:50:37 org.apache.catalina.startup.HostConfig deployDescriptor#012INFO: Deploying configuration descriptor myapp.xml
TestConnection.java
von testdrive.mapinfo.com/techsupp/miprod.nsf/kbase_by_product/... und aktualisieren Sie die Frage mit dem Ergebnis?Wo haben Sie das mysql-Treiber-jar ? Versuchen Sie das entfernen der auth="Container" - Attribut als auch
die mysql.jar symlinked in tomcat6/lib von /usr/share/java. in /usr/share/java mysql.jar ein symlink auf die eigentliche Datei in das gleiche Verzeichnis. habe versucht, die Versionen mysql-connector-java-5.1.11 und 5.1.6. das entfernen der auth="Container" - Attribut nicht helfen, entweder. 🙁
Zumindest wissen wir, dass das problem nicht an der Tomcat-Ebene jetzt...
gut, vielleicht ist das eine Frage für serverfault.com dann 🙂
InformationsquelleAutor Tobias Wiesenthal | 2010-01-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich dieses problem gelöst. Der Grund, warum dieser Fehler Auftritt, ist die tomcat-Sicherheit-Einschränkungen.
Müssen Sie fügen Sie die folgende Zeile zu Ihrer
$TOMCAT-CONFIG/policy.d/04webapps.policy
Funktioniert für mich, hoffe es funktioniert auch für dich 🙂
ich habe das gleiche problem. dies funktionierte nicht für mich.
InformationsquelleAutor kalkulator kredytowy
Ich hatte das gleiche Problem.
Es stellt sich heraus, dass ich versaut den server mit dem drei mysqld-Instanzen, so töten die unerwünschten mein Problem gelöst:
InformationsquelleAutor Louis
Check:
die port-Nummer muss es nur 3306
Fügen Sie die
mysql.jar
im lib wenn Sie mit Tomcat6InformationsquelleAutor Rahul Kumar
Versuchen Sie es bitte mit einer "offiziellen" Connector/J 5.1 d.h. verteilt, die von MySQL, nicht ein deb (beachten Sie, dass ich nichts gegen deb).
Bitte auch aktivieren
--log-warnings
auf den mysql-server und sehen, wenn etwas ist, zeigt sich in Ihrer error-logs.InformationsquelleAutor Pascal Thivent