0

ProjectWonderフレームワークを使用するWebObjectsアプリがあります。記憶が正しければ、Project Wonderを使い始める前は、アプリケーションを再起動せずにDB接続設定を変更することができたようです。数年前にプロジェクトWonderに移動した後、DB設定を動的に変更する機能が失われました。Project Wonderは、起動時に接続設定がWebObjectsプロパティとして既に設定されていることを想定しているようです。したがって、アプリの起動後にプロパティを変更しても影響はありません。当時、私たちはあまり戦いませんでした。DBが変更されたときにアプリを再起動するだけでも大したことではないと考えました。そのような変更が頻繁に発生することは、予想していなかったからです。

物事は何年にもわたって変化しており、DBを変更した後に再起動を要求することは、以前ほど合理的ではなくなりました。Project Wonder / WebObjectsで設定をキャッシュしているものを探してみましたが、まだ答えが見つかりませんでした。WebObjects /ProjectWonderアプリでデータベース設定を動的に変更できる人がいるかどうか疑問に思いました。

4

2 に答える 2

0

または、こちらの小さな指示に従うこともできます ;)

実行時に接続を変更するには、基本的にオブジェクトストアコーディネーターを設定する必要があります

次のように、カスタム オブジェクト ストア コーディネーターを作成します。

NSMutableDictionary<String, String> temp = new NSMutableDictionary<String, String>();
temp.put("URL", String.format("%s?useBundledJdbcInfo=true", url));
temp.put("username", username);
temp.put("password", password);
temp.put("name", name);

connectionDictionary=temp.immutableClone();

// Create a new Object store coordinator
objectStoreCoordinator = new ERXObjectStoreCoordinator();
ERXModelGroup.setModelGroupForObjectStoreCoordinator(
    objectStoreCoordinator, ERXModelGroup.defaultGroup()
);

// Set the model that you want to use to connect to multiple databases
EOAdaptor adaptor =ERXDatabaseContext.registeredDatabaseContextForModel(
    ERXModelGroup.defaultGroup().modelNamed("YourModelName"), 
    objectStoreCoordinator
).adaptorContext().adaptor();

// update the connection dictionary
adaptor.setConnectionDictionary(
    updateDictionary(adaptor.connectionDictionary(), 
    connectionDictionary)
);

これにより、選択したデータベースを指す新しい編集コンテキストを簡単に作成できます

ERXEC.newEditingContext(objectStoreCoordinator);

アプリケーションが複数のユーザーによって使用され、互いに干渉することなく複数の DB を切り替える必要がある場合は、共有編集コンテキストを使用しないことをお勧めします。

このように、オブジェクトストアコーディネーターを変更して、他の人もそのデータベースを指すようにすることを避けることができます (あまり面白くありません)。

于 2013-10-17T11:00:10.407 に答える
0

これは「昔の問題」や「現在 Project Wonder を使用している」問題ではないと思います。WOがJavaに移植されたときに挙動が変わったと思います。

理論的には、これができるはずです。実際には、それだけの価値があるほどうまく機能するとは思いません。WO と EOF のすべてのデータ構造は、遅延インスタンス化されます。データベースを切り替えたい場合は、古いデータベースを参照するすべてのオブジェクトを破棄する必要があります。つまり、すべてを破棄する必要があります。それらのほとんどを見つけてクリアすることは可能ですか? はい、それほど難しくありません。それらすべてを見つけることは可能ですか?そうでないかもしれない。

1 つには、Java は ObjC よりもはるかに動的ではありません。Java では多くのものが静的ブロックでインスタンス化されます。これらのクラスはすべて、EOModel が変更されたときに発生する通知に登録できます。彼らは皆、彼らに登録しましたか?おそらくそうではありません。

したがって、アプリケーションの状態の一部を取り除くことができ、新しいデータベースでいくつかのことを実行できるようになり、しばらくの間は機能する可能性がありますが、その後機能しなくなる可能性があります。その理由がわかるかもしれません。または、忌まわしきアプリを再起動することもできます....

于 2013-06-26T19:48:55.103 に答える