我有一个名为dao-context.xml
的上下文,如下所示:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" lazy-init="true" destroy-method="close">
<!-- define data source properties -->
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- define another properties -->
</beans>
<!-- define dao object and set jpaTemplate -->
<bean id="doa_obj" class="DaoObject">
<!-- set jpa template -->
</bean>
并按以下方式加载此上下文:
public class DaoFactory
{
private static ApplicationContext dao_ctx = new ClassPathXmlApplicationContext("dao-context.xml");
public static ApplicationContext getDaoCtx()
{
return dao_ctx;
}
}
然后我将Biz Layer
上下文定义为以下名称&#34; biz_layer.xml&#34;:
<bean id="ctx" class="dao.DaoFactory" factory-method="getDaoCtx"/>
<bean factory-bean="ctx" factory-method="getBean" id="emf">
<constructor-arg index="0" value="entityManagerFactory"/>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="emf"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="biz_obj" class="BizObject" />
和BizObject
定义如下:
@Transactional
public class BizObject
{
@Transactional
public void issueDoc()
{
((DaoObject)DaoFactory.getDaoCtx().getBean("Dao_Obj")).save(new DaoEntity('Arture'));
}
}
最后我有一个主要方法如下:
Public class Main
{
public static void main(String[] args)
{
ApplicationContext biz_ctx = new ClassPathXmlApplicationContext("biz_layer.xml");
BizObject bizObj = (BizObject)biz_ctx.getBean("biz_obj");
bizObj.issueDoc();
}
}
我通过几种情况进行测试。
Main
类时,任何异常都不会引发但是data base
上没有提交任何记录。 Main
类时,bizObj
变量不是代理。 biz_obj
bean定义为dao_context.xml
并在Main
类中初始化它时,bizObj
是代理,@Transactional
正常工作并且已提交到{{1} }}。 data base
时,一切正常。我的问题是:
当在同一个上下文中定义所有bean包含Transaction
图层bean和Dao
图层bean时,所有事情都工作得很好但是在单独的上下文中Biz
注释不起作用且任何异常不要这样提高。