- 浏览: 124836 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
弦月001:
楼主目前对jcifs还记得吗?我目前在做jcifs sso研究 ...
JCIFS支持多域的SSO -
jusescn:
effort.mjb 写道博主好,请问怎么样才能直接获取到当前 ...
JCIFS支持多域的SSO -
effort.mjb:
博主好,请问怎么样才能直接获取到当前客户端的用户的域信息呢?( ...
JCIFS支持多域的SSO -
jusescn:
yingzhor 写道博主,您好。 如果,我想扩展一下,如果客 ...
JCIFS支持多域的SSO -
yingzhor:
博主,您好。 如果,我想扩展一下,如果客户端不再域内,直接把请 ...
JCIFS支持多域的SSO
- 基于Google guice
- 零配置,服务的自动扫描注册
- 非侵入式,用户不需要实现特定的接口来实现Restful服务
- 支持Post. Get. Put. Delete操作
- 灵活的注入(支持上下文环境request/response/session以及参数的自动注入)
- 根据客户端要求返回不同类型的数据(xml/json/html)
- 支持Velocity、Freemarker和Spry模板引擎(当返回类型是text/html时才有效,参见@ViewTemplate)
- 支持JPA,通过增强的BaseEntityManager实现实体的CRUD
- 支持事务,通过@Transactional注解声明事务的类型
- 支持JAAS,通过@RolesAllowed注解声明操作所需要的角色
- 支持分布式资源对象,实现业务逻辑的分布式部署
下一步计划:
- OSGI的支持
- 分布式事务的支持
代码示例:
- /**
- *
- * @author <a href="mailto:zhangyouqun@gmail.com">cnoss (QQ:86895156)</a>
- * 联系人的资源对象,并声明为Remote(可以通过@RemoteService的注入到任一资源对象,通常用在跨应用的资源调用上)
- */
- @Path( { "/contact", "/contacts/{contactId}" })
- @Remote
- public class ContactResource {
- @Inject
- private ContactService service;
- /**
- * 创建新的联系人
- * contact 联系人实体
- */
- @Post
- public String createContact(@ModelBean Contact contact) {
- return this.service.createContact(contact);
- }
- /**
- * 修改联系人信息
- * contact 联系人实体
- */
- @Put
- public void putContact(@ModelBean Contact contact) {
- this.service.updateContact(contact);
- }
- /**
- * 显示联系人列表,并限定服务所支持的返回数据类型只能为application/json和application/javabean
- * pageIndex 页码
- * pageSize 每页记录数
- */
- @Get
- @ProduceMime( {MimeType.MIME_OF_JSON,MimeType.MIME_OF_JAVABEAN})
- @Path("/contacts")
- public Page<Contact> listContacts(int pageIndex, int pageSize) {
- return this.service.listContacts(pageIndex, pageSize);
- }
- /**
- * 显示单个联系人的信息
- * 并指定了当客户端请求类型为text/html时的视图显示模板(现在系统内置对Velocity、Freemarker与Spry的支持)
- * contactId 联系对象ID
- */
- @Get
- @ViewTemplate(url="/template/contactDetail.vm",render=ViewRenderType.VELOCITY)
- // @ViewTemplate(url="/template/contactDetail.ftl",render=ViewRenderType.FREEMARKER)
- // @ViewTemplate(url="/template/contactDetail.html",render=ViewRenderType.SPRY)
- public Contact getContact(@Parameter("contactId") String contactId) {
- return this.service.findContactById(contactId);
- }
- /**
- * 删除指定ID的联系人
- * contactId 联系对象ID
- */
- @Delete
- public void deleteContact(@Parameter("contactId") String contactId) {
- this.service.deleteContact(contactId);
- }
- }
- /**
- * 业务对象
- * @author <a href="mailto:zhangyouqun@gmail.com">cnoss (QQ:86895156)</a>
- *
- */
- @SuppressWarnings({"unchecked", "unused"})
- public class ContactServiceBean implements ContactService {
- private BaseEntityManager<String, Contact> entityManager;
- @Inject
- private void init(EntityManager em) {
- this.entityManager = new BaseEntityManager<String, Contact>(
- Contact.class, em);
- }
- @Transactional
- @RolesAllowed({"user"})//权限声明
- public String createContact(Contact contact) {
- if (contact == null)
- throw new RuntimeException("联系人对象不能为空");
- if (this.entityManager.loadByNamedQuery("byName", contact.getName()) != null) {
- throw new RuntimeException("联系人的姓名相同,请重新输入");
- }
- this.entityManager.create(contact);
- return contact.getId();
- }
- @Transactional
- @RolesAllowed({"admin","audit"})//权限声明
- public void deleteContact(String contactId) {
- String[] ids = contactId.split(",");
- Contact contact;
- for (String id : ids) {
- contact = this.findContactById(id);
- if (contact == null)
- throw new RuntimeException("联系人不存在");
- this.entityManager.delete(contact);
- }
- }
- @Transactional(type=TransactionalType.READOLNY)//只读性的事务
- public Contact findContactById(String contactId) {
- return this.entityManager.load(contactId);
- }
- @Transactional(type=TransactionalType.READOLNY)
- public Page<Contact> listContacts(int pageIndex, int pageSize)
- throws RuntimeException {
- return this.entityManager.pageByNamedQuery("list",
- new Pagination(pageIndex, pageSize));
- }
- @Transactional
- @RolesAllowed({"admin","user"})//权限声明
- public void updateContact(Contact contact) {
- if (contact == null)
- throw new RuntimeException("联系人对象不能为空");
- this.entityManager.update(contact);
- }
- }
- /**
- * 远程资源引用的示例
- * @author <a href="mailto:zhangyouqun@gmail.com">cnoss (QQ:86895156)</a>
- *
- */
- @Path({"/testCallRemote"})
- public class TestRemoteResource {
- @Inject
- @RemoteService //注入远程资源对象的引用
- private ContactResource service;
- @Get
- @ProduceMime( {MimeType.MIME_OF_JSON,MimeType.MIME_OF_JAVABEAN})
- public Page<Contact> listContacts(int pageIndex, int pageSize) {
- return this.service.listContacts(pageIndex, pageSize);
- }
- }
/** * * @author <a href="mailto:zhangyouqun@gmail.com">cnoss (QQ:86895156)</a> * 联系人的资源对象,并声明为Remote(可以通过@RemoteService的注入到任一资源对象,通常用在跨应用的资源调用上) */ @Path( { "/contact", "/contacts/{contactId}" }) @Remote public class ContactResource { @Inject private ContactService service; /** * 创建新的联系人 * contact 联系人实体 */ @Post public String createContact(@ModelBean Contact contact) { return this.service.createContact(contact); } /** * 修改联系人信息 * contact 联系人实体 */ @Put public void putContact(@ModelBean Contact contact) { this.service.updateContact(contact); } /** * 显示联系人列表,并限定服务所支持的返回数据类型只能为application/json和application/javabean * pageIndex 页码 * pageSize 每页记录数 */ @Get @ProduceMime( {MimeType.MIME_OF_JSON,MimeType.MIME_OF_JAVABEAN}) @Path("/contacts") public Page<Contact> listContacts(int pageIndex, int pageSize) { return this.service.listContacts(pageIndex, pageSize); } /** * 显示单个联系人的信息 * 并指定了当客户端请求类型为text/html时的视图显示模板(现在系统内置对Velocity、Freemarker与Spry的支持) * contactId 联系对象ID */ @Get @ViewTemplate(url="/template/contactDetail.vm",render=ViewRenderType.VELOCITY) // @ViewTemplate(url="/template/contactDetail.ftl",render=ViewRenderType.FREEMARKER) // @ViewTemplate(url="/template/contactDetail.html",render=ViewRenderType.SPRY) public Contact getContact(@Parameter("contactId") String contactId) { return this.service.findContactById(contactId); } /** * 删除指定ID的联系人 * contactId 联系对象ID */ @Delete public void deleteContact(@Parameter("contactId") String contactId) { this.service.deleteContact(contactId); } } /** * 业务对象 * @author <a href="mailto:zhangyouqun@gmail.com">cnoss (QQ:86895156)</a> * */ @SuppressWarnings({"unchecked", "unused"}) public class ContactServiceBean implements ContactService { private BaseEntityManager<String, Contact> entityManager; @Inject private void init(EntityManager em) { this.entityManager = new BaseEntityManager<String, Contact>( Contact.class, em); } @Transactional @RolesAllowed({"user"})//权限声明 public String createContact(Contact contact) { if (contact == null) throw new RuntimeException("联系人对象不能为空"); if (this.entityManager.loadByNamedQuery("byName", contact.getName()) != null) { throw new RuntimeException("联系人的姓名相同,请重新输入"); } this.entityManager.create(contact); return contact.getId(); } @Transactional @RolesAllowed({"admin","audit"})//权限声明 public void deleteContact(String contactId) { String[] ids = contactId.split(","); Contact contact; for (String id : ids) { contact = this.findContactById(id); if (contact == null) throw new RuntimeException("联系人不存在"); this.entityManager.delete(contact); } } @Transactional(type=TransactionalType.READOLNY)//只读性的事务 public Contact findContactById(String contactId) { return this.entityManager.load(contactId); } @Transactional(type=TransactionalType.READOLNY) public Page<Contact> listContacts(int pageIndex, int pageSize) throws RuntimeException { return this.entityManager.pageByNamedQuery("list", new Pagination(pageIndex, pageSize)); } @Transactional @RolesAllowed({"admin","user"})//权限声明 public void updateContact(Contact contact) { if (contact == null) throw new RuntimeException("联系人对象不能为空"); this.entityManager.update(contact); } } /** * 远程资源引用的示例 * @author <a href="mailto:zhangyouqun@gmail.com">cnoss (QQ:86895156)</a> * */ @Path({"/testCallRemote"}) public class TestRemoteResource { @Inject @RemoteService //注入远程资源对象的引用 private ContactResource service; @Get @ProduceMime( {MimeType.MIME_OF_JSON,MimeType.MIME_OF_JAVABEAN}) public Page<Contact> listContacts(int pageIndex, int pageSize) { return this.service.listContacts(pageIndex, pageSize); } }
请大家直接从SVN中获取JRest4Guice、JRest4Guice-sample、libraries三个工程即可
真诚希望大家提出宝贵意见,联系方式:
- Email:zhangyouqun@gmail.com
- QQ: 86895156
- MSN: zhangyouqun@hotmail.com
发表评论
-
淘宝技术嘉年华ADC2013主题论坛视频
2013-08-01 13:29 1316业务架构&后端技术 CRM平台架构 http:/ ... -
2012年开春计划-系统调优之路
2012-03-01 10:16 512012年开春计划,今年打算边学边写一点系统优化方法的东西。年 ... -
浅谈企业应用架构
2009-05-06 12:27 714http://www.blogjava.net/AndersL ... -
大型网站架构技术方案集锦
2008-12-26 11:01 4473http://www.cnblogs.com/net205/a ... -
大型网站架构演变和知识体系
2008-09-04 12:14 1016这是一篇简单的,用来入门的。 http://www.blogj ... -
从LiveJournal后台发展看大规模网站性能优化方法
2008-09-04 12:10 865http://blog.zhangjianfeng.com/a ... -
舍得网数据库缓存策略
2008-08-16 22:07 0请把该文贴到自己的博 ... -
好事要做到底,我们需要full stack的设计
2008-07-16 09:19 1059http://www.blogjava.net/OneEyeW ... -
快速Web开发环境&模板jws-jpt1.0发布
2008-06-18 09:47 1088http://www.iteye.com/news/2589 ... -
大量小文件的实时同步方案
2008-06-18 09:38 2359http://blog.daviesliu.net/2008/ ... -
反模式[中英文版]
2008-06-17 17:47 1526来自Wikipedia, 自由百科 ... -
LinkedIn架构图:99%都是用Java写的
2008-06-14 10:24 5230著名社交网站LinkedIn的Java架构技术,在Java ... -
一种一站式的Java Web框架的设计和实现
2008-05-07 17:16 1725http://zwchen.iteye.com/blog/47 ... -
软件架构
2008-05-04 09:42 890软件架构(software archite ... -
web架构设计经验分享
2008-04-28 13:00 1003本人作为一位web工程师,着眼最多之处莫过于 性能与架构,本次 ... -
关于ss3扩展框架
2008-04-07 13:39 1401原文可以去springside的论 ... -
1人30天44587行代码,分享舍得网开发经验【修订版】
2008-04-07 12:48 1443http://www2.matrix.org.cn/threa ...
相关推荐
Java EE(现更名为Jakarta EE)是一个用于构建企业级应用的框架,包括了如EJB(Enterprise JavaBeans)、JPA(Java Persistence API)、JSF(JavaServer Faces)等技术,用于数据库交互、事务管理和服务层设计。...
4. **Java Persistence API (JPA)**:JPA是Java标准的ORM(对象关系映射)框架,用于简化数据库操作。它允许开发者使用Java对象而不是SQL来操作数据,通过实体类和映射文件实现数据库表的映射。 5. **Java Message ...
Hibernate是JPA的一个流行实现,提供了更丰富的功能和更高的性能。 7. **Spring框架**:Spring以其依赖注入和面向切面编程(AOP)理念,成为Java企业级开发的首选框架。Spring还提供了完整的MVC(模型-视图-控制器...
Java EE(以前称为J2EE)是Java平台上用于构建企业级分布式应用程序的框架。它提供了一个标准的、组件化的开发模型,支持多层架构,包括客户端、Web服务器、应用服务器和数据库。Java EE 5.0是这个平台的一个重要...
1. **Java企业版(Java EE)**:Java企业版,也称为Java 2 Platform, Enterprise Edition,是Java平台的一个版本,专为开发和部署多层、分布式、面向服务的Web应用程序而设计。Java EE提供了许多企业级服务,如...
Java EE(Java Platform, Enterprise Edition)是Java平台上用于构建企业级Web应用的框架集合,它提供了丰富的服务和组件,使得开发者能够快速开发出分布式、多层架构的应用程序。本教程由知名讲师郑阿奇编著,旨在...
J2EE(Java 2 Platform, Enterprise Edition)是一个用于构建分布式、多层的企业级应用程序的框架,它提供了各种服务和API,便于开发人员快速构建可扩展且健壮的应用。 在Java EE 5中,有几个关键的知识点值得我们...
2. **Java EE(企业版)**:包括了诸如EJB(Enterprise JavaBeans)、JMS(Java Message Service)、JPA(Java Persistence API)等组件,它们提供了一套完整的框架来构建分布式、多层的企业级应用。 3. **Spring...
通过这个“Java EE水果管理系统”的学习,你可以深入了解Java EE的各个组成部分,并学会如何将它们组合在一起构建一个完整的应用。实践中,你需要理解和配置应用服务器(如Tomcat、WildFly),编写Java代码,设置...
J2EE(Java 2 Platform, Enterprise Edition)是Java平台的一个版本,专为构建分布式、多层的企业级应用程序而设计。在J2EE试题中,我们通常会看到以下几个核心知识点: 1. **Java基础知识**:这是所有J2EE学习的...
Java提供了JTA(Java Transaction API)和JPA(Java Persistence API)来支持分布式事务处理。 4. **并发控制**:在高并发场景下,多个用户可能会同时操作同一购物车,因此需要处理并发问题。Java提供了...
Java EE(Java Platform, Enterprise Edition),是Java平台的一个版本,专为构建企业级应用而设计。它提供了大量的API和服务,包括但不限于:Servlet、JSP(JavaServer Pages)、EJB(Enterprise JavaBeans)、JMS...
4. 安全性:Java提供了一系列的安全机制,如JAAS(Java Authentication and Authorization Service)用于用户身份验证和权限管理,SSL/TLS协议支持加密通信,防止数据泄露。此外,还可以利用Java的过滤器(Filter)...
- **JPA(Java Persistence API)**:提供了ORM(对象关系映射)框架,如Hibernate,使Java对象可以透明地映射到数据库表。 5. **Web服务** - **JAX-WS(Java API for XML Web Services)**:用于创建和消费SOAP...
最后,Java EE的安全性也是一个重要的主题,包括认证和授权机制,如JAAS(Java Authentication and Authorization Service),以及HTTPS、SSL/TLS等网络安全协议的应用。 2019年的黑马JAVA EE全套视频,很可能是...
7. **JPA(Java Persistence API)**:JPA是Java标准的ORM(Object-Relational Mapping)框架,用于处理Java对象和关系数据库之间的映射。教程可能涵盖实体类的定义、持久化上下文的使用以及查询语言JQL。 8. **Web...
Java EE 6 提供了一个强大的事务管理框架,支持分布式事务。 **3.2 标准** - **JTA 1.1**:定义了事务服务接口。 - **JTS 1.1**:提供了一个事务服务的参考实现。 **3.3 事务的互用性** 支持与其他Java EE版本的...
8. **Java Transaction API (JTA)**:JTA为应用程序提供了一个统一的事务管理接口,支持分布式事务处理,确保数据的一致性。 9. **Java Authentication and Authorization Service (JAAS)**:JAAS提供了安全框架,...
Java EE,全称为Java Platform, Enterprise Edition,是Java平台针对企业级应用开发的版本,它提供了丰富的组件和服务,用于构建分布式、多层的企业系统。这两份试卷,"Java_EEB卷.doc"和"JAVA_EE期末复习参考题.doc...
J2EE(Java Platform, Enterprise Edition)是一个用于开发和部署多层分布式应用程序的平台,它提供了丰富的API和服务,以支持各种企业级功能,如事务管理、安全性、数据库连接池和消息队列等。 在J2EE应用框架设计...