想实现两件事!一.两台server的session复制.我的做法1.在A机器安装TOMCAT5.525.
在server.xml中,去掉关于Cluster注释。设置好了Engine元素的jvmRoute的属性。在应用的web.xml中增加了<distributable/>。
2.在B机器安装TOMCAT5.525.
在server.xml中,去掉关于Cluster注释。设置好了Engine元素的jvmRoute的属性。在应用的web.xml中增加了<distributable/>。
3.启动A,B机器,TOMCAT显示成功,后台没有报告错误。两台都启动后,关闭其中一台的TOMCAT,另外一台的TOMCAT有对应提示。感觉
配置成功了。
可是我在A机,打开浏览器,执行一个.jsp,该jsp的功能是向session里放一个Msg对象,该对象已经继承Serializable。
然后我在B机,打开浏览器,执行一个.jsp,该jsp的功能是从session里取出一个Msg对象,按说如果session已经复制,那应该能取出刚才A机已经放入Seesion的Msg对象。
可是取出来的是NULL为什么啊?参考文献:http://tomcat.jaxmao.org/cluster-howto.html


二.我想在同一个Tomcat下的不同应用,共享Session.我的做法
1.修改server.xml内容如下
<!--应用一-->
<Host name="www.app.com" appBase="C:/app"  unpackWARs="true" autoDeploy="true"  xmlValidation="false" xmlNamespaceAware="false"> 
   <Context path="" docBase="C:/app" debug="1" reloadable="true" crossContext="true"> 
   </Context> 
 </Host> 
<!--应用二(同应用一的后缀一样都是xxx.app.com)--> 
 <Host name="admin.app.com" appBase="C:/appadmin"  unpackWARs="true" autoDeploy="true"  xmlValidation="false" xmlNamespaceAware="false"> 
   <Context path="" docBase="C:/appadmin" debug="1" reloadable="true" crossContext="true"> 
   </Context> 
 </Host> 可是我在浏览器中,执行一个www.app.com应用的.jsp,该jsp的功能是向session里放一个Msg对象,该对象已经继承Serializable。
然后不关闭这个浏览器,修改url为admin.app.com应用的一个.jsp,该jsp的功能是从session里取出一个Msg对象,按说如果session已经共享,那应该能取出刚才www.app.com应用,已经放入Seesion的Msg对象。
可是取出来的是NULL为什么啊?
-------------------------------------
<Host.............>
<Context path="/one" docBase="C:/dir1" debug="1" reloadable="true" crossContext="true"> 
</Context> 
       
<Context path="/two" docBase="C:/dir2" debug="1" reloadable="true" crossContext="true"> 
</Context> 
</Host>
最后我修改xml文件为一个HOST下的多个应用,发现上面的测试也过不去!为什么啊?
 
参考文献:http://hi.baidu.com/chenxiaowen/blog/item/e6a15c82c26a69a30df4d210.html

解决方案 »

  1.   

    楼主不明白什么是session!!如果你的配置没错的话,要做的测试不是
    """
    可是我在A机,打开浏览器,执行一个.jsp,该jsp的功能是向session里放一个Msg对象,该对象已经继承Serializable。
    然后我在B机,打开浏览器,执行一个.jsp,该jsp的功能是从session里取出一个Msg对象,按说如果session已经复制,那应该能取出刚才A机已经放入Seesion的Msg对象。
    """而是应该:
    * 把A机绑定成app1.app.com,B机绑定成app2.app.com
    * 访问app1.app.com ,设置session值
    * =同一个浏览器= 访问app2.app.com,得到session值
      

  2.   

    to
    wolfw(阿干) 我这个就是在同一个浏览器上的........可是为什么也不能得到啊
    -----------------------
    二.我想在同一个Tomcat下的不同应用,共享Session.我的做法
    1.修改server.xml内容如下
    <!--应用一-->
    <Host name="www.app.com" appBase="C:/app"  unpackWARs="true" autoDeploy="true"  xmlValidation="false" xmlNamespaceAware="false"> 
       <Context path="" docBase="C:/app" debug="1" reloadable="true" crossContext="true"> 
       </Context> 
     </Host> 
    <!--应用二(同应用一的后缀一样都是xxx.app.com)--> 
     <Host name="admin.app.com" appBase="C:/appadmin"  unpackWARs="true" autoDeploy="true"  xmlValidation="false" xmlNamespaceAware="false"> 
       <Context path="" docBase="C:/appadmin" debug="1" reloadable="true" crossContext="true"> 
       </Context> 
     </Host> 可是我在浏览器中,执行一个www.app.com应用的.jsp,该jsp的功能是向session里放一个Msg对象,该对象已经继承Serializable。
    然后不关闭这个浏览器,修改url为admin.app.com应用的一个.jsp,该jsp的功能是从session里取出一个Msg对象,按说如果session已经共享,那应该能取出刚才www.app.com应用,已经放入Seesion的Msg对象。
    可是取出来的是NULL为什么啊?
    -------------------------------------
    <Host.............>
    <Context path="/one" docBase="C:/dir1" debug="1" reloadable="true" crossContext="true"> 
    </Context> 
           
    <Context path="/two" docBase="C:/dir2" debug="1" reloadable="true" crossContext="true"> 
    </Context> 
    </Host>
    最后我修改xml文件为一个HOST下的多个应用,发现上面的测试也过不去!为什么啊?
     
    参考文献:http://hi.baidu.com/chenxiaowen/blog/item/e6a15c82c26a69a30df4d210.html
      

  3.   

    session复制功能我不知道能不能实现但是我知道你2个服务器传递对象,可以使用JMS来通过消息传递对象.你试试将A机器的得到的session对象的信息保存到一个变量中然后通过JMS传递到另外一个服务器B.看能不能得到这个session的信息,如果可以你可以试试对象复制设置!
    第二个问题好象IBM已经解决啦!!好象是整合多个系统用同一帐号的登陆问题.(IBM的门户网不就已经解决啦!!)...至于怎么解决我想方法肯定有很多种!!呵呵......我不知道啦!!
      

  4.   

    问题2:
    可能是 tomcat 默认通过 cookie 实现 session 的原因造成的, 浏览器端对不同域名不给共享cookie
      

  5.   

    Session是针对于单一用户划分的特定区域,另一台机器一上线,自然会被分配新的Session,即使做成集群也没办法,个人建议用JMS来做,这样,就可以实现消息的传递了
      

  6.   

    第一问题,我觉得实验有问题,  这是2个不同的SESSION啊
    你开启两个tomcat后
    访问第一个 session.getId()
    可以看到session信息在tomcat1中输出。然后关闭TOMCAI1,再刷新访问TOMCAT1的那个浏览器,会发现TOMCAT2上有1的值