2012-04-24 8 views
1

私は最初からアプリケーションを設計しています。すでに存在するソリューションを使用して実現したいという要件が1つあります。アプリケーションを設定するための標準的なセッション層プロトコルはありますか?

構成情報を通信するためのトランスポートと方法をアプリケーションのライフサイクル全体にわたって統一したいと考えています。

これはどういう意味ですか?これは、ロード時にコンフィギュレーション用のファイルを使用し、その後のコンフィグレーション用にソケット通信を使用することは無駄であることを意味します。私は、すべての設定をアプリケーションに1つの方法で入力したいと思います。この導管は、アプリケーションの寿命を通して常に利用可能である。

これに加えて、私は自分自身をIPを使用しなければならないことに縛られたくありません。私は、System V共有メモリやIPCなど、好きな移送を使いたいと思っています。

何かありますか?私は自分自身を作成する必要がありますか?

+0

私はあなたがそれはあなたがソースコードの構成管理(すなわち、バージョンコントロール)の話をされるかもしれない印象を与えるとして、タイトルを変更したい場合があります示唆 –

+0

、感謝 - 更新。 – stackmate

+1

*標準についてはわかりませんが、あなたは[GSettings](http://developer.gnome.org/gio/2.32/GSettings.html)を探しているかもしれません。 – zwol

答えて

0

はのは、あなたのアプリケーションがmyApp呼ばれると仮定しましょう、と-cfg <...>コマンドライン...私は次のようにあなたが探している正確な機能を提供するとは思わないが、それは思考の余地を提供するかもしれませんオプションは、その構成のソースを指定するために使用されます。あなたは上記の

myApp -cfg /path/to/configuration/file.cfg

...次のオプションを可能性が明らかである:指定したファイルから設定を読み込みます。

myApp -cfg "exec#curl -sS http://configWebServer/path/to/file.cfg"

exec#接頭辞が指定されたコマンドを実行すべきことを指定します。コマンドが標準出力に書き込むことが期待されます。その標準出力は構成ファイルとして解析されます。

ちなみに、curlcat URLを表します。これは、HTTP(S)、FTP(S)、LDAPなどのさまざまなプロトコルを使用してファイルを取得できるオープンソースのユーティリティです。 -sSコマンドラインオプションcurlには、エラーメッセージ以外の診断メッセージは表示されません。これはおそらく必要なものです。

"exec#..."形式は、他の手段を使用して構成情報を取得する手段を提供します。たとえば、データベース、Subversionリポジトリなどからクエリを実行するスクリプトなどから、必要なものを探します。

また、次のバリエーションをサポートしたいかもしれません:共有ライブラリをロードします

myApp -cfg "shared_lib=foo#..."

fooと呼ばれ、パラメータとして「"...を渡して、その中のエントリポイント関数を呼び出すこと。共有ライブラリーの機能の1つが共有メモリーから構成情報を検索し、別の実装がリモート・プロシージャー呼び出しまたはソケット接続を介してそれを取得する可能性があります。

すべての異なる検索メカニズムには、のみがあります。構成データを(潜在的に大きい)文字列として取り出す責任。たとえば、-cfg /path/to/file.cfgメカニズムは、ファイルの内容全体を読み取り、文字列(またはおそらくstd::istream)として返します。その(潜在的に大きい)文字列は、 "実際の"設定パーサ(XML/ini/propertiesファイルのパーサなど)に渡されます。

私は上記の提案があなたの質問の半分の解決策を提供すると信じています。特に、任意のソースから構成データを検索するためのプラグイン・アーキテクチャーを提供します。プラグインは、シェル・コマンドまたは共用ライブラリーとして書き込むことができます。

質問のもう半分は、基本的には:「アプリケーションは、更新された構成データをどのように動的に取得できますか?」私はその要件に取り組んでいない。部分的に私は提供するエレガントなソリューションを持っていないため。また、構成データの再読込を引き起こす可能性があることを示していないため、

ところで、私はConfig4*と呼ばれるC++/Java構成パーサライブラリのメンテナーです。そのライブラリは、"exec#..."機能の実装を提供します。このような機能をどのように実装できるかを見るためにソースコードを調べたい場合に備えて、私は言います。 "shared_lib=foo#..."をサポートするために必要なコードは、"exec#..."をサポートするための既存のコードで簡単にモデル化できると思う。 "Config4 * Getting Started Guide"(PDFおよびHTML形式でWebサイトから入手可能)は、人々が悪質なコマンドを実行しようとするのを防ぐためのセキュリティメカニズムを含め、-cfg "exec#..."の機能に関する良い議論を提供します。 Component10 @

+0

私はこれがすべてで私の質問に答えるかわからない - と私はあなたの主なポイントは、あなたのパーサーライブラリのプラグでしたかしら;)。私は具体的には**すべての**設定が1つのコンジット経由でアプリケーションに入ることを望みます。あなたが上で述べたファイルは静的です。もしメソッドがそれらを "尾引き"して成長するのを見たいのであれば、解決策かもしれないより多くの設定を取り入れてください。 – stackmate

+0

あなたの質問には、次の2つの要件があるようです。(1)設定データにアクセスするために使用される技術をハードコード化しないこと。 (2)設定データが変更されたときに再アクセスするためのトリガーを有すること。私が提案した(1)の解決策は、プラグインアーキテクチャを使用することであり、その実装には2つのアプローチを提案しました。私は(2)のための解決策を持っていません、そして、私の意見では、あなたは(2)のためのあなたの要件の明確な説明を提供していません。私の提案した(1)の解決策は要件を満たしていないので、質問を編集して要件をより明確に示すことができます。 –

+0

新しい設定データがあるかどうかを確認するために、ファイルのテーリング(またはソケット接続の定期的なポーリング)が、アップデートを取得するための1つの方法です。ただし、アプリケーション内のスレッドを結び付けます。アプリケーションがシングルスレッドの場合、それは受け入れられないかもしれません。受信された信号が良いと思われるたびtuxudayからの提案は(おそらく更新)設定ファイルを再読み込みします。彼の提案があなたの要求を満たしていない理由を説明できますか? –

関連する問題