好问题,蚂蚁
我知道您想抛出数据库异常,但是当它发生时,应用程序在大多数情况下无法恢复其初始状态,或者它不知道如何从中恢复。所以应该作为运行时异常处理。数据库异常中的一些问题包括
上面您看到应用程序无法恢复其初始状态。如果您认为有可能恢复其初始状态,那么您应该使用应用程序异常。客户端将获得您的业务方法引发的相同应用程序异常。如果您希望能够获得业务方法抛出的确切异常,您有两种选择:
如您所知,运行时异常由 EJBException 包装,因此您应该使用类似
假设您有这个无状态会话 bean
@Stateless
public class BeanImpl implements Bean {
public void doSomething() {
try {
// some code
} catch(SomeException e) {
throw new EJBException(e);
}
}
}
因此,您通过业务委托包装您的会话 bean
public class BeamBusinessDelegate implements Bean {
// your stateless session bean goes here
private Bean bean;
public BeamImpl() {
InitialContext i = new InitialContext();
bean = (Bean) i.lookup(<GLOBAL_JNDI_ADDRESS_OR_RELATIVE_ENVIRONMENT_NAMING_CONTEXT_ADDRESS>);
}
public void doSomething() {
try {
bean.doSomething()
} catch(EJBException e) {
throw e.getCause();
}
}
}
或者您可以根据需要扩展 EJBException
public class DatabaseException extends EJBException {
}
所以在你的商业方法中
@Stateless
public class BeanImpl implements Bean {
public void doSomething() {
try {
// some code
} catch(SomeException e) {
throw new DatabaseException();
}
}
}
问候,