我下载了一个使用Hibernate和JPA的示例应用程序,问题是持久性单元。我似乎可以使用<persistence-unit name="hibernatePersistenceUnit" transaction-type="RESOURCE_LOCAL">
或<persistence-unit name="hibernatePersistenceUnit" transaction-type="JTA">
根据我的研究,我发现如果我使用第一个,我还必须指定<non-jta-data-source>
和第二个<jta-data-source>
(我认为这是正确的,但如果我错了,请纠正我)
我认为第一个意味着将在web-app中配置url,driver,user,pwd。第二个将通过容器中的JNDI查找源代码(如果我错了,再次纠正我) 但我需要为该属性指定的值是我的绊脚石。 我见过jdbc:sampleDS,java:sampleDS。 (这些也是jndi查找吗?没见过jndi:sampleDS)所以应该是jdbc:或java:还是jndi:这些都是“JNDI”吗?
“sampleDS”这个名字实际上指的是什么?换句话说,它是指bean名称(我使用spring和我的bean配置数据源信息称为jpaDataSource)如果我使用resource_local或者它是指应用程序服务器上某处的jndi资源,例如JBOSS,或者我不知道的其他事情?
答案 0 :(得分:1)
您使用的RESOURCE_LOCAL如果需要全局事务,则必须使用JTA,而JTA又要求您使用JNDI数据源,因为它们位于应用程序服务器,它可以处理全局事务。
JNDI数据源在应用程序服务器中配置 - 如果JBOSS位于configuration / standalone.xml中,或者位于deployments文件夹中的* -ds.xml文件中。
java:sampleDS是一个JNDI名称,例如mssql-ds.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<datasource jndi-name="java:jboss/datasources/myDatabase" pool-name="myDatabase" enabled="true" jta="true" use-java-context="true" use-ccm="true">
<connection-url>
jdbc:sqlserver://localhost;databaseName=myDatabase
</connection-url>
<driver>
sqljdbc
</driver>
<security>
<user-name>
myusername
</user-name>
<password>
mypassword
</password>
</security>
</datasource>
<datasources>