Dee*_*pak 11 tomcat jpa jndi persistence.xml
我正在使用tomcat连接池,jpa,hibernate.我在tomcat的context.xml中创建的数据源工作正常,如果我尝试使用它:
source = (DataSource) ((Context) c.lookup("java:comp/env")).lookup("jdbc/kids");
Run Code Online (Sandbox Code Playgroud)
但是如果我在persistence.xml中指定这个jndi数据源
<persistence-unit name="kids-tomcat" transaction-type="JTA">
<jta-data-source>jdbc/kids</jta-data-source>
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)
我得到以下异常:org.hibernate.service.jndi.JndiException:无法查找JNDI名称[jdbc/kids]
不知道为什么会发生!
Dee*_*pak 14
最后它在我指定下面的属性之后今天工作了..因为仅仅提到数据源是不够的; 我们需要指定一些属性,比如使用哪种方言.如果我们指定数据源; 我们不需要指定数据库的用户名,密码url(因为所有都在数据源配置本身中指定).
最重要的一点是指定数据源的方式.它应该是完整的路径:java:/ comp/env/jdbc/kids.这一切都是因为我在comp之前错过了斜线.
<persistence-unit name="kids" transaction-type="RESOURCE_LOCAL">
<non-jta-data-source>java:/comp/env/jdbc/kids</non-jta-data-source>
<class>com.kids.domain.User</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
<property name="connection.autocommit" value="false"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
<property name="hibernate.show_sql" value="true"/>
</properties>
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8495 次 |
| 最近记录: |