1

XPages で使用する Java 設計要素に問題があります。

次の単純な XPage を検討してください。

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

    <xp:button value="Go" id="button1"></xp:button>
    <xp:br></xp:br>
    <xp:br></xp:br>
    <xp:br></xp:br>
    <xp:text escape="true" id="computedField1">
        <xp:this.value><![CDATA[#{javascript:importPackage(PACKAGE_NAME_REDACTED);
        TESTStatic.getValue();}]]></xp:this.value>
    </xp:text>
</xp:view>

ボタンと計算フィールドを備えた単純な XPage を配置するだけです。計算フィールドの値は、静的メソッドの呼び出しの結果です。

Java 設計要素のコードは次のとおりです。

package PACKAGE_NAME_REDACTED;

public class TESTStatic {

public static String value;

static {
    System.out.println("Running static initialiser");
    value = "fred";
}

public static String getValue() {
    return value;
}

}

私が理解に苦しむのはこれです。Xpage が呼び出されると、静的初期化子が実行され、サーバー コンソール ログで結果を確認できます。ただし、ページが再度実行された場合、静的初期化子は再度実行されず、少なくともクラスの状態が保持されていることを示しています。これは、計算されたフィールドの値が同じままであることによって裏付けられています。しばらく放っておくとJavaクラスの状態がクリアされたようで、静的イニシャライザが再び実行されるようです。

したがって、一度ロードされたクラスはある程度永続的であると想定しています。しかし、Xpage を再度実行しているので、Java クラスの以前の状態が失われることが予想されます。そうではないようです。

持続性の特性と限界を知りません。あるいは、それらを知ることが重要かどうかさえも知りません。他の誰かがこれに光を当てることができますか?

4

1 に答える 1

2

静的変数またはクラスは、現在実行中のアプリケーションのインスタンスに対して有効であり、アプリケーションがタイムアウトしない限り存在します。そのため、XPage がロードされるたびにコンストラクターが呼び出されるのではなく、1 回だけ呼び出されます。

静的変数はアプリケーション全体で有効であるため、静的変数を使用してセッション スコープのマネージド Bean を「中断」できます。

于 2012-12-06T13:18:26.563 に答える