問題の要約:Web コンソールで、ExtrinsicObject を作成して ExtrinsicObject 以外の Cincept の下にある Concept を選択した場合、正しく作成できたように見えますが、実はエラーが発生しています。 ExternalLink を作成して ExternalLink 以外の Concept の下にある Concept を選択した場合も、同じ問題が発生します。
このエラーは、サーバーログに NullPointerException として表示されます。
Concept が RegistryObject の下にある別のサブコンセプトである場合は、もっとも大きな影響として、作成したはずの新しいオブジェクトを検索しても見つからないという現象が発生します。Concept が ObjectType 以外の ClassificationScheme の下にある場合は、データベースが壊れています。この場合、サーバーを再起動するとランタイムエラー (InvocationTargetException ) が発生します。
オブジェクト型の Concept は、ExtrinsicObject または ExternalLink の Concept 内のサブコンセプトでなくてはなりませんが、Web コンソールはこの要件を強制しません。
回避策:管理ツールを使用して、不正な Concept を使用しているオブジェクト (複数の場合もある) を見つけ出します。select コマンドを使用してオブジェクトを見つけ、rm コマンドを使用してこれらを削除します。このタスクには、次の手順を実行します。
『Service Registry 3 2005Q4 管理ガイド』の「レジストリ用 Application Server ドメインを停止および再起動する方法」にある説明に従って、Service Registry を再起動します。
レジストリ管理者または壊れたデータベースの所有者のどちらかとして、『Service Registry 3 2005Q4 管理ガイド』の「管理ツールの起動」にある説明に従って、管理ツールを起動します。
次のように入力して、データベースの最上位に移動します。
admin> cd / |
select コマンドを使用して、削除するオブジェクトを表示します。レジストリ管理者としてツールを起動した場合は、次のコマンドを使用します (すべてを 1 行に記述)。
admin> select ro.* FROM RegistryObject ro, ClassificationNode cn WHERE ro.objectType = cn.id AND NOT ( cn.path = '/urn:oasis:names:tc:ebxml-regrep:classificationScheme:ObjectType/RegistryObject' or cn.path like '/urn:oasis:names:tc:ebxml-regrep:classificationScheme:ObjectType/RegistryObject/%' ) |
オブジェクトの所有者としてツールを起動した場合は、次のコマンドを使用します (すべてを 1 行に記述)。
admin> select ro.* FROM RegistryObject ro, ClassificationNode cn, AffectedObject ao, AuditableEvent ae WHERE ro.objectType = cn.id AND ae.user_ = $currentUser AND ao.id = ro.id AND ao.eventId = ae.id AND NOT ( cn.path = '/urn:oasis:names:tc:ebxml-regrep:classificationScheme:ObjectType/RegistryObject' or cn.path like '/urn:oasis:names:tc:ebxml-regrep:classificationScheme:ObjectType/RegistryObject/%' ) |
rm コマンドを使用して、オブジェクトを削除します。削除する各オブジェクトの URN を、次のように指定します。
admin> rm urn1 urn2 ... |
もう一度 select コマンドを実行して、オブジェクトが Registry 内に残っていないことを確認します。