I'll add this to the wiki, and clean up anything I see in it that looks odd.

Larry


On 4/12/07, Meindert <[EMAIL PROTECTED]> wrote:



Hi all.

I've documented the process of converting jpetshop5, and would like to know
if it is right?

Also I don't know what to do with the
com.ibatis.dao.client.DaoException thrown in
SequenceSqlMapDao?

I'm going to add the transaction on OrderService now.


Steps to convert jpetshop5 to ibatis-spring



The DAO iBATIS has been depreciated and it is recommended to replace this
with the spring framework. This document describes the steps taken to
convert from ibatis dao to spring dao. I work on the project in netbeans so
some terminology used might be incorrect for other IDE's



Prerequisite is to have a project similar to jpetstore5, and have it
connected to a 'normal' database

(There is support for hssqldb in the DaoConfig class what we are going to
throw away.)


Lib jar files;

Remove the old ibatis jar files from the class path and create the reference
to the new ibatis and spring jars

Remove ibatis-common-2.jar
Remove ibatis-dao-2.jar
Remove ibatis-sqlmap-2.jar
Add ibatis-2.3.0.677.jar
Add spring.jar
Add commons-dbcp-1.2.1.jar
Add commons-pool-1.2.jar
Add commons-collections.jar


Com.ibatis.jpetstore.persistence.sqlmapdao

Change the BaseSqlMapDao to;

package com.ibatis.jpetstore.persistence.sqlmapdao;

import org.springframework.orm.ibatis.SqlMapClientTemplate;

public class BaseSqlMapDao extends SqlMapClientTemplate {

    protected static final int PAGE_SIZE = 4;

}

All the other SqlMapDao files;

Remove the public AccountSqlMapDao(DaoManager daoManager)  methode

Remove import com.ibatis.dao.client.DaoManager;
Com.ibatis.jpetstore.service

The DAO will be injected by spring, thus the constructor can be deleted

Example for AccountService, remove the public AccountService()methode

(also remove import com.ibatis.dao.client.DaoManager;)

There is a transaction in OrderService.java, this transaction must be
handled by Spring, remove it here for now. Also remove it out of the
constructor;

public OrderService(ItemDao itemDao, OrderDao orderDao, SequenceDao
sequenceDao) {

    this.itemDao = itemDao;

    this.orderDao = orderDao;

    this.sequenceDao = sequenceDao;

  }


The Link between spring and ibatis

Add the SpringInit.java class to a new package com.listeners

This class will be instantiated on load of the website and will pass the
reference to the spring managed objects
Com.ibatis.jpetstore.presentation



The presentation layer must connect with the spring managed service layer

So replace;

public AccountBean() {

    this(new AccountService(), new CatalogService());

  }

With

public AccountBean() {

     this((AccountService)
SpringInit.getApplicationContext().getBean("accountService"),

          (CatalogService)
SpringInit.getApplicationContext().getBean("catalogService"));

  }

And add import com.listeners.SpringInit;

Repeat for the other classes


Configuration

First setup the listeners to have SpringInit initiated on loading of the
site

Add to web.xml (after <description> tag)

<context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>/WEB-INF/spring.xml</param-value>

</context-param>



<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>



<listener>

 <listener-class>com.listeners.SpringInit</listener-class>

</listener>



As you can see it is looking for /WEB-INF/spring.xml create this file.
Attached is the one I created for jpetstore5


Cleanup

Throw away DaoConfig.java and dao.xml out of
com.ibatis.jpetstore.persistence, and the reference to it
in the Service classes



Reply via email to