Rop与jdbcTemplate整合怎么搞?

rstornado 2012-09-21
我调整了bean的装载顺序,rop启动正常。下面做些测试看看。请问能分享一下
風一樣的男子 你的具体解决方案吗?
風一樣的男子 2012-09-21
rstornado 写道
我调整了bean的装载顺序,rop启动正常。下面做些测试看看。请问能分享一下
風一樣的男子 你的具体解决方案吗?

我现在是加多了一层bean注解为@Service
注入给Rop Service使用
不过一直想省掉那一层,因为这样子Rop 框架异常(非业务异常)的话还是会访问DB
因为我们的逻辑肯定是在返回 response 之前的,而如果 返回 response 的时候异常这样就没法做到事物控制

你说的调子bean加载顺序是怎样的?
idifei24 2012-09-22
我调整了bean的装载顺序,rop启动正常。下面做些测试看看。请问能分享一下
風一樣的男子 你的具体解决方案吗?[/

请问是怎样调整?
rstornado 2012-09-24
不好意思,之前是启动成功,但是事实上逻辑是有问题的。现在dao和entity的事情搞定了,service还在努力中。由于service类增加了实现接口之后会报错,所以准备用cglib代理的方式配置事务。
風一樣的男子 2012-09-24
rstornado 写道
不好意思,之前是启动成功,但是事实上逻辑是有问题的。现在dao和entity的事情搞定了,service还在努力中。由于service类增加了实现接口之后会报错,所以准备用cglib代理的方式配置事务。


我是这么搞的

RopService->Action(注解@Service,事务控制在这里)->Dao

实际上调用Action后RopService返回响应前异常是没问题的
证明该做的事都正常通过了,只是正常响应处理有问题而已,因为错误的响应是在拦截器或是Action逻辑里做的,比如账号不存在,密码错误什么的
rstornado 2012-09-24
你的做法原理上没问题,但是如果业务场景要求openSessionInView模式实现,那么事务最好是跟session在同一级别。
rstornado 2012-09-25
请问能共享一下你的代码么?我按照你的策略去做没有成功,接口被调用的时候找不到事务。
風一樣的男子 2012-09-25
rstornado 写道
你的做法原理上没问题,但是如果业务场景要求openSessionInView模式实现,那么事务最好是跟session在同一级别。


你把这个openSessionInView理解错了吧?这是为解决ORM延时加载诞生的
風一樣的男子 2012-09-25
rstornado 写道
请问能共享一下你的代码么?我按照你的策略去做没有成功,接口被调用的时候找不到事务。


@Repository
public class AccountDaoImpl extends DaoImpl implements AccountDao<Account> {
///
}

@Service
@Transactional(propagation=Propagation.SUPPORTS,readOnly=true)
public class AccountActionImpl implements AccountAction<Account> {
        @Resource
	private AccountDao<Account> dao;
            @Transactional(propagation=Propagation.SUPPORTS,readOnly=false)
	@Override
	public void register(String email, String password, String nickName) {
		dao.register(email, password, nickName);
	}
}

@ServiceMethodBean(version = "1.0")
public class AccountService {
	
	@Resource
	private AccountAction<Account> action;
@ServiceMethod(method = "account.register",version = "1.0", httpAction=HttpAction.POST)
	public Object register(RegisterAccountRequest request) throws Exception{
		String email=request.getEmail();
		String password=request.getPassword();
		// 密码加密
		
		// 二次加密
		
		action.register(email, password, request.getNickName());
		return CommonRopResponse.SUCCESSFUL_RESPONSE;
	}
}

<!-- 定义事务处理类,不同的数据访问方式,事务处理类不同 比如:Hibernate操作的HibernateTransactionManager,JDBC操作的使用DataSourceTransactionManager -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>

	<!-- 声明使用注解式事务 -->
	<tx:annotation-driven transaction-manager="transactionManager" />
rstornado 2012-09-25
我的做法和你的几乎一样,但是就是不行,报错为:Caused by: org.hibernate.HibernateException: save is not valid without active transaction,应该是无法打开事务,整理很久都不行。请问能不能把你的工程发我一份?barlos@tom.com
Global site tag (gtag.js) - Google Analytics