JDK5(J2SE5)でいうところのジェネリックスにあたる?ものをAS3で行うにはメタタグを書くことで対応できるようです。
こちらのエントリーで紹介されていたのは、Numberでした。
文字例のときはStringを指定すれば文字列だけを要素にもつ配列が作れるってことでしょうか。
[ArrayElementType("String")]
public stringArray:Array;
また、ButtonなどのFlex Frameworkのコンポーネントの配列にするのも可能とのこと。
Posted by nod at 2006年06月23日 01:38
| コメント (11)
| トラックバック (0)
| Clip!!
|
Clip!!
|
|
digg it!
|
del.icio.us it!
Metadata tagについての説明が以下のページに見つかりました。
http://livedocs.macromedia.com/labs/1/flex20beta3/00001352.html
http://livedocs.macromedia.com/labs/1/flex20beta3/langref/mxml/metadata.html
Posted by: uenon at 2006年06月23日 13:33
uenonさん。
Metatagについての情報ありがとうございます。
flex frameworkをみると、教えて頂いたページに書いてあるもの以外にも結構あるんですよね。
一覧表欲しいですね^_^)v
Posted by: nod at 2006年06月24日 02:24
6/7のぽんさんのコメントに+αで質問です。
S2Flex2のセッション管理についてなのですが、ファイルアップロード用に立てた別のサーブレットとセッション情報を共有させたいと思っています。
セッションのスコープを設定したり、S2Flexのサービス側で詰めたセッション情報を取り出したり格納したりするのに、推奨の方法ってありますでしょうか?
ためしに普通にSessionクラス使って取ろうと試みたのですが、スコープが違う?か何かの理由でうまく取れませんでした。
Posted by: ksk at 2006年06月27日 09:35
セッション管理で不具合?
S2Flex2試用させていただいています。
セッション管理で不具合?と思われる現象を見つけましたので報告です。
ひとつのMXMLから複数のサービスにアクセスを行った際、アノテーションでサービスにセットされるセッション情報が、別々のインスタンスとして生成されているように思います。InetSpyでHTTPリクエストの内容を見たところ、ひとつの画面から発せられている2つのリクエストのjsessionidは同一でした。しかし、サービスAで詰めたセッション情報と、サービスBで詰めたセッション情報は、同じクラスであっても別々のインスタンスとして生成されるようです。
具体的には以下のようなプログラムを作成して確認しました。
[FormA.mxmlの冒頭]
<s2:S2Component id="AAA" destination="AAA" ...>
<s2:S2Component id="BBB" destination="BBB" ...>
AAAに対してRPCを行い、応答が帰ってきた後にBBBに対してRPCを行います。
[サービス側]
class ServiceAAAImpl extends Service implements ServiceA {
public Hoge RPC1(){
*1
...
}
}
class ServiceBBBImpl extends Service implements ServiceB {
public Hoge RPC2(){
*2
...
}
}
abstract class Service {
/**
* @Export(storage="application")
*/
private Data data=null;
getter/setter...
}
セッションに値を詰める処理は、ServiceAAAImpl、ServiceBBBImpl共通のインターセプタで行っています。
こんな感じ
public Object invoke( MethodInvocation methodInvocation ) throws Throwable {
Service service = (Service)methodInvocation.getThis()
if( service.getData()==null ){
service.setData( new Data() );
}
methodInvocation.proceed();
}
このとき*2の箇所では*1と同一のセッション情報が取れてくることを期待していますが、
取れてくる情報は別インスタンスになっています。
再度AAA,BBBをコールすると、それぞれ別々のセッション情報がセットされます。
セッションは別々に継続しているようです。
ざっと調べたところでは、S2Componentの定義ごとに別々にセッション管理がなされているかのように動作します。
HTTPリクエスト内のjsessionidは同一です。
Posted by: ksk at 2006年06月29日 10:31
kskさん。こんばんは。
返事が遅くなりました。
詳しい内容ありがとうございます。またバグトラッキング(https://www.seasar.org/issues/browse/FLEX)に登録した上確認します。場合によってはまたBeta6->Beta7(候補) で状況がかわっているかもしれません。
Posted by: nod at 2006年06月30日 02:05
KSKさん。
こんばんは。
遅くなって申し訳ありません。
例としてあげていただいてる、コードの中で以下の部分は
コピーしたときに変更したものでしょうか..
>@Export(storage="application")
@Export/ @Importのあのテーションは現在strageで指定できるものはsessionしか実装していません。
ファイルアップロード用のServletとRemoteService用のServlet(s2flex2のServlet) で確認したところ、以下のような結果になったとのことです。
1.同一ブラウザから、サーブレットと通信した場合
a)flieupload用のサーブレット
b)Remoting用のサーブレット
a),b)の通信には、同じセッションIDが、使われセッションを共有することができるとのこと。
なるブラウザから、サーブレットと通信した場合は異なるセッションID(=共有できない)になるので、共有することができません。
S2Flex2のGatewayもServletなので、同一コンテキストであれば共有できる(=同一Sessionになる)ように思います。
もしよろしければお調べいただいた内容や単純化したコードを教えていただけますでしょうか。
私も再度確認したいと思います。
Posted by: nod at 2006年07月11日 02:51
単純化したコードを作成しました。
分かりやすいようにと思って、nodさん作成の、S2Flex2のサンプルコードをベースに改造をしたのですが、これをどこかのHPに設置してよいものかどうか迷い、とりあえず概要を書き込みます。
あと、私のほうでHPに書き込めるメールアドレスを取得しますので、もう少々お待ち下さい。
セッション管理の問題の件ですが、質問として以下2件書き込みました。
1.ファイルuploadサーブレットとのセッション共有の方法
2.異なるサービス間でのセッション管理の不具合?
調べたところ、上記2件は恐らく同じ原因でうまくいかないのではと考えています。なので一旦uploadの件は除外して、より単純な問題であるセッション管理の不具合について報告します。
また、ご指摘下さったセッションスコープの件は、こちらで色々試したときの名残でした。"session"を指定しても同様の現象は発生します。
以下のような画面を作成したとします。
<s2:S2Component id="AAA" destination="AAA" ...>
<s2:S2Component id="BBB" destination="BBB" ...>
ここで、サービスAAAとBBBは、別々の異なるサービスクラスを指します。
当方で作成した確認用コードでは、AAAと、BBBは、共通の親クラス「AbstractService」の派生クラスです。
セッション情報の定義はこのAbstractServiceに記述しており、@Export/Import(storage="session")の記述はこの中で行っています。
このとき、サービスAAAと、サービスBBB間でのセッション共有がうまくいきません。
先ずサービスAAAをRPCし、その後サービスBBBをRPCするのですが、AAAサービスから詰めたセッション情報にBBBからアクセスすることは出来ませんでした。
AAAサービスに注入されたセッション情報と、BBBサービスに注入されたセッション情報を調べたところ、オブジェクトIDが別々でしたので、別インスタンスとして管理されているようです。
ちなみに単一のサービス内でのセッション管理はうまくいきます。
S2Flex2のサンプルで、足し算した結果をセッションに詰めて、それを取り出すサンプルがありますが、その場合は画面上で
<s2:S2Component id="AAA" destination="AAA" ...>
<s2:S2Component id="BBB" destination="AAA" ...>
と定義されています。サーバサイドのサービスクラスが同一であれば、セッション情報は次のリクエストにも引き継がれるようです。
いずれにしても確認用のソースを作成しましたのでご提供したいと思います。
連絡用のアドレスを作りますので少々お待ち下さい。
Posted by: ksk at 2006年07月14日 10:31
アカウント作りました。
もし、私のほうから確認用のソースをメール送付してよろしければこのアカウントから送信しようと思います。
よろしければnodさんのアドレスをMLして頂いてもよろしいですか?
ではでは。
Posted by: ksk at 2006年07月16日 10:23
ksk さん。
アカウントまで作成していただいてありがとうございます。
こちらのメールアドレス連絡すればよかったですね..
先ほどメールをお送りいたしましたので、
お時間のある時に見てください。m(_._)m
Posted by: nod at 2006年07月17日 01:26
KSKです。レス&MLありがとうございます。
昨日MLしました。
手がかりになるかどうか分かりませんが、
ご確認くださいませませ。
Posted by: ksk at 2006年07月20日 21:16
KSKさん。
頂いたソースをもとに現在の最新で試してみました。
足し算と、パラメータチェックでセッションに登録したものが
表示されるかどうかを確かめましたが、セッションデータの共有ができました。
次のflex2_exampleでその確認ができるようにしています。
Beta6からBeta7(1.0?候補)での間で不具合解消されたように思います。
Beta7ではsessionまわりも修正していますので、そのあたり
で対応したことになるのかもしれません。
近いうちにリリースいたしますのでそのときにご確認いただけますか?
お手数をおかけいたします。m(__)m
Posted by: nod at 2006年07月25日 15:24
この記事のトラックバックURL
この記事に対するトラックバック
この記事に対するコメント