Now that you found the difference can you tell us why you were
injecting a datasource into your dao?
My applications are configured the same was Jeff's are.
On 9/7/06, TNO <[EMAIL PROTECTED]> wrote:
This is problem Spring/Ibatis !
By examinig your bean, the only difference was the injection of the
datasource.
I injected it in the DAO and you, in the SqlMapClientFactoryBean
BUG :
<beans default-lazy-init="true">
<bean id="sqlMapClientArcDb"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean
">
<property name="configLocation">
<value>classpath:arc/db/config/sql-map-config-arcdb.xml</value>
</property>
</bean>
...
<bean id="planDAO" class="
arc.db.auto.dao.ibatis.PlanDAOiBatis" lazy-init="true">
<property name="dataSource"><ref bean="dataSourceArc" /></property>
<property name="sqlMapClient"><ref bean="sqlMapClientArcDb"
/></property>
<property name="sequenceDAO"><ref bean="sequenceDAO" /></property>
</bean>
NO BUG :
<beans default-lazy-init="true">
<bean id="sqlMapClientArcDb"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean
">
<property name="configLocation">
<value>classpath:arc/db/config/sql-map-config-arcdb.xml</value>
</property>
<property name="dataSource"><ref bean="dataSourceArc" /></property>
</bean>
...
<bean id="planDAO" class="
arc.db.auto.dao.ibatis.PlanDAOiBatis" lazy-init="true">
<property name="sqlMapClient"><ref bean="sqlMapClientArcDb"
/></property>
<property name="sequenceDAO"><ref bean="sequenceDAO" /></property>
</bean>
In SqlMapClientFactoryBean javaDoc :
* <p>Allows to specify a DataSource at the SqlMapClient level. This is
* preferable to per-DAO DataSource references, as it allows for lazy
loading
* and avoids repeated DataSource references.
Thanks a lot Jeff, and longue vie à Ibatis
Thomas
Jeff Butler a écrit :
I've migrated my test case to Spring, and everything still works OK. Here's
my beans.xml:
<beans>
<bean id="dataSource"
class="com.ibatis.common.jdbc.SimpleDataSource">
<constructor-arg>
<map>
<entry key="JDBC.Driver" value=" org.hsqldb.jdbcDriver"/>
<entry key="JDBC.ConnectionURL" value="jdbc:hsqldb:mem:aname"/>
<entry key="JDBC.Username" value="sa"/>
<entry key=" JDBC.Password" value=""/>
<entry key="JDBC.DefaultAutoCommit" value="false"/>
<entry key="Pool.PingQuery" value="SELECT 1"/>
<entry key=" Pool.PingEnabled" value="true"/>
<entry key="Pool.PingConnectionsOlderThan" value="1000000"/>
</map>
</constructor-arg>
</bean>
<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>classpath:test/sqlmap/TestSqlMapConfig.xml</value>
</property>
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
<bean id="animalDao" class="test.dao.AnimalDAOImpl">
<property name="sqlMapClient">
<ref bean="sqlMapClient"/>
</property>
</bean>
</beans>
My AnimalDAOImpl class extends Spring's SqlMapClientTemplate. I'll send you
the entire test case offline if you're interested. It works with HSQLDB and
is just a Java application (no web dependancies).
Jeff Butler
On 9/6/06, TNO <[EMAIL PROTECTED]> wrote:
>
>
> I'm using Spring, Ibatis, and postgreSql 8.0
> one project call XxxDAO which manage all the DAO (no transaction)
> one project call XxxMgr which manage every transactions
>
> So when I lauch my junit test on XxxDAO, there is no transaction manager,
only a SimpleDataSource from Ibatis.
> Here's the db config
>
> <beans>
> <bean id="myPropertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
> <property name="locations">
> <list>
> <value>arc/constante/jdbc.properties</value>
> </list>
> </property>
> </bean>
> <bean id="dataSourceArc"
class="com.ibatis.common.jdbc.SimpleDataSource ">
> <constructor-arg>
> <map>
> <entry key="JDBC.Driver" value="${jdbc.driverClassName}"/>
> <entry key="JDBC.ConnectionURL" value="${ jdbc.url}"/>
> <entry key="JDBC.Username" value="${jdbc.username}"/>
> <entry key="JDBC.Password" value="${jdbc.password}"/>
> <entry key=" JDBC.DefaultAutoCommit"
value="${jdbc.defaultAutoCommit}"/>
> <entry key="Pool.PingQuery" value="SELECT 1"/>
> <entry key="Pool.PingEnabled" value="true"/>
> <entry key="Pool.PingConnectionsOlderThan" value="1000000"/>
> </map>
> </constructor-arg>
> </bean>
>
> </beans>
>
> Then, I have a big file sql-init-config.xml which contains all my alias
for ibatis for each table
> example :
> <typeAlias alias="plan" type="arc.db.model.Plan" />
>
> <resultMap id="planResult" class="plan">
> <result property="idPlan" column="plan_i_plan" />
> <result property="idMandat" column="plan_i_mandat" />
> <result property="infoAssedic" column="plan_t_info_assedic" />
> <result property="avisControlleur"
column="plan_t_avis_controlleur" />
> <result property="avisRepresentantSalarie"
column="plan_t_avis_representant_salarie" />
> <result property="garantie" column="plan_t_garantie" />
> <result property="remplacementDirigeant"
column="plan_t_remplacement_dirigeant" />
> <result property="actifSituation" column="plan_t_actif_situation" />
> <result property="monCumulDeclaration"
column="plan_m_cumul_declaration" />
> <result property="idPlanOptionDef" column="plan_i_plan_option_def" />
> <result property="idPlanOptionNon" column="plan_i_plan_option_non" />
> <result property="isPrivi" column="plan_b_privi" />
> <result property="isChiro" column="plan_b_chiro" />
> <result property="isConteste" column="plan_b_conteste" />
> <result property="isProvi" column="plan_b_provi" />
> <result property="isAechoir" column="plan_b_aechoir" />
> <result property="isValider" column="plan_b_valider" />
> <result property="dateProchaineEcheance"
column="plan_d_prochaine_echeance" />
> <result property="isValidationEncours"
column="plan_b_validation_encours" />
> <result property="isEcheancier" column="plan_b_echeancier" />
> <result property="isReprise" column="plan_b_reprise" />
> </resultMap>
>
> <sql id="planColonne">
> plan.i_plan AS plan_i_plan,
> plan.i_mandat AS plan_i_mandat,
> plan.t_info_assedic AS plan_t_info_assedic,
> plan.t_avis_controlleur AS plan_t_avis_controlleur,
> plan.t_avis_representant_salarie AS
plan_t_avis_representant_salarie,
> plan.t_garantie AS plan_t_garantie,
> plan.t_remplacement_dirigeant AS plan_t_remplacement_dirigeant,
> plan.t_actif_situation AS plan_t_actif_situation,
> plan.m_cumul_declaration AS plan_m_cumul_declaration,
> plan.i_plan_option_def AS plan_i_plan_option_def,
> plan.i_plan_option_non AS plan_i_plan_option_non,
> plan.b_privi AS plan_b_privi,
> plan.b_chiro AS plan_b_chiro,
> plan.b_conteste AS plan_b_conteste,
> plan.b_provi AS plan_b_provi,
> plan.b_aechoir AS plan_b_aechoir,
> plan.b_valider AS plan_b_valider,
> plan.d_prochaine_echeance AS plan_d_prochaine_echeance,
> plan.b_validation_encours AS plan_b_validation_encours,
> plan.b_echeancier AS plan_b_echeancier,
> plan.b_reprise AS plan_b_reprise
> </sql>
>
> <sql id="getPlanSql">
> SELECT
> <include refid="planColonne"/>
> FROM plan
> </sql>
>
> Then, one XxxSql.xml for each table which contains my failed query
>
> <select id="getPlanOptionFromIdPlan" resultMap="planOptionResult">
> <include refid="getPlanOptionSql"/>
> WHERE plan_option.i_plan = #id#
> </select>
> <select id="getEcheanceOptionFromIdPlan"
resultMap="echeanceOptionResult">
> <include refid="getEcheanceOptionSql"/>
> WHERE echeance_option.i_plan = #id#
> </select>
> <select id="getEcheancePlanFromIdPlan" resultMap="echeancePlanResult">
> <include refid="getEcheancePlanSql"/>
> WHERE echeance_plan.i_plan = #id#
> </select>
>
> <resultMap id="planResult1N" class="plan" extends="planResult">
> <result property="listEcheanceOption"
> select="getEcheanceOptionFromIdPlan" column="plan_i_plan"
/>
> <result property="listEcheancePlan"
> select="getEcheancePlanFromIdPlan" column="plan_i_plan"
/>
> <result property="listPlanOption"
select="getPlanOptionFromIdPlan"
> column="plan_i_plan" />
> </resultMap>
>
> <select id="getPlan1N" parameterClass="string" resultMap="planResult1N">
> <include refid="getPlanSql"/>
> $whereStr$
> </select>
>
>
> All xml files are in the sqlMapConfig, but i don't have any transaction
manager...
> <sqlMapConfig>
> <sqlMap resource="arc/db/config/sql-init-config.xml"/>
> ...
> <sqlMap
resource="arc/db/auto/dao/ibatis/config/PlanSQL.xml" />
> ...
> </sqlMapConfig>
>
>
> Then, In my Spring application-context, I have
>
> <beans default-lazy-init="true">
> <bean id="sqlMapClientArcDb"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean
">
> <property name="configLocation">
>
<value>classpath:arc/db/config/sql-map-config-arcdb.xml</value>
> </property>
> </bean>
> ...
> <bean id="planDAO" class="
arc.db.auto.dao.ibatis.PlanDAOiBatis" lazy-init="true">
> <property name="dataSource"><ref bean="dataSourceArc" /></property>
> <property name="sqlMapClient"><ref bean="sqlMapClientArcDb"
/></property>
> <property name="sequenceDAO"><ref bean="sequenceDAO" /></property>
> </bean>
> ...
>
> My TestPlanDAOIbatis is a reproductible test case with my own data...
> I can give you everything if you want to reproduce it !
>
> thanks, Tom
>
>
________________________________
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.1.405 / Virus Database: 268.12.1/440 - Release Date: 06/09/2006
--
Il n'y a pas de mauvais langage, il n'y a que des bons programmeurs