не определен не-jta-источник данных в JPA - PullRequest
0 голосов
/ 19 февраля 2011

У меня есть сопоставление JPA с HSQLDB, и файл persistence.xml выглядит следующим образом:

<persistence-unit name="HMC">
  <jta-data-source>java:hmc</jta-data-source>
  <class>org.hmc.jpa.models.BloodGroup</class>
  <class>org.hmc.jpa.models.ContactInfo</class>
  <properties>
    <property 
      name="hibernate.transaction.manager_lookup_class"
      value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
    <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
  </properties>
</persistence-unit>

Но всякий раз, когда приложение развертывается, оно выдает исключение RuntimeException со словами: Specification violation [EJB3 JPA 6.2.1.2] - You have not defined a non-jta-data-source for a RESOURCE_LOCAL enabled persistence context named: ABC

У меня также естьисточник данных, определенный в JBoss.Есть ли что-то, чего мне не хватает в конфигурации?

С уважением, Сатья

Ответы [ 3 ]

2 голосов
/ 14 марта 2013
  1. если тип транзакции единицы персистентности - JTA, Элемент jta-datasource используется для объявления имени JNDI JTA источник данных, который будет использоваться для получения соединений. Это общий случай.
  2. если тип транзакции единицы сохраняемости является локальным для ресурса, не-jta-источник данных должен использоваться для объявления имени JNDI не-JTA источник данных.
2 голосов
/ 23 апреля 2014

В этом случае JBoss автоматически сканирует и проверяет файлы с именем persistence.xml, поскольку вы используете Spring для управления bean-компонентами, я полагаю, вы не используете EJB3.

Необходимо понимать, хотите ли вы, чтобы JBoss управлял транзакциями JTA для вас, и если вы хотите использовать JBoss Transaction Manager, или если вы просто хотите выполнять транзакции JPA без контроля транзакций JTA.

Если вы хотите просто использовать JPA-транзакции и пропустить JBoss TransactionManagener, вы можете просто переименовать свой файл persistence.xml в spring-persistence.xml (или как вам угодно), а в файле spring-context.xml вы можете изменить Ваш entityManagerFactory для этого:

<!-- JPA primary EntityManagerFactory -->  
      <bean id="entityManagerFactory" lazy-init="true"  
          class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"  
          p:persistenceUnitName="ExamplePU"  
          p:persistenceXmlLocation="classpath:/META-INF/spring-persistence.xml"  
          p:jpaVendorAdapter-ref="jpaVendorAdapter"  
          p:jpaDialect-ref="jpaDialect"  
          p:dataSource-ref="dataSource"/> 

В результате переименования файла JBoss не будет его проверять, поскольку вы работаете вне спецификации EJB и не используете EJB-компоненты, JBoss не должен сканировать этот файл в любом случае. И так как вы переименовали его, вам нужно сообщить Spring, где он находится и под каким именем.

0 голосов
/ 19 февраля 2011

Я заработал, убрав transaction-type="RESOURCE_LOCAL" и изменив java:hmc на java:/hmc.Но теперь у моего приложения возникает другая проблема, когда я пытаюсь сохранить его.

Оно выдает: java.lang.IllegalStateException: A JTA EntityManager cannot use getTransaction()

Кто-нибудь может мне сказать, как получить соединение и начать транзакцию в режиме JTA?

С уважением,

Сатья

...