[Seasar-user:20301] Re: [Ymir] WindowId、WindowScopeの使い方について

西山はじめ [E-MAIL ADDRESS DELETED]
2010年 11月 2日 (火) 13:47:01 JST


横田さん

西山です。返信ありがとうございました。

WindowIdごとにConversationが保存されるということ、了解いたしました。

hiddenにorg.seasar.ymir.windowを入れた場合のWindowScopeですが、
想定通り、別WindowScopeに保存できました。

ページング処理用に_get_pagingを定義した際のURLに問題がありました。
postではhiddenで設定したWindowIdが設定されていました。

勘違いをしておりました、申し訳ありません。

WindowIdとは関係の無い事象ですがもう1件あります。

Viliでプロジェクト作成後、プロジェクトのプロパティ→Vili→Skeleton/Fragment Parametersの設定で
「アクセス履歴を自動的に記録する」のチェックを入れると、
「java.util.ConcurrentModificationException」
が発生します。
このエラーもあって、原因を取り間違えてしまっていました。

クラスにConversationを設定し_getに@Beginを設定してそのページの_getを実行させると100%発生します。

以下、スタックトレースとなります。

java.util.ConcurrentModificationException
	at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
	at java.util.HashMap$EntryIterator.next(HashMap.java:834)
	at java.util.HashMap$EntryIterator.next(HashMap.java:832)
	at org.seasar.ymir.hotdeploy.fitter.impl.MapFitter.fitContent(MapFitter.java:18)
	at org.seasar.ymir.hotdeploy.fitter.impl.MapFitter.fitContent(MapFitter.java:8)
	at org.seasar.ymir.hotdeploy.impl.HotdeployManagerImpl.fit0(HotdeployManagerImpl.java:163)
	at org.seasar.ymir.hotdeploy.impl.HotdeployManagerImpl.fit(HotdeployManagerImpl.java:93)
	at org.seasar.ymir.session.impl.SessionManagerImpl.getAttribute(SessionManagerImpl.java:126)
	at org.seasar.ymir.window.WindowInterceptor.leavingRequest(WindowInterceptor.java:34)
	at org.seasar.ymir.impl.YmirImpl.leaveDispatch(YmirImpl.java:433)
	at org.seasar.ymir.impl.YmirImpl.process(YmirImpl.java:225)
	at org.seasar.ymir.servlet.YmirFilter.doFilter(YmirFilter.java:90)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.seasar.cms.pluggable.servlet.PluggableFilter.doFilter(PluggableFilter.java:43)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.seasar.ymir.servlet.MultipartRequestFilter.doFilter(MultipartRequestFilter.java:44)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
	at java.lang.Thread.run(Thread.java:619)
--
西山はじめ



2010年11月1日17:07 YOKOTA Takehiko <[E-MAIL ADDRESS DELETED]>:
> 西山さん
>
> 横田です。こんにちは。
>
> windowIdの機能を使うには、GETでもPOSTでも、パラメータにwindowIdを付与しておく必要があります。
> ですので
>
>> postする際に、「input type="hidden"」に「name="org.seasar.ymir.window"
>> value="bWindow"」を設定してみましたが、
>> リクエストのwindowIdは_selfになってしまいました。
>
> 設定したというところはOKなのですが、設定したwindowIdが使用されないというのはおかしい
> ので、こちらで調べてみます。お待ち下さい。
>
>> Ymirでは、WindowIdごとにSessionScopeやConversationScopeにデータを持てそうでしたのでこのような作りにしたのですが、
>> そもそも対応していないとかでしたら、SessionScopeだけを利用したいと思います。
>
> ConversationはwindowIdごとに管理しています。パラメータにwindowIdをつけておけば自動的に
> ConversationがwindowIdごとに分かれるイメージです。
>
> セッションはwindowIdごとに管理していません。windowIdごとにデータを持たせたい
> 場合は直接WindowScopeにデータを格納したり取り出したりする必要があります。ちなみに
> windowScopeのライフサイクルの長さはセッションと同じです(windowIdに紐付けたデータは
> セッションを破棄すると削除されます)。
>
> 以上よろしくお願いします。
>
>
> (2010/10/31 17:01), 西山はじめ wrote:
>> お世話になっております。西山です。
>>
>> Ymirで開発を行っておりますが、WindowScope、WindowIdの使い方がイマイチ分かりません。
>>
>> やりたいことは、次のとおりです。
>> 1. 検索画面(A)で検索、一覧をページング表示
>> 2. Aからリンクで「別ウィンドウ」の検索画面(B)を表示
>> 3. Bの検索結果を、JavaScriptでA画面に戻す。
>> ということです。
>> A画面、B画面のそれぞれでConversationScopeを利用しています。
>>
>> 1→2は、target="bWindow"かつ、GETパラメータで 「org.seasar.ymir.window="bWindow"」と渡すことで、
>> A画面とB画面でWindowIdを分けることが出来ました。
>>
>> しかし、その後2で検索用にpostを行うと、windowIdが"_self"(デフォルト)になってしまいます。
>>
>> postする際に、「input type="hidden"」に「name="org.seasar.ymir.window"
>> value="bWindow"」を設定してみましたが、
>> リクエストのwindowIdは_selfになってしまいました。
>>
>> formのactionに「B.html?org.seasar.ymir.window"
>> value="bWindow」を付加してpostするとWindowIdは「bWindow」になりました。
>>
>> そもそもの使い方が悪いのか、情報がありませんでしたので質問させていただきました。
>>
>> Ymirでは、WindowIdごとにSessionScopeやConversationScopeにデータを持てそうでしたのでこのような作りにしたのですが、
>> そもそも対応していないとかでしたら、SessionScopeだけを利用したいと思います。
>>
>> 環境は次の通りです。
>> Ymir 1.0.7-SNAPSHOT
>> DBFlute 0.9.7.5-SNAPSHOT
>> Seasar 2.4.43
>> Tomcat6.x
>>
>> Oracle 11g(11.1.0.6.0)
>>
>> 以上よろしくお願いいたします。
>>
>> --
>> 西山はじめ
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


Seasar-user メーリングリストの案内