| Issue 133: | initMethodタグでの実行順序がタグどおりで無い場合がある | |
| 2 people starred this issue and may be notified of changes. | Back to list |
initMethodタグでの実行順序がタグどおりで無い場合がある。
Oct 25, 2008
Project Member
#1
c95...@gmail.com
Oct 25, 2008
(No comment was entered for this change.)
Owner:
c95029
Oct 27, 2008
修正お疲れ様です。 ところで以下のような問題があるため、順序を完全に保持するようにした方がいいと思います。 ・順番をきちんと制御したい時がある(add(a), add(b) -> freeze()とか) ・ユーザから見て直観的ではないのでハマる危険性がある というわけで、このIssueをcloseしないでおきたいのですがどうでしょうか?
Oct 27, 2008
テストを追加しておきました。 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
MethodDescとConfigの持ち方の検討が必要ですが、確かに整合性は重要だと思うので ひとまず着手する方向で検討します。
Oct 28, 2008
よろしくです。>カタヤマさん
Oct 28, 2008
ちなみに同様にPropertyDescのほうでも検討が必要なので、 あわせてみてもらえると助かりますm(_ _)m
Oct 29, 2008
このテストだと、構造を変えないと通らない感じです。
いま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
次の変更を行いました。 ・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
(No comment was entered for this change.)
Status:
Fixed
|