声明:JavaEye新闻文章的版权属于JavaEye网站所有,严禁任何网站转载本文,否则必将追究法律责任!
Warp-persist为基于Guice的应用程序在与Hibernate,JPA(包括TopLink扩展,OpenJPA以及Hibernte对JPA的扩展)以及db4jobjects等持久层的依赖注入上提供了单独一层。它通过使用@Transactional annotation,也提供了声明式事物处理。
Warp-persis可配置成Guice的标准module(注:module有点类似于Spring配置文件,可以将需要注入的模块统一在一个类文件中配置好),并使用类似于Guice优雅风格的接口,使其具有类型安全和简洁明了的特性。
Guice.createInjector(PersistenceService
.usingHibernate()
.across(UnitOfWork.REQUEST)
.buildModule());
Dynamic Finders(动态检测)是Warp-persist的一个特性:它以一种直观,类型安全(注:从使用泛型上就可以看到)的编程风格,可以自动的实现数据访问并减少了模板和那些重复的DAO代码。
public interface PersonDao {
@Finder("from Person")
List<Person> listAll();
}
代码的实现部分自动由warp-persist完成。Dynamic Finders当然也支持抽象类和实体类,支持参数绑定和简单的分页。warp-persist也是一个非侵入式的框架,并不需要包装或抽象底层的持久层接口,你完成可以专注于整合。
常常有一些Guice的批评都说它缺乏与持久层和事务层的整合。但现在我们相信warp-persist很巧妙的弥补了这个空白,并且一直跟随着Guice哲学:简单而且保证类型安全。
真没想到,JavaEE还可以更简单!!!
来自:theserverside


评论 共 11 条 发表评论
Linuxboy 2008-05-09 23:42
weilesi 2008-04-17 16:57
cnoss 2008-03-30 21:16
JRest4Guice的同级项目Jpa4Guice也完成了0.1版的测试。
1、支持事务
2、支持动态DAO
================================
1、DAO部分
================================
/** * 负责联系人持久化处理的DAO * @author cnoss */ @Dao public interface ContactDao { @DaoMethod(type=DaoMethodType.PERSIST) public void createContact(Contact contact); @DaoMethod(type=DaoMethodType.LIST,namedQuery="list") public List<Contact> listContacts(@FirstResult int first,@MaxResults int max); @DaoMethod(type=DaoMethodType.LIST,query="select e from Contact e where e.name=:name") public List<Contact> findContactByName(@Named("name") String name); @DaoMethod(type=DaoMethodType.FIND) public Contact findContactById(String contactId); @DaoMethod(type=DaoMethodType.MERGE) public void updateContact(Contact contact); @DaoMethod(type=DaoMethodType.REMOVE) public void deleteContact(Contact contact); }================================
2、业务层部分
================================
@SuppressWarnings("unchecked") public class ContactServiceBean implements ContactService { @Inject private ContactDao dao;//注入联系人DAO @Transactional public String createContact(Contact contact) { if (contact == null) throw new RuntimeException("联系人的内容不能为空"); if (this.dao.findContactByName(contact.getName()).size() > 0) { throw new RuntimeException("联系人的姓名相同,请重新输入"); } this.dao.createContact(contact); return contact.getId(); } ........... ........... ........... }注:
由于最近的更新比较快,所以没有打包,有需要的朋友请从SVN上直接下载原代码,源代码中有详细的例子。
http://code.google.com/p/jrest4guice/source/checkout
谢谢大家的参与和批评。
-- cnoss小组
jasongreen 2008-03-13 16:22
beitongmoming 2008-03-11 22:23
http://www.wideplay.com-a.googlepages.com/home
看看
steven_652 2008-03-08 10:05
wuming_player 2008-03-06 22:14
robbin 2008-03-06 10:58
ueseu 2008-03-05 16:56
那个网址我可以访问
murainwood 2008-03-05 14:01
zhida 2008-03-05 09:10