JPA несколько менеджеров транзакций

Решение этой проблемы постоянно меняется с течением времени, когда Unity и Android SDK меняются.

Обратите внимание, что его проблема, по-видимому, исправлена ​​в Unity 2017.1.

ПОСЛЕДНЕЕ РЕШЕНИЕ

1) Для Windows загрузите "tools_r25.2.3-windows.zip" и разархивируйте его.

2) Для MacOSX загрузите "tools_r25. 2.3-macosx.zip " и разархивируйте его.

3) Добавьте путь распакованного SDK к настройкам Edit -> ] ---> Внешние инструменты ---> SDK box.

STILL NOT WORKING?

Удалить SDK Tools 25 и Android SDK Tools 26. Удалить как SDK Platform-Tools, так и SDK Tools. Используйте номер версии ниже.

OLD SOLUTION:

Вы не правильно настроили SDK .

Для настройки Android SDK выполните следующие действия.

1. Убедитесь, что в SDKpath нет пробелов. Поэтому создайте папку с именем AndroidSDK в каталоге C.

2. Скопируйте папку Android-sdk в каталог C:/AndroidSDK.

Теперь ваш путь к SDK должен выглядеть так:

C:/AndroidSDK/Android-sdk

3. Обновите свой Android SDK-путь в редакторе Unity.

Теперь проверьте, работает ли это, пытаясь снова создать для Android.

Если это не удается, продолжайте снизу

4. Загрузите последнюю версию Unity.

5. Перезагрузите SDK , затем скопируйте файл в C:/AndroidSDK/Android-sdk.

6. Вернитесь в Unity и обновите путь

7. Создайте проект для Android еще раз, он покажет ошибку и попросит вас обновить SDK.

Нажмите кнопку «Обновить Android SDK». Unity автоматически обновит ваш SDK. Затем ваш SDK должен выглядеть как-то внизу. Ваша проблема должна быть удалена.

11
задан Ḟḹáḿíṅḡ Ⱬỏḿƀíé 17 June 2015 в 09:05
поделиться

2 ответа

Я предполагаю, что у Вас есть 2 варианта

Если Ваши примеры использования никогда не требуют обновлений обеих баз данных в рамках той же транзакции, то можно ли использовать два JpaTransactionManagers, но я не уверен, что Вы сможете использовать подход @Transactional? В этом случае Вам было бы нужно к нейтрализации на более старом механизме использования простого TransactionProxyFactoryBean для определения границ транзакции, например:

<bean id="firstRealService" class="com.acme.FirstServiceImpl"/>
<bean id="firstService"  
    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager" ref="firstJpaTm"/>
    <property name="target" ref="firstRealService"/>
    <property name="transactionAttributes">
        <props>
           <prop key="insert*">PROPAGATION_REQUIRED</prop>
           <prop key="update*">PROPAGATION_REQUIRED</prop>
           <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
        </props>
    </property>
</bean>
<!-- similar for your second service -->

Если Вы, требуют транзакции, охватывающей обе базы данных, то необходимо будет использовать менеджер транзакций JTA. Состояния API:

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

То, что это означает, - то, что необходимо будет предоставить менеджер транзакций JTA. В нашем приложении мы используем конфигурацию, подобную следующему:

<tx:annotation-driven transaction-manager="txManager"/>

<bean id="txManager" 
    class="org.springframework.transaction.jta.JtaTransactionManager">
    <property name="transactionManagerName" value="appserver/jndi/path" />
</bean>

Если Вы развертываетесь в appserver, то пружинный JtaTransactionManager должен сделать поиск к реальному менеджеру транзакций XA-compliant JTA, предоставленному appserver. Однако можно также использовать автономный менеджер транзакций JTA (но я еще не попробовал это сам),

Что касается конфигурирования поставщика решения для хранения данных Jpa, я не настолько знаком. Какого поставщика решения для хранения данных JPA Вы используете?

Код выше основан на нашем подходе, где мы использовали собственный компонент, в спящем режиме в противоположность реализации Hibernate JPA. В этом случае мы смогли избавиться от двух бобов HibernateTransactionManager и просто гарантировать, что и SessionFactories были введены с тем же ТМ JTA и затем используют tx:annotation-управляемый элемент.

Надеюсь, это поможет

9
ответ дан 3 December 2019 в 08:57
поделиться

Единственная ситуация, в которой у Вас может быть два менеджера транзакций Spring, состоит в том, если у Вас никогда нет обеих транзакций, открытых когда-то. Это внутренне не относится к распределенным транзакциям - те же ограничения применяются, даже если Вы хотите, чтобы эти два источника данных имели абсолютно отдельный (но потенциально накладывающийся вовремя) транзакция lifecyles.

Внутренне менеджеры транзакций Spring весь Spring использования TransactionSynchronizationManager, который сохраняет набор критического состояния в статических переменных ThreadLocal, таким образом, менеджеры транзакций, как гарантируют, будут топать на всем протяжении состояния друг друга.

4
ответ дан 3 December 2019 в 08:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: