WLS_056:同一个ear中不一样的Web应用如何共享Session?

Web规范中规定每一个Web应用的Session信息彼此是不能共享的,可是在开发Web应用时,有时咱们但愿多个Web应用之间能够共享Session信息。

WebLogic 容许同一个ear中的多个Web应用共享Session信息。注意,这是WebLogic本身的特性,不是规范中的。 html

下面咱们以shoppingcart.war为例,来讲明如何实现。

1. 把shoppingcart.war复制两份,分别命名为shoppingcart1.war和shoppingcart2.war

2. 把shoppingcart1.war和shoppingcart2.war打到一个ear中:shoppingcart.ear
修改ear包中的META-INF下的application.xml内容以下:
java

<?xml version='1.0' encoding='utf-8'?>
<application xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.4">
  <display-name></display-name>
  <module>
    <web>
      <web-uri>shoppingcart1.war</web-uri>
      <context-root>shoppingcart1</context-root>
    </web>
  </module>
  <module>
    <web>
      <web-uri>shoppingcart2.war</web-uri>
      <context-root>shoppingcart2</context-root>
    </web>
  </module>
</application>

将ear包中的META-INF下的weblogic-application.xml内容置空:
由于咱们首先要肯定默认配置下,应用能够正常访问,而后再增长共享Session配置。
<?xml version='1.0' encoding='utf-8'?>
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</weblogic-application>

3. 部署并访问应用shoppingcart1和shoppingcart2
(1)http://localhost:7001/shoppingcart1/访问正常,购买12支黑色钢笔放入Session中。

(2)http://localhost:7001/shoppingcart2/访问正常,购买12支蓝色钢笔放入Session中。 web


能够看出,shoppingcart1和shoppingcart2各自访问正常,但Session信息没有共享。 session

4. 修改weblogic-application.xml,并从新部署
修改ear包中的META-INF下的weblogic-application.xml内容以下:
oracle

<?xml version='1.0' encoding='utf-8'?>
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <session-descriptor> 
    <persistent-store-type>memory</persistent-store-type> 
    <sharing-enabled>true</sharing-enabled> 
  </session-descriptor> 
</weblogic-application>
访问http://localhost:7001/shoppingcart1/或http://localhost:7001/shoppingcart2/,
抛出以下异常:
java.lang.ClassCastException: com.servlets.shoppingCartItem cannot be cast to com.servlets.shoppingCartItem
这是为何呢?
原来是由于一个ear中有两个war包,可是由不一样的ClassLoader分别装载,war包中的类在各自Classloader中。
也就是说,虽然在本实验中两个war包中有一摸同样的类,可是JVM会认为它们是不同的类,所以会报出上面的错误。

5. 把两个war包中相同的类拿出来,打成jar包,放到[domain_name]\lib目录下,再从新部署ear包。
(1)把shoppingcart1.war和shoppingcart2.war包中相同的类解压出来,打成jar包:shoppingcart.jar。
(2)删除shoppingcart1.war和shoppingcart2.war包中相同的类,从新打成ear包。
(3)把shoppingcart.jar复制到[domain_name]\lib目录下。
(4)从新启动WebLogic Server,从新部署shoppingcart.ear。

6. 从新访问应用shoppingcart1和shoppingcart2。
(1)访问http://localhost:7001/shoppingcart1/,添加一些商品。
(2)访问http://localhost:7001/shoppingcart2/,添加另外一些商品。
(3)分别在shoppingcart1和shoppingcart2查看Session中的信息,发现显示了全部的商品信息。

 

这说明同一个ear中不一样的Web应用共享Session信息配置成功。 app

Project 下载:shoppingcart(2WarSessionShare).7z 
dom

参考文献:
1. http://hi.baidu.com/listlofusage/blog/item/d7568f31ac7d00ac5edf0ef1.html
2. https://forums.oracle.com/forums/thread.jspa?threadID=1010819
3. http://objectmix.com/weblogic/528128-sharing-session-across-web-applications-wl8-1-a.html
4. http://alexsunny.iteye.com/blog/41836
5. http://blog.csdn.net/yousuf007/article/details/5252604
6. http://bbs.middleware123.com/thread-705-1-1.html
7. http://www.renren.it/a/fuwuqiruanjian/Jboss/20100926/24584.html
8. http://www.iteye.com/topic/1117133
jsp

相关文章
相关标签/搜索