Glassfish 2.1.1 - 会话Bean反复调用init()和destroy()

时间:2010-09-30 08:00:47

标签: java jsp session glassfish

我有一个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()方法获取 反复打电话。

1 个答案:

答案 0 :(得分:1)

因此,每个请求都会启动一个新会话。这可能意味着客户端或服务器不支持cookie,或者Web应用程序没有正确实现URL重写,因为客户端已禁用cookie。

使用Firebug等工具跟踪HTTP请求/响应标头必须提供新的见解。在新的客户端 - 服务器会话的第一个请求中,服务器应该在响应中使用会话ID设置Set-Cookie标头:

alt text


在同一客户端 - 服务器会话期间的所有后续请求中,客户端应使用相同会话ID在请求中设置Cookie标头:

alt text


如果其中任何一个缺失或不同,那么您应该知道问题的根本原因。