实现to-do list服务端
上篇Part 1部分我们描述了使用flex-mojos构建和配置一个典型的Flex应用模块全过程,在这一部分,在这一部分,我会继续完善的范例项目(to-do list application),并描述如何应用Spring,Hibernate和MySQL创建后端模块。在第三部分我会描述如何使用BlazeDS连接前后端应用。
预备条件
有Spring,Hibernate和MySQL经验,熟悉MySQL的数据库,Java和XML会加快学习步伐。
创建WAR模块
本节我们开始建立示例应用to-do list的后端程序。首先,打开命令行中并定位到第一篇文件建立的todolist目录,运行如下命令:
mvn archetype:create -DgroupId=cn.org.pomer.samples -DartifactId=todolist-web -DarchetypeArtifactId=maven-archetype-webapp
上述命令在根模块todolist中创建一个新的todolist子模块。下一步,编辑新建模块的POM,添加如下的dependencies:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> <version>2.5.2</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.5.4</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.5.4</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate</artifactId> <version>3.2.6.ga</version> </dependency>
以上加入的是Spring和Hibernate的依赖包。
最后,更新上面的POM Java编译器plug-in为1.5,添加以下plug-in配置到POM的project/build/plugins节点:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin>
运行命令mvn install安装jar,安装成功后,运行命令mvn eclispe:eclipse为todolist-web构建eclipse工程。构建好eclipse工程后,导入todolist-web项目,配置M2_REPO这个Classpath Variables,配置步骤:window >> preferences >> Java >> Build Path >> Classpath Variables,新建一个 M2_REPO 的变量,变量值指向你系统的Maven2的数据仓库位置。如我的位置是C:/Documents and Settings/HeQing/.m2/repository。
至此,我们已经为进一步开发建立好了服务端模块雏形。接下来,我们建立可以在eclipse环境中为to-do list编写Java代码。
编写java接口
前面,我们建立了to-do list应用模块,现在编写服务接口。在项目路径src/main/java中新建cn.org.pomer.samples.todolist.business包,接建TodoService接口,代码如下:
package cn.org.pomer.samples.todolist.business;
import java.util.List;
import cn.org.pomer.samples.todolist.domain.TodoItem;
public interface TodoService {
void remove(TodoItem todoItem) throws Exception;
TodoItem save(TodoItem todoItem) throws Exception;
TodoItem findById(TodoItem todoItem) throws Exception;
List<TodoItem> getList() throws Exception;
}
TodoService接口实现:
package cn.org.pomer.samples.todolist.business;
import java.util.List;
import cn.org.pomer.samples.todolist.domain.TodoItem;
import cn.org.pomer.samples.todolist.domain.TodoItemRepository;
public class TodoServiceImpl implements TodoService {
private TodoItemRepository todoItemRepository;
public void setTodoItemRepository(TodoItemRepository todoItemRepository) {
this.todoItemRepository = todoItemRepository;
}
public TodoItem save(TodoItem item) throws Exception {
try {
this.todoItemRepository.save(item);
return item;
} catch (Exception e) {
throw new Exception("Could not save item because: " + e.getCause());
}
}
public void remove(TodoItem item) throws Exception {
try {
this.todoItemRepository.remove(item);
} catch (Exception e) {
throw new Exception("Could not delete item because " + e.getMessage());
}
}
public TodoItem findById(TodoItem item) throws Exception {
try {
return this.todoItemRepository.findById(item);
} catch (Exception e) {
throw new Exception("Could not find item because " + e.getMessage());
}
}
public List<TodoItem> getList() throws Exception {
try {
return this.todoItemRepository.getList();
} catch (Exception e) {
throw new Exception("Could not list items because " + e.getMessage());
}
}
}
TodoServiceImpl实现访问了包cn.org.pomer.samples.todolist.domain下的TodoItemRepository,以下是其接口代码:
package cn.org.pomer.samples.todolist.domain;
import java.util.List;
public interface TodoItemRepository {
void remove(TodoItem todoItem);
TodoItem save(TodoItem todoItem);
TodoItem findById(TodoItem todoItem) throws Exception;
List<TodoItem> getList();
}
如下是基于spring HibernateDaoSupport的hibernate持久层框架的实现:
package cn.org.pomer.samples.todolist.domain.hibernate;
import java.util.List;
import cn.org.pomer.samples.todolist.domain.TodoItem;
import cn.org.pomer.samples.todolist.domain.TodoItemRepository;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class TodoItemHibernateDao extends HibernateDaoSupport implements TodoItemRepository {
public TodoItem save(TodoItem todoItem) {
getHibernateTemplate().saveOrUpdate(todoItem);
return todoItem;
}
public void remove(TodoItem todoItem) {
getHibernateTemplate().delete(todoItem);
}
public TodoItem findById(TodoItem todoItem) throws Exception {
long id = todoItem.getId();
todoItem = (TodoItem) getHibernateTemplate().get(TodoItem.class, todoItem.getId());
if (todoItem == null)
throw new Exception("Could not find an item with id " + id);
return todoItem;
}
@SuppressWarnings("unchecked")
public List<TodoItem> getList() {
return (List<TodoItem>) getHibernateTemplate().loadAll(TodoItem.class);
}
}
最后,建立以上用到的TodoItem POJO:
package cn.org.pomer.samples.todolist.domain;
public class TodoItem {
private long id;
private String title;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
下一章节,我们将为to-do list建立MySQL数据库。