クラス定義のコンパイルで、「エラー #5368:クラス名 のオブジェクトが、1プロセスでインスタンス化されています。」のエラーが出ます
これは InterSystems FAQ サイトの記事です。
こちらは、コンパイル時に既にそのクラスのインスタンスを開いている場合に起こるエラーです。
対処方としては以下の2つの方法があります。
- インスタンスを開いているプロセスまたはアプリケーションを終了する
- スタジオのビルドメニュのコンパイルオプション:コンパイルフラグ “使用中のクラスをコンパイル” をチェックしコンパイルを行う
インスタンス化しているプロセスを特定したい場合は、以下のサンプルルーチンをお試しください。
/// Test.mac
search(classname) public {
Set pid=""
Set pid=$order(^$Job(pid))
While pid'="" {
Do checkVars(pid,classname)
Set pid=$Order(^$Job(pid))
}
} checkVars(pid,string) {
Set $ztrap="err"
Set var=""
For {
Set var=$zu(88,1,pid,var) q:var=""
Set val=$zu(88,2,pid,var)
If val[string {
Write !,pid,":",var," = ",val,!
}
}
Quit
err
Set $ztrap=""
Quit
}
こちらのサンプルルーチンは、ユーザプロセスのローカル変数を検索して指定したクラスを使用しているか確認します。
≪実行例≫
USER>do search^Test("Test.Person")
2352:p1 = 1@Test.Person
6324:p2 = 2@Test.Person
※この場合は、Pid=2352 と Pid=6324 のプロセスが Test.Person を使用しています。