`
iamcrzay
  • 浏览: 57614 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

[Portal参考手册]Portlet服务框架

阅读更多
Poetlet服务封装了portlet中的可重用的商业和逻辑操作。Portlet服务有利于将逻辑操作最小化,便于重用。另一方面,portlet服务还有下面的好处:

内建的持久化框架有有利于将对象持久化到关系数据库中。

内建的访问控制权限有利于安全控制

集成测试框架

Spirit服务接口借用了websphere的接口。下面时服务的UML图:

<!--[if !vml]--><!--[endif]-->



PortletServiceFactory负责产生、初始化、销毁portlet服务。PortletService定义了一个空的服务接口,而PortletServiceProvider定义了增加了生命周期,当服务初始化和销毁的时候调用init和destroy方法。服务描述文件定义了服务和初始化参数。通过PortletServiceConfig这个类可以得到初始化参数。

              一个portlet可以通过PortletContext对象得到服务。getService()方法返回一个服务对象PortletService。

ExampleService =        (ExampleService)getPortletConfig().getContext().getService(ExampleService.class);

    用户服务时带有权限的服务,例如UserManagerService服务中的方法deleteUser(User user)只有超级用户才能执行,其他用户才会抛出PortletServiceAuthorizationException异常。



核心portlet服务

Spirit包含几个核心服务,这些服务有基本的portlet所调用。仅有LoginService不是用户服务。UserManagerService和AccessControlService都是用户服务。



    Portlet服务举例

    下面列举一个股票报价的服务StockQuoteService,这个服务只有一个方法getStockQuotes,返回从quote.com服务得到的股票报价列表。

    定义服务

    在WEB-INF/PortletServices.xml文件中定义一个服务实体:

    ...



        <service>

            <name>Stock Quote Service</name>

            <description>Provides Stock Quotes</description>

            <interface>org.myorg.services.StockQuoteService</interface>  

            <implementation>org.myorg.services.impl.StockQuoteServiceImpl</implementation>

            <service-config>

                <param-name>quote_service</param-name>

                <param-value>quote.com</param-value>

            </service-config>

        </service>

    定义服务接口

       package org.myorg.services.StockQuoteService;



    import com.kuaff.spirit.portlet.service;

    import java.util.List;



    public interface StockQuoteService extends PortletService { <!--[if !vml]--><!--[endif]-->



        public List getStockQuotes();  <!--[if !vml]--><!--[endif]-->



    }

<!--[if !vml]--><!--[endif]-->
StockQuoteService必须继承PortletService

<!--[if !vml]--><!--[endif]-->
定义了一个方法:getStockQuotes


   

    定义服务实现

    package org.myorg.services.impl.StockQuoteServiceImpl;



    import org.myorg.services.StockQuoteService;

    import com.kuaff.spirit.portlet.service.*;

    import com.kuaff.spirit.portlet.service.spi.PortletServiceProvider;

    import java.util.List;



    public class StockQuoteServiceImpl implements PortletServiceProvider, StockQuoteService {

        public void init(PortletServiceConfig config)      

                    throws PortletServiceUnavailableException {

            // 初始化

        }

        public void destroy() {                      

            // 销毁

        }

        public List getStockQuotes() {

            // 得到股票报价列表

        }

    }



    Portlet中访问服务

    package org.myorg.portlets.StockQuotePortlet;



    // 这里忽略了import



    public class StockQuotePortlet extends AbstractPortlet {



        public void actionPerformed(ActionEvent event) {

            PortletContext ctx = getPortletConfi().getContext();

            StockQuoteService quoteService = null;

            try {

                StockQuoteService quoteService = (StockQuoteService)ctx.getService(StockQuoteService.class);

            } catch (PortletServiceException e) {

                getPortletLog().error("Couldn't get quote service instance", e);

                return;

            }



            // 得到股票报价列表,并放到request中

            List quotes = quoteService.getStockQuotes();

            req.setAttribute("stocks", quotes);

        }



        public void doView(PortletRequest req, PortletResponse res) {



            // 显示股票报价

            List quotes = req.getAttribute("stocks");

            ...

        }



    }



    用户服务举例

    还是以上一个例子为例,假定只有管理员可以配置股票,这样StockQuoteService将变成了用户服务。

       定义用户服务

       仅仅增加了user-required元素

       <service>

            <name>Stock Quote Service</name>

            <user-required>true</user-required>

            <description>Provides Stock Quotes</description>

            <interface>org.myorg.services.StockQuoteService</interface>  

            <implementation>org.myorg.services.impl.StockQuoteServiceImpl</implementation>

            <service-config>

                <param-name>quote_service</param-name>

                <param-value>quote.com</param-value>

            </service-config>

        </service>

必须设置<user-required>true</user-required>

   

    编辑用户接口

    ...



        setQuoteService(String quoteService);



        ....

   

    定义用户服务实现

    package org.myorg.services.impl.StockQuoteServiceFactory;



    import org.myorg.services.StockQuoteService;

    import com.kuaff.spirit.portlet.service.*;

    import com.kuaff.spirit.portlet.service.spi.PortletServiceProvider;

    import java.util.List;



    public class StockQuoteServiceFactory implements PortletServiceProvider, StockQuoteService {



        // 产生单例

        private instance = new StockQuoteFactory();



        private StockQuoteServiceFactory() {}             



        public static StockQuoteServiceFactory getInstance() {

            return instance;

        }



        public void init(PortletServiceConfig config)

                throws PortletServiceUnavailableException {

            // 初始化

        }



        public void destroy() {

            // 销毁

        }



        public List getStockQuotes() {

            // 得到股票列表

        }



        public void setStockQuoteService(String quoteService) {

            // 设置股票服务

        }



    }

   

下一步就是对StockQuoteServiceImpl增加权限检查。

    package org.myorg.services.impl.StockQuoteServiceImpl;



    import org.myorg.services.StockQuoteService;

    import com.kuaff.spirit.portlet.services.*;

    import com.kuaff.spirit.portlet.services.spi.PortletServiceProvider;

    import java.util.List;



    public class StockQuoteServiceImpl implements PortletServiceProvider, StockQuoteService {



        private StockQuoteServiceFactory quoteServiceFactory = null;



        private PortletServiceAuthorizer authorizer = null;



        public UserManagerServiceImpl(PortletServiceAuthorizer authorizer) {

           this.authorizer = authorizer;

        }



        public void init(PortletServiceConfig config)

                    throws PortletServiceUnavailableException {

            // 使用StockQuoteServiceFactory配置

            quoteServiceFactory = StockQuoteServiceFactory.getInstance();

            quoteServiceFactory.init();

        }



        public void destroy() {

            // 销毁

            quoteServiceFactory.destroy();

        }



        public List getStockQuotes() {

            quoteServiceFactory.getStockQuotes();

        }



        public void setStockQuoteService(String quoteService) {     <!--[if !vml]--><!--[endif]-->

            // 设置股票服务



            //检查权限

            authorizer.authorizeSuperUser();



            quoteServiceFactory.setStockQuoteService(quoteService);

        }



    }

   

Portlet中访问用户服务

    ...



        public void actionPerformed(ActionEvent event) {

            PortletContext ctx = getPortletConfig().getContext();

            PortletRequest req = event.getPortletRequest();

            User user = req.getUser();

            StockQuoteService quoteService = null;

            try {

                StockQuoteService quoteService = (StockQuoteService)ctx.getService(StockQuoteService.class, user);

            } catch (PortletServiceException e) {

                getPortletLog().error("不能得到服务实例", e);

                return;

       

            List quotes = quoteService.getStockQuotes();

            req.setAttribute("stocks", quotes);

        }





        ....

分享到:
评论

相关推荐

    UAP V6.3Portal开发技术手册

    ### UAP V6.3 Portal开发技术手册知识点 #### UAP Portal概述 UAP Portal是基于JSR286规范实现的J2EE技术体系架构的门户平台,该平台不仅可以展现产品需求,还具备强大的系统集成组装功能。它支持多种集成框架,...

    LifeRay_Portal6.0.6学习手册

    《LifeRay Portal 6.0.6 学习手册》是一份针对LifeRay Portal初学者的详细教程,旨在帮助读者深入了解和掌握LifeRay Portal的使用和开发。下面将对其中的关键知识点进行深入探讨。 1. **LifeRay Portal初体验** ...

    用友UAP的Portal开发

    【用友UAP的Portal开发】是针对企业级Web应用的一种解决方案,旨在提供一个集成了多种功能和服务的统一入口。UAP Portal是基于JSR 286规范,遵循J2EE技术体系,具备强大的系统集成和组装能力。它不仅支持产品展示...

    Portlet JSR-170标准手册跟帮助文档

    Portlet技术是Web应用程序开发中的一个重要组成部分,尤其是在企业级应用如Java Portal平台中。JSR-170,全称为Java Portlet API 1.0,是Java Community Process(JCP)发布的一项标准,用于定义portlet如何在门户...

    StringbeansTM Portal管理手册

    d Authorization Service) 配置......................总的来说,Stringbeans(TM) Portal管理手册是一份详尽的指南,涵盖了从基础安装到高级功能的所有方面,为用户提供了一个全面了解和管理Stringbeans Portal的框架。

    jboss portal手册

    【JBoss Portal手册】是企业级Java应用服务器JBoss提供的一种综合性的门户解决方案。这个平台允许组织构建、部署和管理富互联网应用程序,提供了一个统一的入口点,供用户访问多种服务和信息。作为开发者或者系统...

    portal规范

    1. **portlet概念**:portlet是portal中的可重用组件,能够独立提供服务,如新闻显示、天气预报、社交媒体集成等。 2. **JSR268**:Portlet 2.0规范,增加了portlet的灵活性和互操作性,如支持Ajax增强的用户界面、...

    liferay portal开发大全

    它采用MVC(模型-视图-控制器)设计模式,提供了一个可扩展的框架,支持portlet、主题、布局和服务的开发。Liferay还引入了Service Builder,使得创建和部署服务变得简单。 2. **Portlet 开发** Portlet是Liferay ...

    portal

    【标题】:“Portal” 【描述】:“SoftPortal Good” ...JSR168作为portlet开发的标准,为构建这样的平台提供了基础,而JSR168 PORTLET标准手册汉化整理.doc则是开发者深入了解和实践这一标准的重要参考资料。

    Portal PUMA开发手册

    ### Portal PUMA开发手册知识点概述 #### 一、引言与用户管理介绍 - **WebSphere Portal 用户管理**:WebSphere Portal 提供了一个强大的用户管理组件,它能够连接到不同的用户存储库(如LDAP、数据库等),这些...

    spring framework 2.0 中文参考手册

    《Spring Framework 2.0 中文参考手册》是Java开发者不可或缺的重要参考资料,它全面解析了Spring框架的核心概念、设计模式以及实现细节。Spring作为一个开源的轻量级框架,旨在简化企业级应用的开发,通过依赖注入...

    WebSphere_Portal_V61安装手册

    - 它整合了portlet框架、工作流、内容管理、搜索和个性化功能,为企业构建统一的入口点。 2. **系统需求** - 在开始安装前,必须确保你的硬件和软件环境满足WebSphere Portal V6.1的要求,包括操作系统(如...

    中国移动ORACLE Portal 安全配置手册

    ### 中国移动ORACLE Portal 安全配置手册关键知识点解析 #### Oracle AS 平台安全概述 **1.1 Oracle AS 平台简介** - **Oracle AS 平台**:是Oracle公司提供的一套全面且完整的电子商务解决方案的重要部分,基于...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版).part1

    格里芬,Neil Griffin是Liferay Portal的委员以及JSF开发团队领导者,并且是Portlet Faces项目的合作创始人。 目录 第I部分 javaserver faces框架 第1章 javaserver faces简介 1.1 什么是javaserver faces 1.2 ...

    7z压缩,三合一-LifeRay-开发参考手册&二次开发指南&4.3中文开发指南

    - **portlet开发参考手册**:Portlet是LifeRay中的核心组件,用于展示动态内容和交互功能。这个参考手册可能详细介绍了portlet的生命周期、开发过程和集成方法。 综合来看,这些资源对于想要学习和精通LifeRay开发...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版) 1/2

    格里芬,Neil Griffin是Liferay Portal的委员以及JSF开发团队领导者,并且是Portlet Faces项目的合作创始人。 目录 第I部分 javaserver faces框架 第1章 javaserver faces简介 1.1 什么是javaserver faces 1.2 ...

Global site tag (gtag.js) - Google Analytics