不同jsp訪問同一個stateful session bean的困惑

iter發表於2004-02-18
jsp1訪問一個SFSB,比如就用counter,第一次返回1,重新整理頁面第二次返回2,。。3,456,的確是儲存了state
這是用另外一個jsp2.jsp,裡面程式碼與jsp1完全相同,這時候第一次返回是多少???
兩個頁面在同一個web container中的sessionid是一樣。

竟然是不是記憶下上次的狀態而是從1開始,然後遞增。。。

Why??


//bean code
package com.test;

import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.ejb.CreateException;

public class CounterBean
implements SessionBean {
SessionContext sessionContext;
private int i = 0;
public void ejbCreate() throws CreateException {
log("counter create");
}

public void ejbRemove() {
log("remove");
}

public void ejbActivate() {
log("activate");
}

public void ejbPassivate() {
log("passivate");
}

public void setSessionContext(SessionContext sessionContext) {
this.sessionContext = sessionContext;
}

public int count() {
log("counter called");
return ++i;
}

public void log(String s){
System.out.println(s);
}
}


//jsp code
<%@ page import="com.test.*" %>
<%@ page import="javax.ejb.*" %>
<%@ page import="java.util.*" %>
<%@ page import="javax.naming.*" %>
<%@ page import="javax.rmi.PortableRemoteObject" %>
<%@ page import="java.rmi.RemoteException" %>

<%!
private Counter counter = null;

public void jspInit() {
try {

InitialContext ic = new InitialContext();
Object objRef = ic.lookup("Counter");
if(objRef==null)
System.out.println("object is null");
else
System.out.println("object is not null");
CounterHome home = (CounterHome)PortableRemoteObject.narrow(objRef, CounterHome.class);
System.out.println("aaaa");
counter = home.create();
System.out.println("bbb");

} catch (RemoteException ex) {
System.out.println("Couldn't create bean."+ ex.getMessage());
} catch (CreateException ex) {
System.out.println("Couldn't create bean."+ ex.getMessage());
} catch (NamingException ex) {
System.out.println("Unable to lookup home"+ ex.getMessage());
}
}

public void jspDestroy() {
counter = null;
}
%>
<%=counter.count()%>

比如當前jsp1.jsp返回10,在另外一臺機器上測試,同樣一個頁面竟然從11開始,而不是從一開始,問題出在哪裡?
如果是這樣,那麼stateful session bean的狀態和http session還是有很大的不同,
http session可以追綜同一個sessionid下的狀態,

而sfsb可以獲得同一個程式全部訪問的狀態(包括不同機器,不同http session的狀態),如果是不同app訪問同一sfsb 則狀態卻不儲存。

那位兄弟解釋一下,tks

相關文章