2、创建服务
[1]创建一个新的ManagerTest
[2]创建一个新的Manager来调用DAO,处理业务逻辑
[3]在Spring中配置服务和事物管理
[4]运行服务测试
在上面我们已经创建了Person和PersonDAO,现在我们需要在test/service/**/service目录下创建ManagerTest。PersonManagerTest扩展BaseManagerTestCase类,在这个基类中实现了Spring配置文件的载入。
PersonManagerTest代码如下:
|
package org.appfuse.service;
import org.appfuse.model.Person; import org.springframework.dao.DataAccessException;
public class PersonManagerTest extends BaseManagerTestCase {
private Person person = null; private PersonManager mgr = null;
protected void setUp() throws Exception { super.setUp(); mgr = (PersonManager) ctx.getBean("personManager"); }
protected void tearDown() throws Exception { super.tearDown(); mgr = null; } }
|
然后加入具体的测试方法到PersonManagerTest类中:
|
public void testGetPerson() throws Exception { person = mgr.getPerson("1");
assertNotNull(person.getFirstName()); }
public void testSavePerson() throws Exception { person = mgr.getPerson("1"); person.setFirstName("test");
mgr.savePerson(person); assertEquals(person.getFirstName(), "test"); }
public void testAddAndRemovePerson() throws Exception { person = new Person(); person = (Person) populate(person);
mgr.savePerson(person); assertEquals(person.getFirstName(), "Bill"); assertNotNull(person.getId());
log.debug("removing person, personId: " + person.getId());
mgr.removePerson(person.getId().toString());
try { person = mgr.getPerson(person.getId().toString()); fail("Person found in database"); } catch (DataAccessException dae) { log.debug("Expected exception: " + dae.getMessage()); assertNotNull(dae); } }
|
下面创建一个PersonManager接口到src/service/**/service目录下。
|
package org.appfuse.service;
import org.appfuse.model.Person;
public interface PersonManager { public Person getPerson(String id); public void savePerson(Person person); public void removePerson(String id); }
|
接着创建一个PersonManager的实现类PersonManagerImpl到src/service/**/service/impl目录下:
|
package org.appfuse.service.impl;
import org.appfuse.model.Person; import org.appfuse.dao.PersonDAO; import org.appfuse.service.PersonManager;
public class PersonManagerImpl extends BaseManager implements PersonManager { private PersonDAO dao;
public void setPersonDAO(PersonDAO dao) { this.dao = dao; }
public Person getPerson(String id) { return dao.getPerson(Long.valueOf(id)); }
public Person savePerson(Person person) { dao.savePerson(person); }
public void removePerson(String id) { dao.removePerson(Long.valueOf(id)); } }
|
在上面代码中PersonDAO通过Spring框架中的配置来实例化。现在可以使用ant compile-service命令来编译服务对象。
在Spring中配置服务和事务管理
在src/service/**/service/applicationContext-service.xml文件中加入以下代码来注册服务:
|
<bean id="personManager" parent="txProxyTemplate"> <property name="target"> <bean class="org.appfuse.service.impl.PersonManagerImpl" autowire="byName"/> </property> </bean>
|
Parent属性的定义参考TransactionProxyFactoryBean。
现在运行测试,看到测试结果。