2014-03-03 4 views
7

konnte nicht erstellt werden Ich habe versucht, Projekt auf Tomcat 7.0.52 zu starten und zu DB über context.xml Datei zu initialisieren.SCHWER: Erste Verbindungen von Pool - Tomcat 7 mit context.xml Datei

Aber es wirft Reihe von Ausnahmen, kann ich nicht herausfinden, was es falsch ist.

Hier Konsolenausgabe:

java.sql.SQLException: com.mysql.jdbc.Driver 
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:254) 
    at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182) 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:701) 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:635) 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:486) 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:144) 
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:116) 
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:103) 
    at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:554) 
    at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:242) 
    at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:141) 
    at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321) 

Hier ist voll stack trace. Hier

ausgegeben tomcat catalina log

Snippet web.xml:

<resource-ref> 
    <description>Travel Agency Datasource</description> 
    <res-ref-name>jdbc/onlinedb</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

context.xml:

<Context> 
    <Resource name="jdbc/onlinedb" 
       type="javax.sql.DataSource" 
       factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
       maxActive="20" maxIdle="10" 
       maxWait="-1" 
       username="root" 
       password="secret" 
       driverClassName="com.mysql.jdbc.Driver" 
       url="jdbc:mysql://localhost:3306/travelagency?characterEncoding=utf8"/> 
</Context> 

Connectionmanager Klasse:

public class ConnectionManager { 
    private static Logger log = Logger.getLogger(ConnectionManager.class); 

    public static Connection getConnection() throws SQLException { 
     Connection con = null; 
     try { 
      Context initContext = new InitialContext(); 
      Context envContext = (Context) initContext.lookup("java:/comp/env"); 
      DataSource datasource = (DataSource) envContext.lookup("jdbc/onlinedb"); 
      con = datasource.getConnection(); 
     } catch (NamingException e) { 
      log.error(e); 
     } 
     return con; 
    } 
} 

mysql-connector-java-5.1.27-bin.jar wird cp hinzugefügt:

travel

Ich habe versucht, Inhalt context.xml Datei zu ändern: Fehler

<resource-env-ref> 
     <description>Travel Agency Datasource</description> 
     <resource-env-ref-name>jdbc/onlinedb</resource-env-ref-name> 
     <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type> 
</resource-env-ref> 

Aber es halten.

Wie diese Probleme zu lösen?

Antwort

11

Sie müssen dem Klassenpfad einen MySQL jdbc-Treiber hinzufügen.

setzen entweder eine MySQL-Binärdatei jar tomcat lib Ordner oder fügen Sie uns Anwendung WEB-INF/lib Ordner.

Sie können binäre jar (ändern Sprache entsprechend) finden: https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.27

+0

alle Trick ist, dass es hinzugefügt wird.. Ich habe die Frage aktualisiert. –

+3

Versuchen Sie, es zu tomcat lib Ordner – WeMakeSoftware

+0

hinzuzufügen, es funktioniert wirklich, danke –

4

Wenn Sie Ausnahmen wie diese Begegnung, die nützlichsten Informationen ist in der Regel am unteren Rand des Stacktrace:

Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    ... 
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:246) 

Die Problem ist, dass Tomcat com.mysql.jdbc.Driver nicht finden kann. Dies wird normalerweise dadurch verursacht, dass die JAR, die den MySQL-Treiber enthält, nicht dort ist, wo Tomcat sie erwartet (nämlich im Verzeichnis webapps/<yourwebapp>/WEB-INF/lib).

2

Ich habe auch mit dieser Ausnahme nach einem voll funktions context.xml Setup behandelt wurde angepasst. Ich wollte keine Umgebungsdetails in der context.xml, also habe ich sie herausgenommen und diesen Fehler gesehen. Ich erkannte, dass ich diese Datenquellenressource im Code basierend auf JVM -D-Argumenten der Systemeigenschaft vollständig erstellen muss.

Original-Fehler mit nur Benutzer/PWD/Host entfernt: org.apache.tomcat.jdbc.pool.ConnectionPool init SCHWEREN: Kann nicht Erstverbindungen von Pool erstellen.

Gesamten Inhalt von context.xml entfernt und versuchen Sie dies: Initialisieren Sie beim Starten des Anwendungsservers das Datenquellenobjekt irgendwann vor der ersten Verbindung. Wenn Sie Spring verwenden, sollten Sie dies in einer @Configuration-Bean im @Bean Datasource-Konstruktor tun.

Paket zu verwenden: org.apache.tomcat.jdbc.pool *

PoolProperties p = new PoolProperties(); 
p.setUrl(jdbcUrl); 
      p.setDriverClassName(driverClass); 
      p.setUsername(user); 
      p.setPassword(pwd); 
      p.setJmxEnabled(true); 
      p.setTestWhileIdle(false); 
      p.setTestOnBorrow(true); 
      p.setValidationQuery("SELECT 1"); 
      p.setTestOnReturn(false); 
      p.setValidationInterval(30000); 
      p.setValidationQueryTimeout(100); 
      p.setTimeBetweenEvictionRunsMillis(30000); 
      p.setMaxActive(100); 
      p.setInitialSize(5); 
      p.setMaxWait(10000); 
      p.setRemoveAbandonedTimeout(60); 
      p.setMinEvictableIdleTimeMillis(30000); 
      p.setMinIdle(5); 
      p.setLogAbandoned(true); 
      p.setRemoveAbandoned(true); 
      p.setJdbcInterceptors(
       "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"+ 
       "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"); 
      org.apache.tomcat.jdbc.pool.DataSource ds = new org.apache.tomcat.jdbc.pool.DataSource(); 
      ds.setPoolProperties(p); 
      return ds; 
+0

Wenn Sie eine neue Frage haben, fragen Sie sie bitte, indem Sie auf die Schaltfläche [Frage stellen] (http://stackoverflow.com/questions/ask) klicken. Fügen Sie einen Link zu dieser Frage hinzu, wenn es hilft, Kontext bereitzustellen. – computerfreaker

+1

Hallo - Entschuldigung arbeitete an der Bearbeitung, als ich Lösung vor dem Einreichen des ersten Teils fand. Kannst du bitte revote, wenn du zustimmst, ist das jetzt hilfreich. – bjm88

+0

Ich war eigentlich nicht derjenige, der deine Antwort abgelehnt hat. Es ist jedoch immer noch ein wenig verwirrend, da Sie scheinbar eine separate Frage stellen und dann die ursprüngliche Frage beantworten. Wenn du deine Frage erneut editierst, um sie zu entfernen (was besser als separate Frage gestellt werden würde, imho), werde ich den Schaden deines Downvoters beheben. – computerfreaker

Verwandte Themen