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