You could do one of two things: 1. You could get the Sql Map Factory Bean from the Spring Context 2. Go through the SqlMapClientDaoSupport class and use the getSqlMapClient() or getSqlMapClientTemplate() method Daniel
________________________________ From: Reese, Rich R. [mailto:[EMAIL PROTECTED] Sent: Mon 6/4/2007 11:42 AM To: [email protected] Subject: RE: Database Blocking How do you initialize the sqlMap variable or make a call to the queryForList method if you don't use the SqlMapClientBuilder? ________________________________ From: Poitras Christian [mailto:[EMAIL PROTECTED] Sent: Monday, June 04, 2007 1:33 PM To: [email protected] Subject: RE: Database Blocking I doudt these code lines should be there. iBATIS is configured by Spring with your configuration. <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <!-- <property name="configLocation" value="/WEB-INF/classes/SqlMapConfig.xml"/> --> This line -> <property name="configLocation" value="classpath:SqlMapConfig.xml"/> <property name="dataSource" ref="dataSource"/> </bean> Is there a reason you need to use SqlMapClientBuilder? In my code, I only keep addresses = sqlMap.queryForList("Custom_Queries.selectAddress", params); Try this! Christian ________________________________ From: Reese, Rich R. [mailto:[EMAIL PROTECTED] Sent: Monday, 04 June 2007 13:12 To: [email protected] Subject: RE: Database Blocking I don't have any transaction calls within my code. It must be internal calls within iBATIS. The line of code it fails on within my code is: InputStream is = getClass().getClassLoader().getResourceAsStream("SqlMapConfig.xml"); InputStreamReader reader = new InputStreamReader(is); SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); addresses = sqlMap.queryForList("Custom_Queries.selectAddress", params); //error thrown here ... ... ________________________________ From: Poitras Christian [mailto:[EMAIL PROTECTED] Sent: Monday, June 04, 2007 11:20 AM To: [email protected] Subject: RE: Database Blocking If you want to use Spring transaction, you should let Spring handle them in all cases. So it would be better remove all calls like : sqlMap.startTransaction(); sqlMap.commitTransaction(); sqlMap.endTransaction(); iBATIS will automatically use the transaction started by Spring (since Spring seems to be correctly initiallised based on your file). These calls may be the root cause of the problem. ________________________________ From: Reese, Rich R. [mailto:[EMAIL PROTECTED] Sent: Monday, 04 June 2007 11:41 To: [email protected] Subject: RE: Database Blocking When I remove the transaction info from the SQLMapConfig I get the following error: Caused by: java.lang.NullPointerException at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.endTransaction(SqlMapExecutorDelegate.java:782) at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.endTransaction(SqlMapSessionImpl.java:176) at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.endTransaction(SqlMapClientImpl.java:154) at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.autoEndTransaction(SqlMapExecutorDelegate.java:883) at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:622) at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:589) at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118) at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:95) at com.sal.services.retail.storemaint.dao.StoreMapper.findAncillaryInfo(StoreMapper.java:149) Its like iBATIS doesn't pick up on the spring transaction. Thoughts? ________________________________ From: Poitras Christian [mailto:[EMAIL PROTECTED] Sent: Friday, June 01, 2007 5:16 PM To: [email protected] Subject: RE: Database Blocking If you plan to use Spring transaction, you should remove the one in SqlMapConfig.xml. It is quite probable that they can block each other... Christian ________________________________ From: Reese, Rich R. [mailto:[EMAIL PROTECTED] Sent: Friday, 01 June 2007 17:34 To: [email protected] Subject: Database Blocking I am using iBATIS with Spring DAOs. My application is deployed within a WAR onto a JBoss 4.0.4 server connecting to a MS Sql Server database. Everything works fine until I try to have Spring manage the database transaction from one of my business objects. The problem I am having is I keep getting database blocks on the table I am inserting or deleting records from. I don't have this problem when I keep the transaction management out of the spring-beans.xml file. I have attached what I have in the file. Can someone tell me what I might be missing or stating incorrectly? Another confusion I have a datasource defined in my spring-beans.xml file and SqlMapConfig.xml file? Why do I need it in both or do I? Is there a way to tell the SqlMapconfig.xml to use the transaction defined in the spring-beans.xml? <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd" > <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <!-- See jboss-web.xml for definition of jndiNames --> <property name="jndiName" value="java:jdbc/storesSqlServerDB"/> </bean> <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <!-- <property name="configLocation" value="/WEB-INF/classes/SqlMapConfig.xml"/> --> <property name="configLocation" value="classpath:SqlMapConfig.xml"/> <property name="dataSource" ref="dataSource"/> </bean> <!-- Allows developer to put tag at top of method to specify tx needs --> <tx:annotation-driven transaction-manager="txManager"/> <!-- Takes care of adding proxy around classes which need transactions. This proxy handles starting the transaction and the commits and rollbacks versus the developer adding this code themselves. --> <aop:aspectj-autoproxy/> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <bean id="StoreMaintService" class="com.sal.services.retail.storemaint.service.impl.StoreMaintServiceImpl" /> </beans> Thanks, Rich Reese
