2010-01-31 7 views
6

Ich benutze einen 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 Betriebssystem. Ich versuche, ein einfaches DB-Abfrage Beispiel zu bekommen jetzt für 2 Tage laufen, aber ich bekomme immer noch diese Ausnahme:Tomcat6 kann keine Verbindung zu MySql herstellen (Der Treiber hat keine Pakete vom Server empfangen)

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 wie folgt aussehen:

<?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 Kontext .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 die 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> 
  • lesen viele Foreneinträge/versucht, viele verschiedene Einstellungen (immer wieder auf die ursprünglichen Einstellungen geändert werden, wenn es den Ball hielt Arbeit)
  • Satz TOMCAT6_SECURITY = no in/etc/default/tomcat6 weil TOMCAT6_SECURITY = yes verursache Probleme zu
  • der Skip-Networking-Flag nicht für die DB gesetzt (BIND 127.0.0.1 gesetzt) ​​
  • Firewall swiched off (sudo ufw deaktivieren)
  • MySQL funktioniert (getestet mehrmals mit Benutzern in diesem verwendet skript)
  • telnet localhost 3306 sagt

    Probieren :: 1 ... Probieren 127.0.0.1 ... Verbunden mit localhost. Escape-Zeichen ist '^]'. Verbindung vom fremden Host geschlossen.


Die TestConnection.java die folgende Ausgabe erzeugt:

me @ my-Laptop: ~/Desktop $ java -classpath ‚/usr/share/java/mysql.jar:./ '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 zwischen der Art und Weise ist die jav ein Fahrer einer Verbindung mit dem DB und das Perl DBI-Modul funktioniert, aber die PERL Skript arbeitet

#!/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-Warnungen auf dem mysql, aber ich habe keine neue Warnungen erhalten. Als ich die Protokolle für Warnungen der Suche fand ich diese Nachrichten, wenn ich den Kater neu starten, weiß nicht, ob es das Problem zu finden, hilft:

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 
+1

Könnten Sie den 'TestConnection.java' von http versuchen: //testdrive.mapinfo. com/techsupp/miprod.nsf/kbase_by_product/B309A6631406A514852569770060E795 und aktualisieren Sie die Frage mit dem Ergebnis? –

+0

Wo haben Sie den mysql-Treiber jar platziert? Versuchen Sie, das Attribut auth = "Container" sowie – nos

+0

die mysql.jar symlinked in tomcat6/lib aus/usr/share/java zu entfernen. in/usr/share/java mysql.jar ist ein Symlink zur eigentlichen Datei im selben Verzeichnis. versuchte Versionen mysql-connector-java-5.1.11 und 5.1.6. Entfernen des Auth = "Container" -Attributs hilft auch nicht. :( –

Antwort

0

Bitte versuchen Sie es mit einem „offiziellen“ Connector/J 5.1 dh von MySQL verteilt keine deb (beachte, dass ich nichts gegen deb habe).

Aktivieren Sie bitte auch --log-warnings auf dem Server mysql und sehen Sie, ob etwas in Ihren Fehlerprotokollen angezeigt wird.

+0

Ich benutze die offizielle Connector-Version 5.1.11, aktiviert --log -Warnungen. aktualisiert die Frage –

3

Ich löste dieses Problem. Der Grund, warum dieser Fehler auftritt, ist tomcat Sicherheitseinschränkungen.

Sie haben für mich folgende Zeile in $TOMCAT-CONFIG/policy.d/04webapps.policy

permission java.net.SocketPermission "127.0.0.1:3306", "connect"; 

Werke hinzuzufügen, hoffen, dass es auch für Sie arbeiten :)

+0

Könnte jemand dies als gute Lösung genehmigen? –

+0

Ich habe das gleiche Problem. das hat bei mir nicht funktioniert. – jasonmclose

1
Class.forName("com.mysql.jdbc.Driver"); 
      con=DriverManager.getConnection("jdbc:mysql://localhost:3306/indiadb","root","root"); 

Check:

  1. die Port-Nummer muss es nur 3306 sein

  2. die mysql.jar in lib hinzufügen, wenn Sie Tomcat6

3

verwenden hatte ich das gleiche Problem.

Es stellt sich heraus, dass ich messed Sie den Server von drei mysqld-Instanzen, so töten sie die unerwünschte gelöst mein Problem:

[email protected]:~$ ps aux | grep mysql 
mysql  8149 0.1 0.4 280484 26008 ?  Ssl 13:24 0:00 /usr/sbin/mysqld 
me  8256 0.0 0.0 4392 836 pts/3 S+ 13:24 0:00 grep --color=auto mysql 
root  26569 0.0 0.0 5952 1856 ?  S 10:44 0:00 sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking 
mysql 26570 0.1 0.6 323528 41936 ?  Sl 10:44 0:15 /usr/sbin/mysqld --skip-grant-tables --skip-networking 

[email protected]:~$ sudo kill 26570 
Verwandte Themen