Hibernate 5.0方言自动检测在Tomcat上不使用JNDI
我正在尝试连接到Tomcat的server.xml中指定的JNDI数据源。 我的hibernate.cfg.xml如下所示:Hibernate 5.0方言自动检测在Tomcat上不使用JNDI,hibernate,tomcat,jdbc,jndi,Hibernate,Tomcat,Jdbc,Jndi,我正在尝试连接到Tomcat的server.xml中指定的JNDI数据源。 我的hibernate.cfg.xml如下所示: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configu
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.datasource">java:comp/env/jdbc/myDB</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<property name="hibernate.dialect">org.hibernate.dialect.org.hibernate.dialect.DerbyDialect</property>
<property name="hibernate.current_session_context_class">org.hibernate.context.internal.ThreadLocalSessionContext</property>
<mapping class="com.gigatronik.bosch.plugin.remoteserver.db.ConnectEntity"/>
</session-factory>
</hibernate-configuration>
及
在Jetty中,自动发现功能非常有效。似乎只有ApacheTomcat有这个问题。如何使用Tomcat启用自动检测
更新:
我的Tomcat配置:
...
<GlobalNamingResources>
...
<Resource name="jdbc/myDB" auth="Container" type="javax.sql.DataSource"
driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
url="jdbc:derby:myDB;create=true"
maxTotal="100" maxIdle="30" maxWaitMillis="10000" />
...
</GlobalNamingResources>
。。。
...
...
我终于找到了问题的原因:
未定义应用程序的context.xml中的ResourceLink。在我另外定义之后
<Context path="/foo.bar">
<ResourceLink global="jdbc/myDB" name="jdbc/myDB" type="javax.sql.DataSource"/>
</Context>
这种联系终于起作用了。事件JNDI现在可以工作了。所以事实上@Stefan对我的问题的评论根本不正确
因此,请注意那些不能很好地描述问题原因的休眠错误。我终于找到了问题原因: 未定义应用程序的context.xml中的ResourceLink。在我另外定义之后
<Context path="/foo.bar">
<ResourceLink global="jdbc/myDB" name="jdbc/myDB" type="javax.sql.DataSource"/>
</Context>
这种联系终于起作用了。事件JNDI现在可以工作了。所以事实上@Stefan对我的问题的评论根本不正确
因此,请注意那些不能很好地描述问题原因的hibernate错误。我假设您已经在tomcat中配置了“java:comp/env/jdbc/myDB”,因为您在hibernate配置中引用了它,但在您所做的描述中不要引用它?如果你做了:让我们知道怎么做。如果没有,请执行。自动发现仅在直接数据库连接上有效,而不使用JNDI。您可以将方言属性作为JNDI值存储在服务器上,并在配置Hibernate时读取它。@OlafKock我已经用tomcat配置更新了最初的帖子。是正确的吗?@Stefan但是为什么在使用Jetty时它会工作呢?我假设您已经在tomcat中配置了“java:comp/env/jdbc/myDB”,正如您在hibernate配置中引用它一样,但在您对所做工作的描述中不要引用它?如果你做了:让我们知道怎么做。如果没有,请执行。自动发现仅在直接数据库连接上有效,而不使用JNDI。您可以将方言属性作为JNDI值存储在服务器上,并在配置Hibernate时读取它。@OlafKock我已经用tomcat配置更新了最初的帖子。这是正确的吗?@Stefan但为什么在使用Jetty时它会起作用?
<Context path="/foo.bar">
<ResourceLink global="jdbc/myDB" name="jdbc/myDB" type="javax.sql.DataSource"/>
</Context>