我们应该"放任"控制台吗?

wozuibt 05-07-04

用CMP的时候,一个findByPrimaryKey()没有找到PK时,就会抛出一个finderException(),weblogic控制台一大堆Exception信息;当create(PK),pk重复时,又是duplicateKeyException(),控制台又像翻浪一样,一大堆Exception信息!

不知道大家在做EJB的时候是怎么处理的?

wozuibt
2005-07-04 12:08

另外一点:我记得哪里说过通过try..catch..结构控制流程是一种很不好的做法,而EJB中,特别是CMP中经常用到的如findByPrimaryKey(),create()这些方法,就不再是偶尔抛一个异常了:
比如:客户要插入一条记录,当这条记录的关键字重复时,create()方法,或者是create()调用的方法(CMP自动生成的内部方法),就会抛出duplicateKeyException,我就会利用这个异常,再抛一次,让表现层catch这个异常,通知它(或这个客户)这个关键字重复了!
我个人感觉这就是在使用try..catch...控制流程,这种做法不是不好吗?百思不得其解,请大家指点........

banq
2005-07-04 13:01

可以关闭控制台输出。
或者使用catch这些Exception。

是否重复我是先查询后create,尽量避免duplicateKeyException。
findException是很难避免。不过这种抛出也是很少出现的,我不会在我的业务中使用这些Excetion。

findException一般可控的,因为ID主键一般是首先你从数据库查询出来给用户的,用户不会自己随便可以输入主键。

只是我的想法。

wozuibt
2005-07-04 17:17

to banq:
就拿用户登录的例子来说吧:
1. 当用户输入一个错误的用户名时,EJB facade里的判断用户名和密码的方法:
try{
local=home.findByPrimaryKey(username);//throw finderException
.....
}
catch(Exception ex){
throw new EJBException(ex);
}
2. 在表现层调用这个session bean的javaBean catch这个异常:
public boolean login(userName,password) throw Exception{
facade.login(userName,password);
}
3. login Action里面:
try{
userBean.login(userName,password);
}
catch(Exception ex){
errros.add("login",new ActionError("没有这个用户名");
return ...
}

就拿这段程序来说,应该怎么控制错误的用户信息,并返回给用户知道

banq
2005-07-04 21:19

哦,忘记了我的做法和你区别,一般查询我都是使用DAO实现的,也就是SLSB+DAO+JDBC,也建议你这样,除非有事务要求,否则不使用CMP的查询语句,很耗费内存。

2Go 1 2 下一页