Как правильно использовать LocalContainerEntityManagerFactoryBean с JPA - PullRequest
1 голос
/ 17 февраля 2012

Я скачал пример приложения, которое использует Hibernate и JPA, проблема заключается в единице персистентности.Кажется, я могу использовать либо <persistence-unit name="hibernatePersistenceUnit" transaction-type="RESOURCE_LOCAL">, либо <persistence-unit name="hibernatePersistenceUnit" transaction-type="JTA"> из своего исследования. Я обнаружил, что если я использую первое, мне также нужно указать <non-jta-data-source>, а со вторым <jta-data-source> (я думаю, что это правильно, но поправьте меня, если яЯ ошибаюсь)

Я думаю, что первое подразумевает, что в веб-приложении будут настроены URL, драйвер, пользователь, pwd.А второй будет искать источник через JNDI в контейнере (снова исправьте меня, если я ошибаюсь) Но значение, которое мне нужно указать для этого свойства, является моим камнем преткновения.Я видел jdbc: sampleDS, java: sampleDS.(Являются ли они также поисками jndi? Не видели jndi: sampleDS). Должно ли это быть jdbc: или java: или jndi: и это все "JNDI"?

А "sampleDS", что на самом деле означает это имя?Другими словами, относится ли оно к имени bean-компонента (я использую spring, а мой bean-компонент, который настраивает информацию источника данных, называется jpaDataSource), если я использую resource_local, или он ссылается на ресурс jndi где-то на сервере приложений, например, JBOSS,что-то еще, о чем я не знаю?

1 Ответ

1 голос
/ 10 октября 2012

RESOURCE_LOCAL вы используете, если вам не нужны глобальные транзакции (транзакции, охватывающие несколько постоянных единиц, то есть баз данных) или JNDI-определенные источники данных, если вам нужны глобальные транзакции, вы должны использовать JTA, которая, в свою очередь, требует, чтобы вы использовали источники данных JNDI, поскольку они находятся в сервер приложений, который может обрабатывать глобальные транзакции.

Источники данных JNDI настраиваются на сервере приложений - в случае JBOSS либо в файле configuration / standalone.xml, либо с файлами * -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>
...