2012-02-08 125 views
2

如果我在persistence.xml中交易类型使用=“RESOURCE_LOCAL”我然后可以通过使用特性避免使用非JTA数据源:JTA事务与JPA(休眠)

<properties> 
    <property name="hibernate.bytecode.use_reflection_optimizer" value="false"/> 
    <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/> 
    <property name="hibernate.connection.password" value="passsample"/> 
    <property name="hibernate.connection.url" value="jdbc:oracle:thin:urlsample"/> 
    <property name="hibernate.connection.username" value="usersample"/> 
    <property name="hibernate.default_schema" value="schemasample"/> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/>   
</properties> 

问题是如果我使用transaction-type =“JTA”,那么必须使用jta-data-source? 如果是强制性的,请告诉我为什么? 如果不是我需要做的?

我想用glassfish配置一个应用程序,一切工作正常,外部数据源(在glassfish中配置),但我想配置一切在春天和性能的帮助。

任何解决方案?

回答

1

对于JTA交易类型,您必须定义<jta-data-source>。但是,如果您使用的是RESOURCE_LOCAL(非JTA),则它是<non-jta-data-source>

JTA是默认的交易类型,如果没有指定。这些元素用于指定数据源,通常是用于引用数据源的全局JNDI名称。

JTA中的事务可以遍历多个持久单元/数据库&外部环境(如JMS)。通常,JTA用于Java EE & RESOURCE_LOCAL用于Java SE环境。

+0

我的问题实际上是:为什么使用RESOURCE_LOCAL事务类型时,通常我应该有一个非jta-data-source,但正如我所描述的,我仍然有可能使用这些属性并仍然能够连接到我的数据库没有数据源。 使用JTA事务类型有这种可能性吗?要仅使用不带数据源的属性连接到数据库? – 2012-02-09 09:28:27

+0

@Mirea早先已经提到,RESOURCE_LOCAL和non-jta是一样的。 JTA是供应商特定的,并且是容器的责任。您试图与数据库直接连接,而不使用数据源。在JTA中,您在配置文件中提及所有这些属性及其容器的责任,此外还建议使用数据源。 – 2012-02-09 16:47:39