如何正确使用LocalContainerEntityManagerFactoryBean与JPA

时间:2012-02-17 05:26:45

标签: hibernate jpa datasource jndi jta

我下载了一个使用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,或者我不知道的其他事情?

1 个答案:

答案 0 :(得分:1)

如果您不需要全局事务(事务跨越多个持久性单元,即数据库)或JNDI定义的数据源,则使用

您使用的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>