2011-07-29 12 views
3

2つ以上のクラスローダーとVMの場合にシングルトンを安全にコーディングする方法。この問題は次の場所で説明されています。http://java.sun.com/developer/technicalArticles/Programming/singletons/複数のクラスローダーとVMの場合のシングルトン

解決方法?

+0

特にどのような問題がありますか?クラスローダーのグループごとのシングルトン、またはJVMごとのシングルトン、またはJVMのクラスターごとのシングルトン? –

+0

複数のVMの意味は、vm間の通信が必要なことです。ドラゴンがいる! –

+0

ベストソリューション:[可変]シングルトンを避けてください。常に。 –

答えて

3

クラスローダー間でシングルトンを共有する場合は、共通の親がシングルトンをロードするか、各ClassLoaderに、クラスローダーで使用するシングルトンのクラスを明示的に定義させることができます。

+0

共有できるコード例ですか? – Ved

+0

hmmm。これが役立つかどうかは不明ですが、クラスローダーのロードとアンロードの例がここにあります。 http://vanillajava.blogspot.com/2011/07/java-secret-loading-and-unloading.htmlシングルトンを共有するには、クラスを親クラスローダがアクセスできるようにする必要があります。 loadClassメソッドをオーバーライドして、クラスローダー単位で選択したい場合は、このメソッドをオーバーライドできます。 –

2

この記事では、分散アプリケーションがシングルトンから離れるべきであることを明確に述べています。あなたがここで解決しようとしている特定の問題?また、アプリケーション実行中に決して変更されない真の定数を保持するシングルトンについては、 "シングルトン"の複数の "インスタンス"が問題になるべきではありません。他のケースでは、必要なクラスで構成を注入する方が良い(依存関係の注入方法)。

+0

はい、あなたの言うことに同意します。私は特定の問題を解決しようとはしていないが、これはむしろ理論的な質問だった – Ved

0

1)ネットワークソケットは、複数のVM

Port busy 8765 java.net.BindException: Address already in use 

2を存続)のであれば安全に本当に(これらのリソースに基づいて2つの以上のクラスローダとVMの場合はシングルトンをコーディング

WARNING: Creating a new instance of CacheManager using the diskStorePath 

を提出ん

1

注意:コンピュータに複数のインターフェイス(IP)がある場合、同じソケット(8765)をすべてにバインドすることができます(したがって、それはthaではありません)。簡単です)。ファイルを隠すことができる場合もありますが(例えば、マウントなど)

関連する問題