Java からスローされた例外は、javaexpt クラスに発生したオブジェクト指向 COBOL の例外として、COBOL に返されます。デフォルトでは、COBOL ランタイム システムは例外を受信すると、その旨を警告するメッセージを表示して終了します。あるいは、COBOL プログラムにイベント ハンドラーを追加して、例外をトラップすることも可能です。
Java 例外をトラップする手順は次のとおりです。
repository. ... class JavaExceptionManager as "javaexpt" class ExceptionManager as "exptnmgr" class Callback as "callback" class EntryCallback as "entrycll" ...
invoke Callback "new" using anObject z"methodName" returning aHandler
EntryCallback の場合、次のように記述します。
invoke EntryCallback "new" using z"entryPointname" returning aHandler
invoke ExceptionManager "register" using JavaExceptionManager aHandler
以上の手順を実施すると、オブジェクト指向 COBOL の Java ドメインを経由して呼び出している、Java クラスからスローされた Java 例外が、作成した例外ハンドラーに常に送信されるようになります。
Java プログラムからスローされた例外をキャッチする COBOL プログラムの例を次に示します。
$set ooctrl (+p-f) program-id. ExceptionCatcher. class-control. SimpleClass is class "$JAVA$SimpleClass" EntryCallback is class "entrycll" JavaExceptionManager is class "javaexpt" ExceptionManager is class "exptnmgr" . working-storage section. 01 theInstance object reference. 01 wsCallback object reference. local-storage section. 01 filler pic x. *> dummy storage to allow the local entry *> point to be used for the callback linkage section. 01 lnkException object reference. procedure division. *>---Set up Exception handler invoke EntryCallback "new" using z"JException" returning wsCallback invoke ExceptionManager "register" using javaexceptionmanager wsCallback *>---Instantiate the class invoke SimpleClass "new" returning theInstance display "instantiated" invoke theInstance "TestException" display "excepted" stop run. entry "Jexception" using lnkException. invoke lnkException "display" .
このプログラムではローカル記憶域節によって再帰呼出しが可能になっており、COBOL ランタイム システムが EntryCallback を再帰的に呼び出します。ローカル記憶域節がないと、ランタイム システム エラーの原因となります。呼び出される SimpleClass の Java コードは次のとおりです。
import java.lang.* ; public class SimpleClass { public SimpleClass() { } public void TestException() throws Exception { Exception e = new Exception ("Test error" ); throw e; } }
具体的な cobinvoke_ 関数の種類は、COBOL 開発システム インストールの help\mfcobol.docs.zip (Windows) or docs/mfcobol.docs.zip (UNIX) にある「Java Run-time Class Library Reference」を参照してください。