快速业务通道

WebService大讲堂之Axis2(6):跨服务会话(Session)管理 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

WebService大讲堂之Axis2(6):跨服务会话(Session)管理

时间:2011-08-13 BlogJava 哈佛校训

在《WebService大讲堂之Axis2(5):会话(Session)管理》一文中介绍了如何使用Axis2来管理同一 个服务的会话,但对于一个复杂的系统,不可能只有一个WebService服务,例如,至少会有一个管理用户 的WebService(用户登录和注册)以及处理业务的WebService。象这种情况,就必须在多个WebService服 务之间共享会话状态,也称为跨服务会话(Session)管理。实现跨服务会话管理与实现同一个服务的会话 管理的步骤类似,但仍然有一些差别,实现跨服务会话管理的步骤如下:

实现跨服务的Session管理需要如下三步:

1.使用MessageContext和ServiceGroupContext获得与设置key-value对。

2.为要进行Session管理的WebService类所对应的<service>元素添加一个scope属性,并将该属 性值设为application。

3.在客户端使用setManageSession(true)打开Session管理功能。

从上面的步骤可以看出,实现跨服务会话管理与实现同一个服务的会话管理在前两步上存在着差异, 而第3步是完全一样的。下面是一个跨服务的会话管理的实例。在这个例子中有两个WebService类: LoginService和SearchService,代码如下:

LoginService.java

package service;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.ServiceGroupContext;
public class LoginService
{
    public boolean login(String username, String password)
    {
        if("bill".equals(username) && "1234".equals(password))
        {
            //  第1步:设置key-value对
            MessageContext mc = MessageContext.getCurrentMessageContext();
            ServiceGroupContext sgc = mc.getServiceGroupContext();
            sgc.setProperty("login", "成功登录");
            return true;
        }
        else
        {
            return false;
        }
    }
    public String getLoginMsg()
    {
       //  第1步:获得key-value对中的value
        MessageContext mc = MessageContext.getCurrentMessageContext();
        ServiceGroupContext sgc =  mc.getServiceGroupContext();
        return (String)sgc.getProperty("login");
    }
}

WebService大讲堂之Axis2(6):跨服务会话(Session)管理(2)

时间:2011-08-13 BlogJava 哈佛校训

SearchService.java

package service;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.ServiceGroupContext;
public class SearchService
{
    public String findByName(String name)
    {
        //  第1步:获得key-value对中的value
        MessageContext mc = MessageContext.getCurrentMessageContext();
        ServiceGroupContext sgc =  mc.getServiceGroupContext();
        if (sgc.getProperty("login") != null)
            return "找到的数据<" + name + ">";
        else
            return "用户未登录";
    }
}

services.xml文件中的配置代码如下:

<serviceGroup>
    <!--  第2步:添加scope属性,并设置属性值为application -->
    <service name="loginService" scope="application">
        <description>
            登录服务
        </description>
        <parameter name="ServiceC

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号