Petstore源码记纵记(3)-商业逻辑处理(下)
( 欧宣修 )
图文并茂版请参考
http://www.javatwo.net/JavaPaper/Petstore-3_business_logic.pdf
接续上期...
我们已了解SignOnFilter在Web tier处理登入工作的步骤,它需要透过EJB tier从数据库读取资料进行比对,所以接下来探讨在EJB tier的运作情形,从图14、15可找出实际对应的EJB,从图上面可知此EJB的属性是Local Stateless
Session Bean,这很少见,大部份的书介绍到Local Bean的用法都用在Entity Bean,由此可知Local Bean的用法亦可用在Session Bean。
SignOnEJB,源码在Petstore_home\src\components\signon\src\com\sun\j2ee\blueprints\signon\ejb\SignOnEJB.java,请读者顺便加上侦察程序代码:
public class SignOnEJB implements SessionBean {
private static final String USER_HOME_ENV_NAME =
"java:comp/env/ejb/local/User";
private InitialContext ic = null;
private UserLocalHome ulh = null;
public void ejbCreate() throws CreateException {
try {
ic = new InitialContext();
//取得UserLocalHome Reference,它是代表使用者基本资料的Local Entity Bean
ulh = (UserLocalHome) ic.lookup(USER_HOME_ENV_NAME);
} catch (NamingException ne) {
throw new EJBException("SignOnEJB Got naming exception! " +
ne.getMessage());
}
}
/**
*此函数由SignOnFilter呼叫,依使用者帐号找出对应的User实体
*(instance),然后呼叫User实体的密码比对函数-user.matchPassword()
* business method used to check if a user is allowed to sign on
*/
public boolean authenticate(String userName, String password) {
//请加入侦察程序代码,方便稍候程序验证
System.out.println("SignOnEJB执行authenticate()进行使用者验证
userName="+userName+", password="+password);
try {
UserLocal user = ulh.findByPrimaryKey(userName);
return user.matchPassword(password);
} catch (FinderException fe) {
return false; // User not found, so authentication failed.
}
}
以下略...
图16 SignOnEJB的EJB Reference
UserEJB,源码在
Petstore_home\src\components\signon\src\com\sun\j2ee\blueprints\signon\user\ejb\






