My favorites | Sign in
t-2
Project Home Downloads Wiki Issues Source
READ-ONLY: This project has been archived. For more information see this post.
Search
for
  Advanced search   Search tips   Subscriptions
Issue 133: initMethodタグでの実行順序がタグどおりで無い場合がある
2 people starred this issue and may be notified of changes. Back to list
Status:  Fixed
Owner:  c95...@gmail.com
Closed:  Apr 2009


 
Project Member Reported by shinpei.ohtani@gmail.com, Oct 24, 2008

initMethodタグでの実行順序がタグどおりで無い場合がある。

Oct 25, 2008
Project Member #1 c95...@gmail.com
Fixしました。ConfiguableBeanDescとLifeCycleTabHandlerを修正しました。

ただし、今の仕組みではMethodDescごとにConfigのリストを持っているため、
<init method="add">
<init method="mode">
<init method="add">
のパターンの場合は、
add add mode
で実行されてしまいます。
Configの持ちかた、Behaviorの処理方法を変える必要があるため、将来課題にしたいと思います。





Oct 25, 2008
Project Member #2 c95...@gmail.com
(No comment was entered for this change.)
Owner: c95029
Oct 27, 2008
Project Member #3 skir...@gmail.com
修正お疲れ様です。

ところで以下のような問題があるため、順序を完全に保持するようにした方がいいと思います。

・順番をきちんと制御したい時がある(add(a), add(b) -> freeze()とか)
・ユーザから見て直観的ではないのでハマる危険性がある

というわけで、このIssueをcloseしないでおきたいのですがどうでしょうか?

Oct 27, 2008
Project Member #4 shinpei.ohtani@gmail.com
テストを追加しておきました。

https://code.google.com/p/t-2/source/browse/branches/0.4-dev/lucy-0.4-dev/test/commons/meta/ConfigurableBeanDescTest.java

これを通せるようになればOKなはずです。

Oct 27, 2008
Project Member #5 c95...@gmail.com
MethodDescとConfigの持ち方の検討が必要ですが、確かに整合性は重要だと思うので
ひとまず着手する方向で検討します。
Oct 28, 2008
Project Member #6 shinpei.ohtani@gmail.com
よろしくです。>カタヤマさん
Oct 28, 2008
Project Member #7 shinpei.ohtani@gmail.com
ちなみに同様にPropertyDescのほうでも検討が必要なので、
あわせてみてもらえると助かりますm(_ _)m
Oct 29, 2008
Project Member #8 c95...@gmail.com
このテストだと、構造を変えないと通らない感じです。

いまMethodDescがConfigを持っているので
add conf1
delete conf2
add conf3
と設定を書いても、

add
 |-conf1,conf3

delete
 |-conf2

という風に保持させるため、
for (ConfigContainer container : beanDesc.getAllMethodDesc()) {
 for (Config config : container.findConfigs(TestConfig.class)) {
  // should be conf1 conf2 conf3
  System.out.println(config);
 }
}
では内部的にがんばっても無理なので、

例えばですが、
ConfigにMethodDescの参照を持たせておいて、
BeanDesc.getMethodDescConfigs()でList<Config>を返すようにして
 for (Config config : configList) {
  ConfigContainer container = config.getContainer();
  //呼び出し
 }
とかならいけるか思います。
ただこれだと、MethodDescにConfigをaddした時にBeanDescもそれを
感知しないといけないので、
beanDesc.addMethodDescConfig(mc,config)
みたいにするとかしないといけないです。

Nov 2, 2008
Project Member #9 c95...@gmail.com
次の変更を行いました。
・commonsのConfigインターフェースに「getConfigContainer()」を追加。 
  (Configが適用される対象のConfigContainerを返すメソッド)
・LifeCycleTagHandlerでConfigを作る所で、Configに対して対象のMethodDescをセットする。
  作成したConfigはMethodDescにはaddせず、BeanDescにaddする。
 (従来は作成したConfigを対象のMethodDescにaddしていた)
・Behaviorを作成する部分(ConfigBinderFactor#bind())で、はじめにConfigから
getConfigContainer()を呼び、もしnullでなければそのConfigContainerとConfigを使ってBehavior
を構築する。
・BeanDesc内には設定を読み取った順にConfigが並んでいるので、設定順にBehaviorが処理される。

ひとまずこれで、
		<init method="mode">"AAA"</init>
		<init method="add">"BBB"</init>
		<init method="save">"CCC"</init>
		<init method="add">"DDD"</init>
		<init method="mode">"EEE"</init>
のようなケースでも順序に従って呼び出せます。(lucy.behavior.InitMethodOrderTest)






Apr 16, 2009
Project Member #10 c95...@gmail.com
(No comment was entered for this change.)
Status: Fixed

Powered by Google Project Hosting