提问者:小点点

在Liviay中使用Spring jdbc进行事务管理


我需要在liferay中使用Spring jdbc实现JTA事务管理。我有两个使用jndi在liferay中连接的数据库。在我的项目中,我正在使用jdbc Spring dao进行jdbc CRUD操作,对于Liferay,它是通过liferay内置的服务api。对于任何异常,回滚对于其他数据库都工作正常,但不适用于liferay。

下面是我的代码示例:在portal-ext.prop中,我定义了

transaction.management.impl= <JTATransactionmanager>

在我的项目上下文中.xml tomcat我定义了Liferay网站中提到的用户事务:context.xml

`<Resource name="UserTransaction" auth="Container" type="javax.transaction.UserTransaction" />
<Transaction factory="org.objectweb.jotm.UserTransactionFactory" jotm.timeout="600" /><br>
<Resource auth="Container" type="javax.sql.DataSource" factory="org.objectweb.jotm.datasource.DataSourceFactory" driverClassName="<postgresqldriver>" name="jdbc/LiferayPool" username="root" password="" url="jdbc:mysql://localhost/lportal?useUnicode=true&amp;characterEncoding=UTF-8&amp;useFastDateParsing=false" />}}}<br>

<Resource auth="Container" type="javax.sql.DataSource" factory="org.objectweb.jotm.datasource.DataSourceFactory" driverClassName="<postgresqldriver>" name="jdbc/test" username="root" password="" url="jdbc:mysql://localhost/test?useUnicode=true&amp;characterEncoding=UTF-8&amp;useFastDateParsing=false" />}}}


'在我的项目bean.xml:

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


<beans:bean id="dbDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <beans:property name="jndiName" value="java:comp/env/jdbc/test"/>
    </beans:bean>

    <bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager" />

在我的课堂上:

@Transactional(rollback{myexception.class})
public void test()

共2个答案

匿名用户

首先关注这个讨论。

您不会忘记的是,Liferay回滚PortalException或SystemException…但它仅回滚在当前事务上下文中注入的bean。

这意味着不应该使用XLocalServiceUtil,而是使用注入的xLocalServicebean。要获得它,您需要通过service.xml声明或在serviceImpl类中添加并引用以下内容来建议服务层:

@BeanReference(type=XArticleLocalService.class)
protected XArticleLocalService xArticleLocalService;

希望这能帮到你。

匿名用户

我相信您正在使用XXXServiceUtil.java.无论何时使用ServiceUtil,您调用的任何方法都会在不同的事务管理器下执行(无论当前线程事务状态如何),因为它是一个完全不同的类加载器。请记住,在Liferay中,每个portlet/插件都有自己的类加载器。