Wicket の
調べていた
確認が
使ってみた
参考
何ができるのか ?
以下、
Wicket Inspector Wicket が
Session に 保持している オブジェクトを 2つの View で 参照する ことができます。 Active sessions
Wicket のDatastore の 状況を 確認できます。 StatelessChecker
Page がStateless か を 検証する IComponentOnBeforeRenderListener の 実装クラスが 含まれています。
インストール と 設定方法
前提. 使用している Wicket Version
- Wicket 7.5
<dependency> <groupId>org.apache.wicket</groupId> <artifactId>wicket-core</artifactId> <version>7.5.0</version> </dependency>
pom.xml に Dependency を 追加する
<!-- https://mvnrepository.com/artifact/org.apache.wicket/wicket-devutils --> <dependency> <groupId>org.apache.wicket</groupId> <artifactId>wicket-devutils</artifactId> <version>7.5.0</version> </dependency>
Application クラスで ページを マウントする
以下、
// configure Logger of MongoDB if (usesDevelopmentConfig()) { // ----------------------------------- // mount Dev utils Page // ------- DebugDiskDataStore.register(this); mountPage("wicket/internal/debug/utils", DevUtilsPage.class); // ----------------------------------- // add StatelessChecker // ------- getComponentPostOnBeforeRenderListeners().add(new StatelessChecker()); }
説明1
のDebugDiskDataStore.register(this);
内の 処理は、 以下の 通りです。 DiskStore のpublic static void register(Application application) { application.setPageManagerProvider(new DebugPageManagerProvider(application)); ((WebApplication)application).mountPage("wicket/internal/debug/diskDataStore", DiskStoreBrowserPage.class); }
閲覧用途で、 DebugPageManagerProvider を 設定してから、
DiskStoreBrowserPage を、wicket/internal/debug/diskDataStore
にマウントして おります。
DebugPageManagerProvider を設定なしに mount した ところ、
ClassCastException が発生しました。 ! java.lang.ClassCastException: org.apache.wicket.DefaultPageManagerProvider cannot be cast to org.apache.wicket.devutils.diskstore.DebugPageManagerProvider ! at org.apache.wicket.devutils.diskstore.browser.DataStoreHelper.getDataStore(DataStoreHelper.java:38) ! at org.apache.wicket.devutils.diskstore.browser.SessionsProviderModel.load(SessionsProviderModel.java:40) ! at org.apache.wicket.devutils.diskstore.browser.SessionsProviderModel.load(SessionsProviderModel.java:31) ! at org.apache.wicket.model.LoadableDetachableModel.getObject(LoadableDetachableModel.java:135) ! at org.apache.wicket.markup.html.form.AbstractChoice.getChoices(AbstractChoice.java:230) ! at org.apache.wicket.markup.html.form.AbstractChoice.onComponentTagBody(AbstractChoice.java:376) ! at org.apache.wicket.markup.html.panel.DefaultMarkupSourcingStrategy.onComponentTagBody(DefaultMarkupSourcingStrategy.java:70) ! at org.apache.wicket.Component.internalRenderComponent(Component.java:2613)
説明2
DevUtilsPage のmountPage("wicket/internal/debug/utils", DevUtilsPage.class);
Mount で、 devutils の Debug 用の ページには 一通り、
アクセスできるようになります。
個別にもマウントできましたが、
DevUtilsPage からDiskStoreBrowserPage 以外の 全ての ページへの リンクが 貼られていたので、
このページのみ マウントしました。 説明3
StatelessChecker をgetComponentPostOnBeforeRenderListeners().add(new StatelessChecker());
Listener クラスと して 追加、 そして、 Stateless かを 検証したい ページ側に、 以下の アノテーションを 付与します。 ちなみに、@StatelessComponent public class FestivalsPage extends BasePage { ..... }
@StatelessComponent を 付与した ページが、 Stateless でないと 例外が 発生します。
男らしく、厳しい 実装に なっています。 Last cause: '[Page class = xyz.monotalk.FestivalsPage, id = 0, render count = 1]' claims to be stateless but isn't. Offending component: [Link [Component id = heldYearLink]]
画面イメージ
Wicket Inspector
TOP画面
http://localhost:8080/wicket/internal/debug/utils
にアクセスすると、
以下のページが 表示されます。
右上に小さく、 Inspector
、Session
リンクがあり、 各ページに 移動できます。 Inspector
Inspector
リンクをクリックで 以下の 画面が 表示されます。
この画面で、 Session上に 存在する Pageオブジェクトなどを、 Tree 形式で 閲覧できます。
初期状態では、記録する 設定に なっていないので、 Session
に移動して、 記録を 開始します。 Session
Session
リンクをクリックで、 以下の 画面が 表示されます。
Enable request recording
リンクをクリックすると、 Session の 記録が 開始されます。 リクエスト記録後の、
View リクエストセッションが 記録され、 SessionId ごとに 表示されます。
SesssionId ごとのリンクを クリックします。 Session ごとの
View Session ID ごとの Viewです。 発生した リクエストごとの 消費Sessionの サイズ
Time Token (たぶんレスポンスに かかった 時間)が 表示されます。 Inspector に
戻る 記録している 状態で、 Inspector に 戻ると、 Session 上の オブジェクト Tree が 表示されます。
PageにAdd している コンポーネントが、 どれくらいの データサイズかが 確認可能です。 想像する
実際の 開発での 使い 方
Session にサイズが 大きすぎる コンポーネントを 設定していないか?
実際に大きすぎる 場合は、 何の サイズが 大きいのか ?
等を確認する 用途に 使えそうに 思いました。
開発環境でテスト中に 記録を ON に して おき、 たまに 画面を 確認して、
ListView などで、サイズが 大きすぎる コンポーネントが ないかを チェックする イメージかと。
Active sessions
作成した
http://localhost:8080/wicket/internal/debug/diskDataStore
に
以下の
DiskDataStore 上に
Wicket は
ディレクトリの
wicketstuff に
そちらには、
独自に
StatelessChecker
これは、
ただ、
Gistに
以上です。
コメント