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 クラスの以前の状態が失われることが予想されます。そうではないようです。
持続性の特性と限界を知りません。あるいは、それらを知ることが重要かどうかさえも知りません。他の誰かがこれに光を当てることができますか?