Транзакции JTA с JPA (Hibernate)

Если я использую в файле persistence.xml тип транзакции = "RESOURCE_LOCAL", то я могу избежать использования источника данных, отличного от jta, с помощью свойств:

<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), но я хотел бы настроить все весной и с помощью свойств.

Любое решение для этого?


person Mirea Vasile    schedule 08.02.2012    source источник


Ответы (1)


Для типа транзакции JTA необходимо определить <jta-data-source>. Но если вы используете RESOURCE_LOCAL (не JTA), то это <non-jta-data-source>.

JTA — это тип транзакции по умолчанию, если он не указан. Этот элемент используется для указания источника данных, обычно это глобальное имя JNDI для ссылки на источник данных.

Транзакция в JTA может проходить через несколько постоянных единиц/баз данных и внешней среды (например, JMS). Обычно JTA используется в Java EE, а RESOURCE_LOCAL используется в среде Java SE.

person Nayan Wadekar    schedule 08.02.2012
comment
На самом деле мой вопрос: почему при использовании типа транзакции RESOURCE_LOCAL обычно у меня должен быть источник данных, отличный от jta, но, как я описываю, у меня все еще есть возможность использовать свойства и по-прежнему иметь возможность подключаться к моей базе данных, не имея источник данных. Есть ли такая возможность с использованием JTA типа транзакции? Чтобы подключиться к базе данных, используя только свойства без источника данных? - person Mirea Vasile; 09.02.2012
comment
@Mirea Уже упоминалось ранее, RESOURCE_LOCAL и не-jta одинаковы. JTA зависит от поставщика и является обязанностью контейнера. Вы пытаетесь получить прямое соединение с базой данных без использования источника данных. В JTA вы упоминаете все эти свойства в файле конфигурации, а затем ответственность за его контейнер, также рекомендуется использовать источник данных. - person Nayan Wadekar; 09.02.2012