Well yes and no. The idea of using spring for injection fails when you find your self manually doing it yourself. I can only assume that in your dao you were passing the datasource to the sqlMap factory. This should be done with spring to stay consistent.
Nathan On 9/8/06, TNO <[EMAIL PROTECTED]> wrote:
It's the mystery of life... ;-) No, I can't tell you why I injected the dataSource into my DAO. But both seems to be correct... Nathan Maves a écrit : > 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 >> > > > -- Il n'y a pas de mauvais langage, il n'y a que des bons programmeurs