Konfigurieren hibernate 4, um Verbindung zu einer Datenbank über eine JNDI-Datasource in tomcat 7
Ich bin mit Tomcat7,Struts-2.3.5,hibernate-4.1.7 und jotm-2.1.9 Breite microsoft sqlserver 2005 als mein java web application framework. wenn ich die jndi-datasource im Ruhezustand configurarion, es ablehnen zu arbeiten. Ich habe gelesen, scheinbar post in diesem Ort,Konfigurieren Sie den Ruhezustand, um Verbindung zu einer Datenbank über eine JNDI-Datasource,hat das problem nicht lösen.
1, ich habe die resource definition in tomcat server.xml nicht context.xml unter META-INF ;
<Context docBase="C:\workspace\javaspaces\sitexa\web"
privileged="true" antiResourceLocking="false" antiJARLocking="false">
<Resource name="jdbc/sitexaDB"
auth="Container"
type="javax.sql.DataSource"
maxActive="20" maxIdle="5" maxWait="10000"
factory="org.objectweb.jotm.datasource.DataSourceFactory"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://127.0.0.1:1433;databaseName=sitexa"
username="sa" password=""/>
<Resource name="UserTransaction" auth="Container" type="javax.transaction.UserTransaction" />
</Context>
2, ich habe alle libs müssen für die Datenbank-Verbindung und jta unter dem tomcat-Ordner /lib;
3, in web.xml:
<resource-env-ref>
<description>DB Connection</description>
<resource-env-ref-name>jdbc/sitexaDB</resource-env-ref-name>
<resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
</resource-env-ref>
4, in hibernate.cfg.xml:
<session-factory>
<property name="hibernate.connection.datasource">java:comp/env/jdbc/sitexaDB</property>
<property name="dialect">org.hibernate.dialect.SQLServer2005Dialect</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.max_fetch_depth">3</property>
<property name="hibernate.transaction.jta.platform">org.hibernate.service.jta.platform.internal.JOTMJtaPlatform</property>
<property name="hibernate.transaction.factory_class">org.hibernate.engine.transaction.internal.jta.JtaTransactionFactory</property>
<property name="hibernate.current_session_context_class">jta</property>
...
</session-factory>
5, Ausnahme:
%%%% Error Creating SessionFactory %%%%
org.hibernate.service.jndi.JndiException: Unable to lookup JNDI name [java:comp/env/jdbc/sitexaDB]
at org.hibernate.service.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:68)
at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.configure(DatasourceConnectionProviderImpl.java:116)
...
Caused by: javax.naming.NamingException: This context must be accessed through a java: URL
at org.apache.naming.SelectorContext.parseName(SelectorContext.java:776)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:135)
at javax.naming.InitialContext.lookup(InitialContext.java:415)
at org.hibernate.service.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:65)
- stackoverflow.com/questions/9905364/...
- hibernate.onjira.com/browse/HHH-7099
- lösen Sie die jndi-problem durch upgrade-tomcat-7.0.25 zu 7.0.32,----es ist ein tomcat-Fehler.
- Cool, der zweite link war dann richtig. Froh bekamen Sie es das arbeiten.
- vielen Dank ,chris!
- Sie haben die Benennung Ausnahme, che Ihre Jnds richtig publiziert.
- Ruhezustand wird nicht schließen Sie die jndi-es sollten lookup über die API.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fügen Sie die Daten in context.xml in der server.