ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Nathan Maves" <nathan.ma...@gmail.com>
Subject Re: [RESOLVED] Re: Problem with multi-select inside a resultMap since Ibatis 2.20 (colored...)
Date Fri, 08 Sep 2006 15:31:42 GMT
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 <tnodev@free.fr> 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 <tnodev@free.fr> 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 <tnodev@free.fr> 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
>
>

Mime
View raw message