4

静電界で問題が発生します。根本的な原因は静的フィールドのスコープに違いないと思います。

このプロジェクトはApacheservicemixに基づいており、多くのサブプロジェクトで構成されています。

サブプロジェクト「A」では、クラス「Registration」に静的リストフィールド「reg」を定義し、「add」や「getAll」などのフィールドを操作する静的メソッドを定義しました。サブプロジェクトAがデプロイされると、プロジェクトの名前「A」が登録用の静的リストに追加されます。

問題は、サブプロジェクト「B」に関しては、サブプロジェクト「B」がデプロイされているときに、その名前をまったく同じ静的リストに追加して登録することです。しかし、静的メソッドgetAllを呼び出すか、「Registration」を追加すると、sub-projectBの「reg」はsub-projectAの「reg」とはまったく異なるように見えます。そのため、登録機能は動作しません。

それで、私は1つの基本的な質問をしたいと思います、静的フィールドの範囲は何ですか?JVMまたは他の何かで有効ですか?

ご協力いただきありがとうございます

4

1 に答える 1

9

スタティックのスコープはグローバルであり、所有するクラスローダー内にあります。JVMは、複数のクラスローダーを作成し、新しいクラスローダーのそれぞれにクラスの個別のインスタンスをロードできます。

スタティックはJVMごとにグローバルではなく、クラスローダーごとにグローバルです。静的フィールドを持つクラスが別のクラスローダーにロードされている場合、その静的メンバーは別のクラスローダー内に表示されません。

プロジェクトAとプロジェクトBはどのように展開されますか?それらは同じクラスローダーにありますか?

私はservicemixに精通していませんが、Java EEアプリが同じアプリの異なるバージョンを異なるクラスローダーにデプロイするのと同じように、別々のアプリを別々のクラスローダーにデプロイするので、アプリ1.0とアプリ1.1を並べて実行できます。側、そしてそれらはお互いに影響を与えません。

これは仕様によるものです。

この場合、共有状態を維持するために独立したものが必要です。(例:データベース)

于 2012-05-23T03:18:40.687 に答える