サンプル 7 では、デッドロックを起こしやすい状況と、EJB エンジンがデッドロックを検出し、解除する方法について説明しています。Loan は、ある固定期間の間だけ存在します。Customer が期間内に Loan を支払わない場合は、Customer がまだ分割で支払いを行っている場合でも Loan は不履行になります。Loan が期限までにすべて返済されない場合、Loan は Loan.ejbRemove において Customer の信用格付けを格下げします。しかし、Customer によって Loan の支払いが行われると同時に Loan による信用格付けの格下げが実行されると、デッドロック状況が発生します。
サンプルでは、デッドロックを管理する場所が 2 か所あります。
DeadlockExceptions は LoanBean.payInstallment メソッドの throws 節でチェック済みの例外として宣言されます。これによって、EJB エンジンはデッドロック例外を変更しないで処理を行います。これらの宣言を使用しない場合、例外は java.rmi.RemoteExceptions にラップされます。
DeadlockExceptions は、CustomerBean.payInstallment メソッドで調べられ、無視されます。結果として、Customer の信用格付けを更新するための呼び出しが最終的に実行され、Loan を不履行にして削除できます。次回 Customer が Loan を支払うときに、NoSuchObjectException が検出されます。ここで、Customer は、Loan の期限が切れていることを知らされ、支払いが停止されます。