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对中的valueMessageContext mc = MessageContext.getCurrentMessageContext();ServiceGroupContext sgc =mc.getServiceGroupContext();return (String)sgc.getProperty("login");}}