承接前兩篇(環境準備、Log4j 配置),本篇使用 JBuilder 內建 EJB Designer 以視覺化方式建立 Stateful Session Bean,自動生成 Bean 類、Local/Remote 介面、Home 介面代碼。
Trader,一路 OK。在右側 EJB Designer 視窗右鍵選單操作:
UserInfouserName (String)userAge (String)loginTime (String)showUserInfoHashMapString userName, String userAge, String loginTimepackage trader;
import javax.ejb.*;
import java.util.HashMap;
import org.apache.log4j.Logger;
public class UserInfoBean implements SessionBean {
private static final Logger _logger = Logger.getLogger(UserInfoBean.class);
private SessionContext sessionContext;
private String userName, userAge, loginTime;
public UserInfoBean() { try { jbInit(); } catch (Exception ex) { ex.printStackTrace(); } }
public void ejbCreate(String userName, String userAge, String loginTime) throws CreateException {
_logger.debug("Session Bean is Created.");
this.userName = userName; this.userAge = userAge; this.loginTime = loginTime;
}
public void ejbCreate() throws CreateException {}
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void setSessionContext(SessionContext ctx) { this.sessionContext = ctx; }
public HashMap showUserInfo() {
HashMap map = new HashMap();
map.put("userName", this.userName);
map.put("userAge", this.userAge);
map.put("loginTime", this.loginTime);
return map;
}
private void jbInit() throws Exception {}
}
package trader;
import javax.ejb.EJBLocalObject;
import java.util.HashMap;
public interface UserInfoLocal extends EJBLocalObject {
public HashMap showUserInfo();
}
package trader;
import javax.ejb.*;
public interface UserInfoLocalHome extends EJBLocalHome {
public UserInfoLocal create() throws CreateException;
public UserInfoLocal create(String userName, String userAge, String loginTime) throws CreateException;
}
| 決策點 | 選擇 | 理由 |
|---|---|---|
| 介面類型 | Local | 同 JVM 內調用,避免 RMI 序列化開銷,效能優於 Remote |
| Session 類型 | Stateful | 需保持用戶會話狀態(userName, userAge, loginTime) |
| ejbCreate 參數 | 三個 String | 對應前端傳入的用戶資料,初始化 Bean 狀態 |
| 日誌框架 | Log4j | 專業級日誌,配置靈活,已在前篇整合 |
EJB Designer 將繁瑣的部署描述符(ejb-jar.xml)、介面代碼、實作骨架一次生成,開發者專注於業務邏輯(showUserInfo())。下一篇將建立測試客戶端、打包部署驗證。