2017-02-27 2 views
0

nicht unterstützt. Ich versuche tatsächlich, ein Hibernate- und Jdbc-Verbindungs-Pooling durch JNDI einzurichten, aber ich schaffe es nicht, dies zu tun. Nach stundenlanger Recherche komme ich zu dir, vielleicht kennt jemand die Antwort.Hibernate Jndi Tomcat Fehler: Wird von BasicDataSource

Das Wichtigste zuerst: Ich benutze Tomcat 8.0 und Hibernate 5.2.8. Ich kann nicht wirklich in denen abwechseln, wenn das nötig ist, damit es funktioniert.

Der Fehler im bekommen ist: „java.lang.UnsupportedOperationException: Nicht durch BasicDataSource unterstützt“

Was ich bisher herausgefunden: Der Fehler scheint (im nicht 100% sicher) aufgrund einer Änderung auftritt in DatasourceConnectionProviderImpl.getConnection, wobei "getConnection (Benutzername, Passwort" ist "deprecated").

Aber hier ist der Haken, auch wenn ich keine Parameter übertrage, bekomme ich diese Ausnahme Ich versuchte, meine eigene Schnittstelle von "javax.sql.DataSource" zu machen, um das zu überwinden, aber das half auch nicht.

Eine andere Sache: JDBC funktioniert gut, das einzige Problem ist Winterschlaf.

die Kontext Anknüpfend, Web- und Klasse Infos:

Kontext:

<Resource name="jdbc/basic" 
     global="jdbc/basic" 
     auth="Container" 
     type="javax.sql.DataSource" 
     maxActive="10" 
     maxIdle="20" 
     maxWait="10000" 
     username="root" 
     password="1" 
     driverClassName="com.mysql.jdbc.Driver" 
     testOnBorrow="true" 
     url="jdbc:mysql://localhost/javatest" 
    /> 

Web:

<resource-ref> 
     <description>JNDI MYSql JDBC Connection</description> 
     <res-ref-name>jdbc/basic</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <res-auth>Container</res-auth> 
    </resource-ref> 

Code:

public TestClass() { 
    try { 
     Connection jdbc = ((javax.sql.DataSource) new InitialContext().lookup("java:comp/env/jdbc/basic")).getConnection(); 
     System.out.println(new Configuration().configure("managedbeans/hibernate.cfg.xml").buildSessionFactory().openSession().createQuery("Select * from Testdata").list().size()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

wenn mehr Informationen benötigt werden Im ha ppy

Edith zu bieten:

wie gewünscht:

<hibernate-configuration> 
    <session-factory> 

     <property name="hibernate.connection.datasource">java:comp/env/jdbc/basic</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
     <property name="show_sql">true</property> 
     <property name="current_session_context_class">thread</property> 
     <property name="hbm2ddl.auto">update</property> 
     <property name="hibernate.max_fetch_depth">3</property> 

     <!-- Mapped annotated entity--> 
     <mapping class="managedbean.TestPojo"/> 

    </session-factory> 
</hibernate-configuration> 
+0

Können Sie Ihre hibernate.cfg.xml auch drucken? –

+0

Ich habe die Datei cfg.xml hinzugefügt. – Bienenwolf

+0

Ich habe bemerkt, dass Sie 'managedBean' für Ihre Mappings erwähnen, aber dann erwähnen Sie' managedBeans', als Sie Hibernate konfiguriert haben. Haben Sie beide Wege, ist das ein Tippfehler oder der Grund für das Scheitern. Ich stand eine Tomcat8-Instanz mit Hibernate 5.2.8 auf, keine JNDI-Probleme. – Naros

Antwort

0

Möglicherweise ist es das gleiche wie hier erwähnt: tomcat-connection-pooling-java-lang-unsupportedoperationexception-not-support

Zusammenfassung eines der Antworten: Wenn Hibernate die nicht finden Eigenschaften hibernate.connection.username oder/und hibernate.connection.password innerhalb des Klassenpfads verwendet es die veraltete Methode getConnection(user,password).

+0

Firstoff, danke für deinen Kommentar. Ja, das hat mich glauben lassen, dass ich das gleiche Problem haben könnte. Aber wie ich bereits erwähnte, habe ich versucht, Benutzernamen und Passwort zu entfernen. Selbst wenn es nicht funktioniert, funktionieren weder config noch hbm.xml. Auch die Methode "Eigene Schnittstelle" wollte nicht funktionieren – Bienenwolf

Verwandte Themen