2017-02-27 2 views
0

Je suis en train d'essayer de mettre en place un pool de connexions hibernate et jdbc par JNDI, mais je ne parviens pas à le faire. Après des heures de recherche, je viens à vous, peut-être que quelqu'un connaît la réponse.Hibernate Jndi Tomcat Erreur: Non supporté par BasicDataSource

Tout d'abord, j'utilise Tomcat 8.0 et Hibernate 5.2.8. Je ne peux pas vraiment alterner dans ceux-ci, si c'est nécessaire pour le faire fonctionner.

L'erreur im obtenir est: « java.lang.UnsupportedOperationException: Non pris en charge par BasicDataSource »

Ce que je trouve à ce jour: L'erreur semble se produire (je ne suis pas sûr à 100%) en raison d'un changement de le DatasourceConnectionProviderImpl.getConnection, où "getConnection (nom d'utilisateur, mot de passe" est "déprimé" (En fait, il jette simplement cette erreur)

Mais voici le piège, même si je ne transfère aucun paramètre, je reçois cette exception J'ai essayé de faire ma propre interface de "javax.sql.DataSource" pour surmonter cela, mais cela n'a pas aidé non plus.Autre chose: JDBC fonctionne très bien, le seul problème est hibernate.

suivi du contexte, web et infos classe:

Contexte:

<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(); 
    } 
} 

si plus d'information est nécessaire , im ha ppa pour fournir

Edith:

Comme demandé:

<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

Pouvez-vous imprimer votre fichier hibernate.cfg.xml? –

+0

J'ai ajouté le fichier cfg.xml. – Bienenwolf

+0

J'ai remarqué que vous mentionnez 'managedBean' pour vos mappings, mais vous mentionnez' managedBeans' quand vous avez configuré Hibernate. Avez-vous deux chemins, est-ce une faute de frappe, ou la raison de l'échec. Je me suis levé une instance Tomcat8 avec Hibernate 5.2.8, pas de problèmes JNDI. – Naros

Répondre

0

Peut-être qu'il est le même que celui mentionné ici: tomcat-connection-pooling-java-lang-unsupportedoperationexception-not-support

Résumé de l'une des réponses: Si hibernate ne trouve la propriétés hibernate.connection.username ou/et hibernate.connection.password dans le classpath il utilise la méthode obsolète getConnection(user,password).

+0

Firstoff, merci pour votre commentaire. Oui, cela m'a fait penser que je pourrais avoir le même problème, mais comme je l'ai mentionné, j'ai essayé toute méthode pour supprimer le nom d'utilisateur et mot de passe. Même pas le mettre ni config et hbm.xml fonctionne. Aussi la méthode "propre interface" ne voulait pas travailler – Bienenwolf