该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-11-11
最后修改:2009-11-18
不知道楼下的同学自己亲手验证过没有,帖子也竟然被投为"新手帖"
按照楼下同学说的,原来可以通过外围构造一个TransactionManager通过setTxManger()方法赋值过去....从而根本不需要更改ibatis的源码了...这个方法确实比原来的好.. String resource = "sql-map-config.xml"; Reader reader = Resources.getResourceAsReader (resource); SqlMapClientImpl sqlMap = (SqlMapClientImpl) SqlMapClientBuilder.buildSqlMapClient(reader); TransactionConfig transactionConfig = new ExternalTransactionConfig(); Properties properties = new Properties(); properties.setProperty("SetAutoCommitAllowed", "false"); transactionConfig.setDataSource(getDataSource()); transactionConfig.setProperties(properties); TransactionManager txManager = new TransactionManager(transactionConfig); sqlMap.getDelegate().setTxManager(txManager);
以上方案修改如下: 把transactionConfig.setProperties(properties); 更改为transactionConfig.initialize(properties);
//修改SqlMapClientBuilder.java /** 新增方法,把外部的ds传进去**/ /** * add ds parameter by cj.yangjun@gmail.com * @param reader * @param ds * @param forceCommit * @return */ public static SqlMapClient buildSqlMapClient(Reader reader,DataSource ds,boolean forceCommit) { // return new XmlSqlMapClientBuilder().buildSqlMap(reader); return new SqlMapConfigParser().parse(reader,ds,forceCommit); } //修改SqlMapConfigParser.java /**parser是一个NodeletParser 类,The NodeletParser is a callback based parser similar to SAX. vars是作者构建的Variables,这里有个疑问**/ public SqlMapClient parse(Reader reader) { try { if (vars.sqlMapConfigConv != null) { System.out.println("null"); reader = vars.sqlMapConfigConv.convertXml(reader); } usingStreams = false; parser.parse(reader); return vars.client; } catch (Exception e) { throw new RuntimeException("Error occurred. Cause: " + e, e); } } /**新增方法,把外围ds传进入,并且赋值**/ public SqlMapClient parse(Reader reader,DataSource ds,boolean forceCommit){ vars.dataSource=ds; vars.errorCtx.setActivity("configuring the transaction manager"); String type = "jdbc"; type = vars.typeHandlerFactory.resolveAlias(type); TransactionManager txManager = null;//ibatis的思路是要构造一个TransactionManager 对象 try { vars.errorCtx.setMoreInfo("Check the transaction manager type or class."); TransactionConfig config = (TransactionConfig) Resources.instantiate(type);//需要构造一个JDBC类型TransactionConfig我们的ds等部分信息去填充这个TransactionConfig,JDBC的其他属性由这个config初始化 config.setDataSource(vars.dataSource); config.setMaximumConcurrentTransactions(vars.client.getDelegate().getMaxTransactions()); vars.errorCtx.setMoreInfo("Check the transactio nmanager properties or configuration."); config.initialize(vars.txProps); vars.errorCtx.setMoreInfo(null); txManager = new TransactionManager(config); txManager.setForceCommit(forceCommit); } catch (Exception e) { if (e instanceof SqlMapException) { throw (SqlMapException) e; } else { throw new SqlMapException("Error initializing TransactionManager. Could not instantiate TransactionConfig. Cause: " + e, e); } } vars.client.getDelegate().setTxManager(txManager);// 根据这个manager初始化一些事务控制的对象 return parse(reader);//parser是一个NodeletParser ,The NodeletParser is a callback based parser similar to SAX. 读取其他内容并初始化... }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-11-12
作用域的问题吧
|
|
返回顶楼 | |
发表时间:2009-11-12
storm0912 写道 不知道LZ的外部数据源是指什么样的DS?
其他模块构造的任意一个Ds对象... |
|
返回顶楼 | |
发表时间:2009-11-12
新手帖!!!
|
|
返回顶楼 | |
发表时间:2009-11-15
最后修改:2009-11-15
为什么我提的疑问没人回答呢?
楼上的说"新手帖",想必你应该都明白吧? 那能否能帮我解答呢? |
|
返回顶楼 | |
发表时间:2009-11-15
现在啥年代了,连spring都没有看过!!! 自己去看看吧!!!
|
|
返回顶楼 | |
发表时间:2009-11-21
楼上的真会说笑话```
|
|
返回顶楼 | |
发表时间:2010-06-15
超级潜水员 写道 现在啥年代了,连spring都没有看过!!! 自己去看看吧!!!
现在啥年代了,没有spring的项目多得是,自己去看看吧! |
|
返回顶楼 | |
浏览 3522 次