Я пытаюсь использовать Spring 3 (.0.2.RELEASE) и JPA2 и Hibernate 3.5.1-Final ... Меня удивляет одна из причин, почему весна кажется приемлемой для диспетчера транзакций с именем " transactionManager "Когда transactionManager не назван «transactionManager»
Если я не назову его« transactionManager », Spring будет выбрасывать NoSuchBeanDefinitionException: бит bean с именем« transactionManager » не определен.
Вот мой конфиг:
<context:component-scan base-package="destiny.data.mining"/>
<context:annotation-config/>
<bean id="miningEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="mining"/>
</bean>
<bean id="miningTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" >
<property name="entityManagerFactory" ref="miningEntityManagerFactory"/>
</bean>
<tx:advice id="txAdviceMining" transaction-manager="miningTransactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="methods" expression="execution(* destiny.utils.AbstractDao+.*(..))"/>
<aop:advisor advice-ref="txAdviceMining" pointcut-ref="methods"/>
</aop:config>
<tx:annotation-driven transaction-manager="miningTransactionManager"/>
В этой конфигурации, Субъект менеджер Фабрика не обязательно назвали «EntityManagerFactory», и «txAdvice» является не обязательно назвали «txAdvice», либо. Но я не знаю, почему на Земле весной нужен менеджер транзакций с именем «transactionManager»?
Можно ли каким-либо образом назвать диспетчера транзакций «transactionManager»? (Я бег несколько файлов весна конфигурации, поэтому я стараюсь, чтобы избежать имени-противоречивое)
тестового код:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:mining.xml"})
public class MiningPersonDaoTest
{
@Inject
private EntityManagerFactory miningEntityManagerFactory;
@Inject
private MiningPersonDao miningPersonDao;
@Transactional
@Test
public void testUpdate()
{
MiningPerson p = miningPersonDao.get(42L);
p.setLocationName("OOXX");
miningPersonDao.update(p);
System.out.println(p);
}
}
Спасибо! Это решено! – smallufo
Но я все еще беспокоюсь о том, что DAO вводится в другие рамки (например, Wicket), может ли он добавить @TransactionConfiguration в компонент компоновки калитки? – smallufo
Вам нужно попробовать, чтобы убедиться, но я * думаю *, что в «реальном» контексте вам не понадобятся аннотации - Spring будет искать правильный transactionManager, основанный на идентификаторе компонента. Было бы здорово, если бы вы могли опубликовать свои результаты здесь, чтобы потомство тоже увидело. –