2012-05-29 3 views
0

Если я упоминаю как источник jta и non-jta в файле persistence.xml, как провайдер определит, что и когда использовать? Есть ли способ обеспечить использование источника данных, отличного от jta, в определенном сценарии? Я использую IBM OpenJPA.jta и non jta in pe

Некоторые поставщики позволяют объявлять как источник данных jta-datasource, так и источник данных, не являющийся jta, и использовать позднее для оптимизации чтения через соединения, не связанные с JTA (то есть это не будет связано с текущей транзакцией JTA). Как это работает, и если OpenJPA поддерживает это? Difference between a "jta-datasource" and a " resource-local " datasource?

ответ

0

Трудно понять, почему вы упоминаете как jta, так и non-jta источник данных в persistence.xml. Вам не нужно объявлять обоим, и вам может потребоваться объявить один, jta или non-jta источник данных. Если вы используете jta-источник данных, вы настроите это на своем сервере приложений и также объявите в своем файле persistence.xml. Если вы можете ' t использовать jta datasource, вы настроите соединение JDBC в вашем файле persistence.xml.

+0

Похоже, что какой-то поставщик оптимизирует использование с использованием источника данных, отличного от jta, для выполнения запросов, которые не должны включаться в транзакцию. В приведенном ниже URL-адресе приведен пример http://webspherepersistence.blogspot.in/. Ищете ясность относительно того, как это работает, и если это работает. –

+0

http://stackoverflow.com/questions/3217586/difference-between-a-jta-datasource-and-a-resource-local-datasource - некоторые провайдеры даже позволяют объявлять как jta-datasource, так и не-jta- datasource и использовать позднее для оптимизированного чтения через соединения, отличные от JTA (т. е. которые не будут связаны с текущей транзакцией JTA). –

2
  1. Возможно, что вы хотите, чтобы cofigure отдельных единиц сохраняемости для источников данных & затем инъекционных соответственно.

    <persistence-unit name="JTA_DS" transaction-type="JTA"> 
          <jta-data-source>java:JTA_DS</jta-data-source> 
    </persistence-unit> 
    <persistence-unit name="NON_JTA_DS" transaction-type="RESOURCE_LOCAL"> 
          <non-jta-data-source>java:NON_JTA_DS</non-jta-data-source> 
    </persistence-unit> 
    

    Теперь вы можете создать EnityManager для соответствующих единиц постоянства.

    @PersistenceContext(unitName="JTA_DS")
    private EntityManager _JTAManager;

    @PersistenceContext(unitName="NON_JTA_DS")
    private EntityManager _NonJTAManager;

  2. Иначе вы можете построить EntityManagerFactory вручную по мере необходимости с помощью соответствующего источника данных. Вы можете сослаться на ссылку this для получения более подробной информации.

+0

знаете ли вы, можете ли вы безопасно использовать один и тот же источник данных для обоих единиц хранения? Я пробовал и, кажется, отлично работает. –

+0

@ JaqenH'ghar Это зависит от поставщика, немногие могут его поддержать. Здесь можно обратиться - http://stackoverflow.com/a/3218191/366964; что объясняет разницу и где это может быть применимо. –

Смежные вопросы