Another framework? How much work is it to convert an existing project (like jpetstore)?
-----Original Message----- From: Poitras Christian [mailto:[EMAIL PROTECTED] Sent: 12 April 2007 03:57 PM To: [EMAIL PROTECTED]; [EMAIL PROTECTED] Subject: RE: converting iBATIS framework DAOs to the Spring Framework I also suggest to use Stripes to cut the size of Spring config file. By adding @SpringBean annotation in front of properties (event private), Stripes will fill these properties by simulating the auto-wire process of Spring (even if no setter/getter/constructor exists). For instance, if I have a class like this /** * Manage DataFile. * * @author poitrac */ public class DataFileManagement { public DataFileManagement() { super(); } /** * For DataFile management. */ @SpringBean private DataFileDao dataFileDao; /** * Hides DataFiles. * @param dataFileList DataFiles to hide from search requests. */ @Transactional public synchronized void hide(List<DataFile> dataFileList) { dataFileDao.hide(dataFileList); } } Then I have no special configuration to do in spring.xml beside declaring the bean. <bean id="dataFileManagement" class="ca.qc.ircm.management.DataFileManagement"/> It's possible to use the feature without using the web framework of Stripes. To do so, you juste need to add a PostProcessor. /** * Injection bean dependencies based on Annotation. * * @author poitrac */ public class AnnotationInjector implements BeanPostProcessor, ApplicationContextAware, Ordered { public AnnotationInjector() { super(); } /** * ApplicationContext for bean injection. */ private ApplicationContext applicationContext; /* (non-Javadoc) * @see org.springframework.beans.factory.config.BeanPostProcessor#postProcessBe foreInitialization(java.lang.Object, java.lang.String) */ public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { return bean; } /* (non-Javadoc) * @see org.springframework.beans.factory.config.BeanPostProcessor#postProcessAf terInitialization(java.lang.Object, java.lang.String) */ public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { SpringHelper.injectBeans(bean, applicationContext); return bean; } /* (non-Javadoc) * @see org.springframework.core.Ordered#getOrder() */ public int getOrder() { return Ordered.HIGHEST_PRECEDENCE; } /* * (non-Javadoc) * @see org.springframework.context.ApplicationContextAware#setApplicationContex t(org.springframework.context.ApplicationContext) */ public void setApplicationContext(ApplicationContext applicationContext) { this.applicationContext = applicationContext; } } Here I use HIGHEST_PRECEDENCE since Stripes requires to set properties (without setters) before it is enhanced by cglib. I prefer to just declare my beans in Spring and update my code and not the xml file (I always forget about updating xml anyway...). Christian -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Larry Meadors Sent: Thursday, 12 April 2007 07:35 To: [EMAIL PROTECTED] Subject: Re: converting iBATIS framework DAOs to the Spring Framework 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 > > >