`

JRest4Guice

阅读更多

项目地址: http://code.google.com/p/jrest4guice/ 
Demo演示: http://www.rest4g.org/full
 


http://www.javaeye.com/topic/201103 一个Java的Restful服务框架,支持JPA、JAAS、分布式资源对象 项目地址:http://code.google.com/p/jrest4guice/   一个轻量级的基于Google Guice的Restful服务框架,支持JPA、JAAS、分布式资源对象,对OSGI的支持也在计划中. (Demo演示: http://cnoss.vicp.net/ ) 请大家直接从SVN中获取JRest4Guice工程即可 svn checkout http://jrest4guice.googlecode.com/svn/trunk/ jrest4guice-read-only (使用Maven)


当前版本:0.9.0 preview 

特点: 

  • 基于Google guice
  • 零配置,服务的自动扫描注册
  • 非侵入式,用户不需要实现特定的接口来实现Restful服务,只需要通过@RESTful来声明
  • 支持Post. Get. Put. Delete操作
  • 支持对Get操作的缓存机制,实现动态资源静态化(通过@Cache标注声明)
  • 灵活的注入(支持上下文环境request/response/session以及参数的自动注入)
  • 根据客户端要求返回不同类型的数据(xml/json/html)
  • 通过@PageFlow实现对MVC module2的支持,输出结果支持CTE、Velocity、Freemarker和Spry模板引擎(当返回类型是text/html时才有效)
  • 支持JPA,通过增强的BaseEntityManager实现实体的CRUD
  • 支持事务,通过@Transactional注解声明事务的类型
  • 支持JAAS,通过@RolesAllowed注解声明操作所需要的角色
  • 支持Hibernate validator
  • 支持拦截器 (interceptor)
  • 支持分布式资源对象,实现业务逻辑的分布式部署
  • 提供了与Struts2集成的插件


下一步计划:

  • OSGI的支持
  • 分布式事务的支持


代码示例:

Java代码   收藏代码
  1. //=======================================================  
  2. //资源类  
  3. //=======================================================  
  4.   
  5. /** 
  6.  * @author <a href="mailto:zhangyouqun@gmail.com">cnoss (QQ:86895156)</a> 
  7.  * 联系人的资源对象 
  8.  * 声明remoteable为真(可以通过@RemoteReference的注入到任一资源对象,通常用在跨应用的资源调用上) 
  9.  */  
  10. @RESTful(name = "ContactResource", remoteable = true)  
  11. @Path( { "/contact""/contacts/{contactId}" })  
  12. public class ContactResource {  
  13.     @Inject  
  14.     private ContactService service;//注入联系人管理的服务对象  
  15.   
  16.     /** 
  17.      * 创建新的联系人  
  18.      * PageFlow :当服务端返回类型是Text/Html类型时,重定向用户的请求到指定的页面,实现最基本功能的MVC。 
  19.      *      在这里,指明当操作成功时,重定向到/contacts,当操作失败时,将用户请求重定向到/contact。 
  20.      * @param contact 联系人实体 
  21.      */  
  22.     @Post  
  23.     @PageFlow(success = @PageInfo(value = "/contacts",type=ResultType.REDIRECT)  
  24.             ,error=@PageInfo(value="/contact",type=ResultType.REDIRECT))  
  25.     public String createContact(@ModelBean Contact contact) {  
  26.         return this.service.createContact(contact);  
  27.     }  
  28.   
  29.     /** 
  30.      * 修改联系人信息  
  31.      * @param contact 联系人实体 
  32.      */  
  33.     @Put  
  34.     @PageFlow(success = @PageInfo(value = "/contacts",type=ResultType.REDIRECT)  
  35.             ,error=@PageInfo(value="/contact",type=ResultType.REDIRECT))  
  36.     public void putContact(@ModelBean Contact contact) {  
  37.         this.service.updateContact(contact);  
  38.     }  
  39.   
  40.     /** 
  41.      * 显示联系人列表  
  42.      * @param page 页码  
  43.      * @param size 每页记录数 
  44.      */  
  45.     @Get  
  46.     @Path("/contacts")  
  47.     @PageFlow(success = @PageInfo(value = "/template/contacts.ctl"))  
  48.     public Page<Contact> listContacts(int page, int size) {  
  49.         return this.service.listContacts(page, size);  
  50.     }  
  51.   
  52.     /** 
  53.      * 显示单个联系人的信息  
  54.      * @param contactId 联系对象ID 
  55.      */  
  56.     @Get  
  57.     @PageFlow(success = @PageInfo(value = "/template/contactDetail.ctl"))  
  58.     public Contact getContact(@Parameter("contactId") String contactId) {  
  59.         if(contactId == null)  
  60.             return new Contact();  
  61.         return this.service.findContactById(contactId);  
  62.     }  
  63.   
  64.     /** 
  65.      * 删除指定ID的联系人  
  66.      * @param contactId 联系对象ID 
  67.      */  
  68.     @Delete  
  69.     @PageFlow(success = @PageInfo(value = "/contacts",type=ResultType.REDIRECT))  
  70.     public void deleteContact(@Parameter("contactId") String contactId) {  
  71.         this.service.deleteContact(contactId);  
  72.     }  
  73. }  
  74.   
  75.   
  76. //=======================================================  
  77. //业务类  
  78. //=======================================================  
  79.   
  80. /** 
  81.  *  
  82.  * @author <a href="mailto:zhangyouqun@gmail.com">cnoss (QQ:86895156)</a> 
  83.  * 
  84.  */  
  85. @Transactional//事务支持,缺省为TransactionalType.REQUIRED,可以在方法中覆写  
  86. @Interceptors({//自定义的拦截器(类级别的,作用于所有的方法,可以在方法中覆写)  
  87.     @Interceptor(TestInterceptor.class),  
  88.     @Interceptor(LogInterceptor.class)  
  89. })  
  90. public class ContactService{  
  91.     //注入实体管理器  
  92.     @Inject  
  93.     private BaseEntityManager<String, Contact> entityManager;  
  94.   
  95.     public String createContact(Contact contact) {  
  96.         if (contact == null)  
  97.             throw new RuntimeException("联系人的内容不能为空");  
  98.   
  99.         if (this.entityManager.loadByNamedQuery("byName", contact.getName()) != null) {  
  100.             throw new RuntimeException("联系人的姓名相同,请重新输入");  
  101.         }  
  102.   
  103.         this.entityManager.create(contact);  
  104.         return contact.getId();  
  105.     }  
  106.   
  107.     public void deleteContact(String contactId) {  
  108.         String[] ids = contactId.split(",");  
  109.         Contact contact;  
  110.         for (String id : ids) {  
  111.             contact = this.findContactById(id);  
  112.             if (contact == null)  
  113.                 throw new RuntimeException("联系人不存在");  
  114.             this.entityManager.delete(contact);  
  115.         }  
  116.     }  
  117.   
  118.     @Transactional(type=TransactionalType.READOLNY)  
  119.     public Contact findContactById(String contactId) {  
  120.         return this.entityManager.load(contactId);  
  121.     }  
  122.   
  123.     @Transactional(type=TransactionalType.READOLNY)//覆盖类级别的事务类型为只读  
  124.     @Interceptor(ListContactsInterceptor.class)//覆盖类级别的拦截器  
  125.     public Page<Contact> listContacts(int pageIndex, int pageSize)  
  126.             throws RuntimeException {  
  127.         return this.entityManager.pageByNamedQuery("list",  
  128.                 new Pagination(pageIndex, pageSize));  
  129.     }  
  130.   
  131.     public void updateContact(Contact contact) {  
  132.         if (contact == null)  
  133.             throw new RuntimeException("联系人的内容不能为空");  
  134.           
  135.         Contact tmpContact = this.entityManager.loadByNamedQuery("byName", contact.getName());  
  136.         if(tmpContact != null && !contact.getId().equals(tmpContact.getId()))  
  137.             throw new RuntimeException("联系人的姓名相同,请重新输入");  
  138.   
  139.         this.entityManager.update(contact);  
  140.     }  
  141. }  
  142.   
  143.   
  144. //=======================================================  
  145. //远程调用的案例  
  146. //=======================================================  
  147.   
  148. /** 
  149.  *  
  150.  * @author <a href="mailto:zhangyouqun@gmail.com">cnoss (QQ:86895156)</a> 
  151.  * 
  152.  */  
  153. @Path( { "/testCallRemote"})  
  154. public class TestRemoteResource {  
  155.     @Inject  
  156.     @RemoteReference//注入远程资源对象  
  157.     private ContactResource service;  
  158.   
  159.     @Get  
  160.     public Page<Contact> listContacts(int page, int size) {  
  161.         return this.service.listContacts(page, size);  
  162.     }  
  163. }  

 

 

请大家直接从SVN中获取JRest4Guice、JRest4Guice-sample、libraries三个工程即可 

 

http://jrest4guice.googlecode.com/files/JRest4Guice-0.8.1_Jpa4Guice-0.1-with-example.zip

http://jrest4guice.googlecode.com/files/JRest4Guice-0.8.1-with-example.zip

http://jrest4guice.googlecode.com/files/JRest4Guice.rar

http://jrest4guice.googlecode.com/svn/trunk/

 

分享到:
评论

相关推荐

    javaeye月刊2008年3月 总第1期.pdf

    14. **JRest4Guice**:推荐了一个轻量级的Java RESTful服务框架,结合Guice实现更简洁的服务构建。 15. **Cobra:Java HTML解析器**:Cobra可能是当时一个新的Java库,用于解析HTML文档,对于Web开发和数据抓取很有...

    JavaEye新闻月刊 - 2008年3月 总第1期.pdf

    14. **JRest4Guice**:这是一个轻量级的Java REST框架,与Google Guice集成,简化了RESTful服务的开发。 15. **Cobra:Java HTML解析器**:Cobra是用于解析HTML的Java库,对于处理网页内容和爬虫开发具有实用性。 ...

    guice.jar/guice.jar

    guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar

    Guice 中文文档 例子

    4. **Annotations**: Guice 使用注解(如 @Inject、@Singleton 等)来标记需要注入的依赖,以及对象的生命周期。 **Guice 的使用步骤** 1. **创建 Module**: 编写自定义的 Module 类,声明所需的绑定。 2. **创建 ...

    基于guice的简单项目

    4. **Injector实例化**: 在应用启动时,我们创建Injector实例,并传入所需的Module。之后,可以通过Injector来获取已绑定的依赖对象。 ```java Injector injector = Guice.createInjector(new HelloWorldModule());...

    guice-3.0.rar

    4. **Guice的优势**: - **轻量级**:相比Spring等其他IoC容器,Guice更小巧,引入的依赖少,启动速度快。 - **简洁的API**:Guice的API设计简单易用,减少了代码量,降低了学习曲线。 - **强大的注解支持**:...

    Guice用户中文指南

    4. **灵活性**:Guice允许在运行时动态地配置依赖关系。 5. **强大的社区支持**:由于其开源特性,Guice拥有一个活跃的社区,提供了丰富的资源和支持。 #### 三、示例解析 在给定的部分内容中,首先介绍了一个简单...

    guice-4.0-API文档-中文版.zip

    赠送jar包:guice-4.0.jar; 赠送原API文档:guice-4.0-javadoc.jar; 赠送源代码:guice-4.0-sources.jar; 赠送Maven依赖信息文件:guice-4.0.pom; 包含翻译后的API文档:guice-4.0-javadoc-API文档-中文(简体)版...

    google guice 3.0源码

    4. **提供者(Providers)**:Guice允许我们使用`Provider`接口来自定义对象的创建过程,这在某些需要特殊初始化或生命周期管理的情况下非常有用。 5. **注解处理(Annotation Processing)**:Guice使用Java的注解处理...

    初试Guice测试文件

    4. **注解驱动**:Guice使用Java的注解(如`@Inject`、`@Singleton`等)来标记和配置依赖。`@Inject`用于声明依赖,`@Singleton`表示单例模式,确保一个类型在整个应用程序中只有一个实例。 5. **测试**:在Guice中...

    guice超轻量级依赖注入

    4. **提供者(Providers)**:当需要更复杂的实例化逻辑时,可以使用`Provider`接口自定义对象的创建过程。`@Inject`注解的`Provider`方法可以在需要时动态创建对象。 5. **类型监听器(Type Listeners)**:Guice...

    ext extjs4学习经典实例 guice mybaits 简单权限 (无ext资源包和jar包)

    EXTJS4、Guice与MyBatis是三个在IT领域中重要的技术,它们分别用于构建用户界面、依赖注入以及数据库操作。这篇文档将详细介绍这些技术及其在实际项目中的应用。 EXTJS4是一款强大的JavaScript框架,专门用于构建富...

    初试Guice(转)

    4. **生命周期管理**:Guice支持多种对象生命周期策略,如单例(`@Singleton`)、原型(每次请求创建新实例)等。 5. **提供者(Provider)**:对于有特殊初始化需求或需要延迟创建的对象,可以通过自定义`Provider...

    Google Guice: Agile Lightweight Dependency Injection Framework

    ### Google Guice: 敏捷轻量级依赖注入框架详解 #### 一、引言与背景 在现代软件开发中,依赖注入(Dependency Injection, DI)已成为构建灵活、可维护和可测试应用程序的重要手段之一。Google Guice作为一款100%...

    google Guice 1.0 用户指南 中文

    "google Guice 1.0 用户指南 中文" Guice 是一个超轻量级的、下一代的、为 Java 5 及后续版本设计的依赖注入容器。它可以帮助 Java 企业应用开发社区解决连接对象方面的问题,例如 Web 应用如何访问中间层服务、...

    shiro,guice集成

    ### Apache Shiro 与 Guice 集成详解 #### 概述 在现代软件开发过程中,集成不同的框架和技术是常见的需求。Apache Shiro 是一个强大的、易用的 Java 安全框架,提供了认证、授权、加密和会话管理功能。而 Google ...

    nfsdb-guice-1.0.2.zip

    【标题】"nfsdb-guice-1.0.2.zip" 提供的是一个集成NFSDB(Network File System Database)与Guice框架的版本为1.0.2的开源项目。NFSDB通常是一种分布式、高性能的键值存储系统,而Guice则是Google开发的一款轻量级...

    mybatis-guice

    4. **创建 MyBatis-Guice 注释**:在需要使用 MyBatis 功能的类上添加 `@InjectMapper` 或 `@InjectSqlSession` 注释,让 Guice 自动注入对应的 Mapper 或 SqlSession。 5. **启动 Guice**:在应用入口,使用 Guice...

    struts2 整合guice

    请注意替换`4.x`为实际的Guice和Guice-Struts2版本号。 接下来,你需要创建一个Guice模块(Module),这个模块定义了你的应用中需要注入的bean和服务。例如: ```java public class AppModule extends ...

Global site tag (gtag.js) - Google Analytics