良い質問だ、アリ
データベース例外をスローしたいのはわかっていますが、例外が発生した場合、ほとんどの場合、アプリケーションは初期状態を復元できないか、回復方法を知りません。そのため、実行時例外として処理する必要があります。データベース例外のいくつかの問題には、
- データベース接続の失敗
- クエリが間違っています
- テーブルまたは列が存在しません
上記のように、アプリケーションは初期状態を復元できません。初期状態を復元できると思われる場合は、アプリケーション例外を使用する必要があります。クライアントは、ビジネス メソッドによってスローされたのと同じアプリケーション例外を受け取ります。ビジネス メソッドによってスローされた正確な例外を取得できるようにする場合は、次の 2 つの選択肢があります。
- ビジネス デリゲート パターンを使用して EJB にアクセスする
ご存じのように、実行時例外は 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();
}
}
}
よろしく、