【发布时间】:2011-12-25 16:15:56
【问题描述】:
我有 3 个 EAR 包,它们组合在一起构成了一个巨大的 Web Java 应用程序。是否可以将 bean 配置到包中以在它们之间共享会话 id 数据。我的想法是开发一个登录表单,使用会话 ID 将用户注册到数据库表中。每次用户浏览应用程序时,他们的会话 ID 都用于识别用户。当用户在不同的 EAR 包和 bean 之间切换时,棘手的部分就出现了。 session id 会改变,其他 bean 不会知道新的 session id 是什么。有没有办法将 bean 配置到 EAR 包中以共享包含会话 id 的数据。
我创建了两个相同的 EAR 包,并在每个包中放置了 context.xml 文件。这是文件结构:
SR_57
├── pom.xml
├── SR_57-ear
│ ├── pom.xml
│ ├── src
│ │ └── main
│ │ └── application
│ │ └── META-INF
│ │ └── MANIFEST.MF
│ └── target
│ ├── application.xml
│ ├── maven-archiver
│ │ └── pom.properties
│ ├── SR_57-ear-1.0-SNAPSHOT
│ │ ├── META-INF
│ │ │ ├── application.xml
│ │ │ └── MANIFEST.MF
│ │ ├── SR_57-ejb-1.0-SNAPSHOT.jar
│ │ └── SR_57-web-1.0-SNAPSHOT.war
│ └── SR_57-ear-1.0-SNAPSHOT.ear
├── SR_57-ejb
│ ├── pom.xml
│ ├── src
│ │ ├── main
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ └── SR_57
│ │ │ └── resources
│ │ │ └── META-INF
│ │ │ └── MANIFEST.MF
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── SR_57
│ └── target
│ ├── classes
│ │ └── META-INF
│ │ └── MANIFEST.MF
│ ├── endorsed
│ │ └── javaee-endorsed-api-6.0.jar
│ ├── maven-archiver
│ │ └── pom.properties
│ ├── SR_57-ejb-1.0-SNAPSHOT.jar
│ └── surefire
└── SR_57-web
├── faces-config.NavData
├── nb-configuration.xml
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── SR_57
│ │ │ └── userCheck.java
│ │ ├── resources
│ │ └── webapp
│ │ ├── home.xhtml
│ │ ├── index.html
│ │ ├── resources
│ │ │ ├── css
│ │ │ │ ├── sr_style.css
│ │ │ │ └── style.css
│ │ │ ├── images
│ │ │ │ ├── 1.jpg
│ │ │ │ ├── 2.jpg
│ │ │ │ ├── 3.jpg
│ │ │ │ ├── 4.jpg
│ │ │ │ ├── 5.jpg
│ │ │ │ ├── 6.jpg
│ │ │ │ ├── 7.jpg
│ │ │ │ ├── bg_1.jpg
│ │ │ │ ├── bg.jpg
│ │ │ │ ├── overlay_1.png
│ │ │ │ ├── overlay.png
│ │ │ │ ├── title_1.png
│ │ │ │ └── title.png
│ │ │ └── js
│ │ │ ├── ChunkFive_400.font.js
│ │ │ ├── cufon-yui.js
│ │ │ ├── jquery.easing.1.3.js
│ │ │ └── jquery.min.js
│ │ ├── userNav.xhtml
│ │ └── WEB-INF
│ │ ├── context.xml
│ │ ├── faces-config.xml
│ │ ├── java.sql.Driver
│ │ └── web.xml
│ └── test
│ └── java
│ └── com
│ └── SR_57
└── target
├── classes
│ └── com
│ └── SR_57
│ └── userCheck.class
├── endorsed
│ └── javaee-endorsed-api-6.0.jar
├── generated-sources
│ └── annotations
├── maven-archiver
│ └── pom.properties
├── SR_57-web-1.0-SNAPSHOT
│ ├── home.xhtml
│ ├── index.html
│ ├── META-INF
│ ├── resources
│ │ ├── css
│ │ │ ├── sr_style.css
│ │ │ └── style.css
│ │ ├── images
│ │ │ ├── 1.jpg
│ │ │ ├── 2.jpg
│ │ │ ├── 3.jpg
│ │ │ ├── 4.jpg
│ │ │ ├── 5.jpg
│ │ │ ├── 6.jpg
│ │ │ ├── 7.jpg
│ │ │ ├── bg_1.jpg
│ │ │ ├── bg.jpg
│ │ │ ├── overlay_1.png
│ │ │ ├── overlay.png
│ │ │ ├── title_1.png
│ │ │ └── title.png
│ │ └── js
│ │ ├── ChunkFive_400.font.js
│ │ ├── cufon-yui.js
│ │ ├── jquery.easing.1.3.js
│ │ └── jquery.min.js
│ ├── userNav.xhtml
│ └── WEB-INF
│ ├── classes
│ │ └── com
│ │ └── SR_57
│ │ └── userCheck.class
│ ├── context.xml
│ ├── faces-config.xml
│ └── web.xml
├── SR_57-web-1.0-SNAPSHOT.war
└── surefire
64 directories, 75 files
我将 context.xml 文件放入 WEB-INF 目录并添加了这一行:
<?xml version="1.0" encoding="UTF-8"?>
<SessionCookie path="/" />
我添加了一个 java 代码,它从 bean 中获取 cookie 编号并将它们写入数据库。然后我运行购买的 EAR 包,看看它们是否会共享一个会话 ID。事实证明,来自一个客户端和一个浏览器的 cookie id 是不同的。配置不起作用。我使用 JBoss 7.1.0
也许我弄错了必须放置 context.xml 文件的目录?
【问题讨论】: