【发布时间】:2011-04-19 05:36:35
【问题描述】:
我有一个 Web 应用程序正在尝试从 Sun Application Server V9 迁移到 Glassfish V2.1.1
我使用 Netbeans 6.0.1 开发 App,它使用 JSP、SessionBeans 和 JDBC 连接 MySQL。
我已经取得了不错的进展,可以编译和部署应用程序了。到 Glassfish 好。 应用程序启动,我将我带到我的登录页面,在那里我可以正常登录。
但是,我可以看到,在呈现每个 JSP 页面时,我的所有 SessionBeans 都会重复调用 init() 和 destroy() 方法。
我的会话 Bean 扩展了 AbstractSessionBean
public class SessionBean1 extends AbstractSessionBean {
使用 Netbeans 调试工具,我找到了 LifecycleListener.attributeReplaced(HttpSessionBindingEvent event) 方法,该方法在我的 AbstractSessionBeans 上调用了 destroy() 和 init() 方法
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();
}
}
在 Netbeans 5.5 和 Sun Application Server V9 中,AbstractSessionBean 会话 Bean 工作正常,并且不会一直调用它们的 init() 和 destroy() 方法。
我检查了我的会话 Bean 是否在 faces-config.xml 中。
所以,我的感觉是,这是我对 Glassfish 2.1.1 的配置...
你能帮忙吗?
谢谢
附言
只是添加到这个......
我可以完全将 Netbeans 6.0.1 中的相同应用部署到:
Sun App Server V9 运行良好 使用会话 bean init() 方法 仅在 会话已创建
Glassfish V2.1.1 和会话 Bean init() 和 destroy() 方法获取 反复调用。
【问题讨论】:
-
只是为了添加...。我可以将 Netbeans 6.0.1 中的完全相同的应用程序部署到: - Sun App Server V9 并且它在会话中运行良好bean init() 方法仅在创建会话时调用一次 - Glassfish V2.1.1 和会话 Bean init() 和 destroy() 方法被重复调用。
标签: java jsp session glassfish