2

Jboss 7.1.1.final を使用しており、JMS を多用するアプリケーションを使用しています。いくつかのパフォーマンス テストを行った後、特定の量のメッセージに達すると、十分なキュー セッションがないため、アプリケーションが失敗し始めることがわかりました。

調査の結果、この JMS 属性は jboss バージョン 7.1.2 でのみ公開されていることがわかりました (こちらを参照)。

法的な理由により、現在このバージョン (または修正された特定のビルド) を使用できないため、それを変更する他の唯一の方法は、リフレクションを使用することです。そこで、Jboss のソース コードをダウンロードして、試してみましたが、いくつか質問があります。

まず最初に、必要なクラスorg.jboss.as.messaging.CommonAttributesが実際にはインターフェイスであり、次の行があることを発見しました。

 SimpleAttributeDefinition CONNECTION_THREAD_POOL_MAX_SIZE = new SimpleAttributeDefinition("thread-pool-max-size",
        new ModelNode().set(HornetQClient.DEFAULT_THREAD_POOL_MAX_SIZE), ModelType.INT,  true, MeasurementUnit.NONE);
  1. クラスをロードするために必要なclassLoaderClassLoader.getSystemClassLoader()を教えてくれますか?
  2. リフレクションを使用してインターフェイス フィールド値を設定するにはどうすればよいですか? (Field.set()メソッドにはオブジェクトインスタンスが必要であり、それはインターフェイスであるため、インスタンス化できません)
4

1 に答える 1

3

あなたはこのコードについて話している。私はあなたを失望させなければなりません:インターフェースにはフィールドがまったくありません。それらにはメソッド宣言のみがあり、実装はありません。

実際にpublic static final表示されるのは、インターフェイス本体内で定義された定数です(これらのキーワードはすべて、インターフェイス内の「フィールド」に対して暗黙的です)。ただし、インターフェイスはそれらの名前空間としてのみ使用され、実際のフィールドではありません。このようなインターフェースを実装するクラスは、これらのフィールドを継承せず、独自の変数コピーを持っています。それらは単なる定数です。

そうは言っても、少なくともこのインターフェースでは何もできません。

于 2012-06-17T11:16:42.430 に答える