Here is an example.
By implementing SqlMapClientTemplate, I can make direct calls to
queryForList.
There is more code to write in case of batches...
public class OrganismSqlMapDao extends SqlMapClientTemplate implements
OrganismDao {
public OrganismSqlMapDao() {
super();
}
public List<Organism> getOrganismList(Project project) {
return queryForList("Organism.getOrganismList", project);
}
}
________________________________
From: Reese, Rich R. [mailto:[EMAIL PROTECTED]
Sent: Monday, 04 June 2007 14:43
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(SqlM
apExecutorDelegate.java:782)
at
com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.endTransaction(SqlMapSes
sionImpl.java:176)
at
com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.endTransaction(SqlMapClie
ntImpl.java:154)
at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.autoEndTransaction(
SqlMapExecutorDelegate.java:883)
at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMap
ExecutorDelegate.java:622)
at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMap
ExecutorDelegate.java:589)
at
com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessi
onImpl.java:118)
at
com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClient
Impl.java:95)
at
com.sal.services.retail.storemaint.dao.StoreMapper.findAncillaryInfo(Sto
reMapper.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.StoreMaintService
Impl" />
</beans>
Thanks,
Rich Reese