Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1351|回复: 0

Weblogic集群中的Session复制

[复制链接]

该用户从未签到

发表于 2011-10-20 11:24:57 | 显示全部楼层 |阅读模式
Session 复制:

由于集群环境中,用户访问的请求在不同的被管理服务器之间不停的切换,而用户访问又需要保持状态(Session),这就要求Session可以穿梭于被管服务器之间,就是各个被管服务器上的Session是一致的,这样用户才感觉不到请求的切换。



集群环境Session的一致性使用了Session复制的技术。

要求一: Servlets must use either setAttribute() or removeAttribute() to change the session object. If you use other set methods to change objects within the session, WebLogic Server does not replicate those changes.

在非集群环境下,我们更改了session中某个对象的属性后是不需要重新将该对象放回session的,但在集群环境下,如果要让其起作用,必须在更改完属性的值后将其放回session 中。

要求二: In order to support in-memory replication for HTTP session states, all servlet and JSP session data must be serializable. If the servlet or JSP uses a combination of serializable and non-serializable objects, WebLogic Server does not replicate the session state of the non-serializable objects.

所有放入session中的数据都必须是经过序列化的,包括类和属性都要是经过序列化的。

  要求三:不是硬性要求,而是考虑到性能的因素,最好不要在Session里放置大对象。



   实现方法:

在应用webapp的weblogic.xml中添加

<session-descriptor>

       <session-param>

              <param-name&gtersistentStoreType</param-name>

              <param-value>replicated</param-value>

       </session-param>

</session-descriptor>

注: 将持久性存储方法设置为以下某个选项:

memory - 禁用持久性会话存储。

replicated - 与 memory 相同,但会话数据将在群集服务器之间复制。

replicated_if_clustered – 如果 Web 应用程序部署于群集服务器上,则会复制生效的 persistent-store-type。否则,memory 为默认值。

sync-replication-across-cluster – 复制将在群集内同步发生。

async-replication-across-cluster – 复制将在群集内异步发生。

file - 使用基于文件的持久性(另请参阅 persistent-store-dir)。

jdbc - 使用数据库存储持久性会话。(另请参阅 persistent-store-pool。)

cookie – 所有会话数据都存储于用户浏览器的 cookie 中。



replicated是集群中session复制的最常用手段,当然除了这种方式以外,还有其它的一些方式,如使用数据库的方式来保存:

使用数据主加方式复制Session:

1. 首先启动数据库。 通常我们使用的是weblogic能够直接识别的数据库(也是其自带的微型数据库)pointbase。

D:\bea\weblogic92\common\eval\pointbase\tools

在控制台使用命令:  startPointBase.cmd 启动数据库

然后在输入: startPointBaseConsole.cmd  启动数据库操作控制台(一个客户端工具)

一般而言,我们都使用默认的配置,用户名通常是PBPUBLIC, 密码也是PBPUBLIC,进入客户端后,接下来我们需要做的是:

2. 创建相关的数据表。

       Create table  wl_servlet_sessions(

              wl_id  VARCHAR2(100)  NOT NULL,

              wl_context_path   VARCHAR2(100)   NOT   NULL,

              wl_is_new  CHAR(1),

              wl_create_time  NUMBER(20),

              wl_is_valid   CHAR(1),

              wl_session_values  LONG  RAW,

              wl_access_time  NUMBER(20),

              wl_max_inactive_interval  INTEGER,

              Primary key(wl_id,wl_context_path

);

3. 修改weblogic.xml文件,将其中的persistent-store-type改成jdbc.

<session-descriptor>

          <timeout-secs>300</timeout-secs>

          <invalidation-interval-secs>60</invalidation-interval-secs>

          <persistent-store-type>jdbc</persistent-store-type>

          <persistent-store-pool>SessionDS</persistent-store-pool>

          <persistent-store-table>WL_SERVLET_SESSIONS</persistentstore-table>

</session-descriptor>

4. 接下来配置一个JDBC的数据源,注意 JNDI的名字要选择我们在上面配置的persistent-store-pool元素的值,此处是SessionDS,  按提示输入相应的数据库类型,数据库名、用户名和密码等。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-16 06:04 , Processed in 0.505299 second(s), 48 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表