ページをマウントするウィケット Web アプリケーションがあり、ユーザーはアプリケーションを開始する「モード」を選択できます。つまり、開発目的のモックと、テスト/QA/本番環境の本番環境です。明らかに、これは開発目的で使用される機能にすぎません。とにかく、マウントされたページは、ラジオボタンの形で2つの選択肢をユーザーに提示するだけです. バックエンド コードは Spring Application Context を完全にリロードし、必要に応じて異なる Bean のセットを選択できるようにします。たとえば、モック スプリング プロファイルを選択すると、多くのセキュリティ Bean とキャッシュ Bean が不足します。
これは問題なく動作しているように見えますが、問題は、Spring は問題なくリロードしますが、Wicket はそうではないことです。次のことが起こるように、何らかの方法で古い Bean をキャッシュします。まず、次のテストコードを検討してください。
public class MyPage extends Page {
@Inject
MyBean myBean;
public MyPage() {
super("id");
myBean.getData();
}
Springbeans の 2 つの利用可能なセットは両方とも MyBean を宣言します。モックは getData が呼び出されると静的データを返しますが、プロダクションは呼び出しを WebService エンドポイントに転送し、フィルタリングなどを行います。
アプリケーションが起動し、ラジオボタン ページからモック プロファイルを選択すると、モック データが読み込まれます。ただし、radio-button-page に戻って production プロファイルを選択すると、問題が表示されます。
WebApplication.get().getApplicationContext().getBean("myBean"); //returns the production instance
//Debugging the myBean instance in myPage shows it to be the mock instance
そのため、Spring が問題をリフレッシュし、古い Bean を削除して新しいセットを作成したにもかかわらず、Wicket は古い Bean バージョンを使用します。これをどのように回避しますか? 検討した 2 つのオプションは次のとおりです。
「改札内のすべて」をリフレッシュ。私はその魔法をよく理解していないので、これをどのように行うかはわかりません. 原則として、WebApplication.get().refreshApplicationContext() または Session.clean() などを実行したいと考えていますが、これまでに試したことはありません。
回避策として環境プロパティを使用するなど、WebApplication 全体を再起動します。このアプローチの問題点は、実行しているサーバーを知らずにプログラムでアプリケーションを再起動することです。つまり、Jetty を実行するローカルで、アプリケーションが JBoss で実行される開発環境で動作させたいのです。
どんなアイデアでも大歓迎です:)