精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-03-18
我想最好不用DataSourceUtils, 看javadoc里面是
自己需要对DataSource进行包装一下,包装为TransactionAwareDataSourceProxy 我其实是想看看谁这么用过,探讨一下.... 细节还是需要仔细研究的 毕竟用jdbcTemplate,还是比较麻烦的,而且直接面向sql的,不如我自己封装的好用. 我自己先做一些试验吧,估计这么用的人没有几个吧 |
|
返回顶楼 | |
发表时间:2005-03-18
不用JdbcTemplate很正常,DataSourceUtils只是个util类帮你把得到Connection加入到tx中,又不麻烦。
你要自己实现TransactionAwareDataSourceProxy的话还是要看看DataSourceUtils的源代码,看看如何将connection加入到tx中。 |
|
返回顶楼 | |
发表时间:2005-03-18
不需要实现吧,看javadoc的说明
只需要把原来的DataSource包装后当作原来的DataSource使用就可以了吧 |
|
返回顶楼 | |
发表时间:2005-03-18
我的意思就说你要自己动手包装,bind connection到current thread, 加入事务,还是挺麻烦的。用DataSourceUtils就会方便很多。
package rst.spring.datasourceutils; import java.io.PrintWriter; import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import org.springframework.jdbc.datasource.DataSourceUtils; /** * Class description. * * @author rst */ public class TransactionAwareDataSourceProxy implements DataSource { private DataSource datasource; /* (non-Javadoc); * @see javax.sql.DataSource#getLoginTimeout(); */ public int getLoginTimeout(); throws SQLException { return datasource.getLoginTimeout();; } /* (non-Javadoc); * @see javax.sql.DataSource#setLoginTimeout(int); */ public void setLoginTimeout(int arg0); throws SQLException { datasource.setLoginTimeout(arg0);; } /* (non-Javadoc); * @see javax.sql.DataSource#getLogWriter(); */ public PrintWriter getLogWriter(); throws SQLException { return datasource.getLogWriter();; } /* (non-Javadoc); * @see javax.sql.DataSource#setLogWriter(java.io.PrintWriter); */ public void setLogWriter(PrintWriter arg0); throws SQLException { datasource.setLogWriter(arg0);; } /* (non-Javadoc); * @see javax.sql.DataSource#getConnection(); */ public Connection getConnection(); throws SQLException { return DataSourceUtils.getConnection(datasource);; } /* (non-Javadoc); * @see javax.sql.DataSource#getConnection(java.lang.String, java.lang.String); */ public Connection getConnection(String arg0, String arg1); throws SQLException { return DataSourceUtils.getConnection(datasource);; } /** * @return Returns the datasource. */ public DataSource getDatasource(); { return datasource; } /** * @param datasource The datasource to set. */ public void setDatasource(DataSource datasource); { this.datasource = datasource; } } 你只要: datasourceProxy = new TransactionAwareDataSourceProxy(); datasourceProxy.setDatasource(m_datasource); dao.setDatasource(datasourceProxy); |
|
返回顶楼 | |
发表时间:2005-03-18
???
spring自己本身就带一个TransactionAwareDataSourceProxy 啊.... |
|
返回顶楼 | |
发表时间:2005-03-18
汗。。。
是哦是哦,没仔细看。 还要对connection的close方法进行处理,这倒没有想到。 |
|
返回顶楼 | |
发表时间:2005-03-22
TransactionProxyFactoryBean 必须是单态吗...很烦啊
|
|
返回顶楼 | |
发表时间:2005-03-22
看看这个方法的java doc,显然是可以prototype的。
setTarget() The target may be any object, in which case a SingletonTargetSource will be created. If it is a TargetSource, no wrapper TargetSource is created: This enables the use of a pooling or prototype TargetSource etc. |
|
返回顶楼 | |
发表时间:2005-03-22
哦...看到了...好像是可以,在spring的test里面有几个测试用的
不过正式的例子里面好像没人这么用过哦.... 而且看getObject里面是直接返回"this.proxy" 还是不太明白啊 回去试试再说吧... :( |
|
返回顶楼 | |
发表时间:2005-03-23
使用PrototypeTargetSource试了一下,装载applicationContext.xml的时候就报错
计划改自己的类,实现线程安全... |
|
返回顶楼 | |