我有一个Web应用程序,我正试图从Sun Application Server V9迁移到Glassfish V2.1.1
我正在使用Netbeans 6.0.1开发App,它使用JSP,SessionBeans和JDBC连接到MySQL。
我取得了很好的进展,可以编译和部署App。去Glassfish OK。 应用程序启动,我将我带到登录页面,在那里我可以登录确定。
但是,我可以看到,在呈现每个JSP页面时,我的所有SessionBeans都会反复调用init()和destroy()方法。
我的会话Bean扩展了AbstractSessionBean
public class SessionBean1 extends AbstractSessionBean {
使用Netbeans调试工具我已经跟踪调用AbstractSessionBeans上的destroy()和init()方法的LifecycleListener.attributeReplaced(HttpSessionBindingEvent事件)方法
public void attributeReplaced(HttpSessionBindingEvent event) {
// If the old value is an AbstractSessionBean, notify it
Object value = event.getValue();
if ((value != null) && (value instanceof AbstractSessionBean)) {
((AbstractSessionBean) value).destroy();
}
// If the new value is an AbstractSessionBean, notify it
value = event.getSession().getAttribute(event.getName());
if ((value != null) && (value instanceof AbstractSessionBean)) {
((AbstractSessionBean) value).init();
}
}
// If the old value is an AbstractSessionBean, notify it
Object value = event.getValue();
if ((value != null) && (value instanceof AbstractSessionBean)) {
((AbstractSessionBean) value).destroy();
}
// If the new value is an AbstractSessionBean, notify it
value = event.getSession().getAttribute(event.getName());
if ((value != null) && (value instanceof AbstractSessionBean)) {
((AbstractSessionBean) value).init();
}
}
在Netbeans 5.5和Sun Application Server V9中,AbstractSessionBean会话Bean工作正常,并且不会一直调用它们的init()和destroy()方法。
我已经检查过我的会话Bean在faces-config.xml中。
所以,我的感觉是它是我对Glassfish 2.1.1的配置......
请帮忙吗?
由于
P.S。
只是为此添加....
我可以将Netbeans 6.0.1中的完全相同的应用部署到:
Sun App Server V9,它运行正常 使用会话bean init()方法 只有被召唤一次 会话已创建
Glassfish V2.1.1和会话Bean init()和destroy()方法获取 反复打电话。
答案 0 :(得分:1)
因此,每个请求都会启动一个新会话。这可能意味着客户端或服务器不支持cookie,或者Web应用程序没有正确实现URL重写,因为客户端已禁用cookie。
使用Firebug等工具跟踪HTTP请求/响应标头必须提供新的见解。在新的客户端 - 服务器会话的第一个请求中,服务器应该在响应中使用会话ID设置Set-Cookie
标头:
在同一客户端 - 服务器会话期间的所有后续请求中,客户端应使用相同会话ID在请求中设置Cookie
标头:
如果其中任何一个缺失或不同,那么您应该知道问题的根本原因。