之前学习了同一服务中的session管理点击打开链接,今天来看一下跨服务的session管理,本来昨天晚上把服务器端都写好了,只剩下客户端的代码了,无奈,下班了,只好今天早上接着写了,也好就当是复习了。
对于一个复杂的系统,不可能只有一个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,代码如下:
- package crossSession;
- import org.apache.axis2.context.MessageContext;
- import org.apache.axis2.context.ServiceGroupContext;
- public class LoginService
- {
- 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
- false;
- }
- public String getLoginMsg()
- {
- // 第1步:获得key-value对中的value
- MessageContext mc = MessageContext.getCurrentMessageContext();
- ServiceGroupContext sgc = mc.getServiceGroupContext();
- return (String)sgc.getProperty("login");
- }
- }