画面を作ってみる。

さてさて、ブランクアプリを起動し、プロジェクト名をリファクタリングしたところまでたどりついたUruma。
ということで、
早速画面を作ってみよう。


と思いましたが、ここで手が止まる。
まずどうすんの??
というわけで、
http://uruma.sandbox.seasar.org/ja/viewXml.html
をチェック。


なんか、templateの下が、workbenchではなく、windowになっている。
まぁその辺は気にせずに、一番下の、
プログラムから起動を参考に、
workbench.xmlを起動してみる。


StandAloneUrumaStarter uruma = StandAloneUrumaStarter.getInstance();
uruma.openWindow("workbench.xml");

Exception in thread "main" java.lang.NoClassDefFoundError: org/seasar/framework/exception/ResourceNotFoundRuntimeException
       at com.dnsdojo.mokkouyou.uruma.grepfinder.action.Sample1Action.main(Sample1Action.java:7)

だそうです。
んじゃまぁ、\uruma-0.4.1\lib
にある。jarと、uruma-0.4.1.jar
をビルドパスに追加。


変わらず。
というわけで、さらに必要なライブラリがあるんだよね。
少なくともエラーの内容から、s2系のjarが足りないというのはわかる。
さらにいうのであれば、
log系のライブラリも足りない・・・
うーんめんどい。


ここでサンプルの出番。
というわけで、じゃんけんのサンプルを引っ張ってくる。


以下差分。
テスト用のも散見されるが、とりあえず追加・・・
aopalliance-1.0.jar
commons-logging-1.1.jar
easymock-2.2.jar
geronimo-j2ee_1.4_spec-1.0.jar
javassist-3.4.ga.jar
junit-3.8.2.jar
log4j-1.2.13.jar
ognl-2.6.9-patch-20070908.jar
poi-3.0-FINAL.jar
s2-extension-2.4.25.jar
s2-framework-2.4.25.jar
s2-tiger-2.4.25.jar


というか、0.4.1のサンプルにuruma0.4.0のjarが入ってる・・・
まぁリリース内容考えれば問題ないんだろうけど。
色々大変なんだろうなぁというのがこういうところからもうかがえる・・・


このあたりの依存ライブラリに関しては

  1. 明記
  2. 同梱
  3. 必要ライブラリ群として配布


等の対応があれば親切だと思います。
(というかreadmeレベルでもいいから必要じゃない?普通)


んでまぁ気を取り直して起動

[main] DEBUG org.seasar.uruma.core.StandAloneUrumaStarter 
- [DURM9900]StandAloneUrumaStarter を初期化します.
[main] WARN  org.seasar.uruma.core.StandAloneUrumaStarter 
- [WURM0602]diconファイルが見つからないため、読み込みませんでした.(path:app.dicon)
[main] WARN  org.seasar.framework.container.assembler.BindingTypeShouldDef 
- org.seasar.uruma.container.creator.UrumaActionCreatorのプロパティ(actionCustomizer)が見つからないので設定をスキップします
[main] WARN  org.seasar.framework.container.assembler.BindingTypeShouldDef 
- org.seasar.uruma.container.creator.UrumaFormCreatorのプロパティ(actionCustomizer)が見つからないので設定をスキップします
[main] WARN  org.seasar.framework.container.assembler.BindingTypeShouldDef 
- org.seasar.uruma.container.creator.UrumaLogicCreatorのプロパティ(logicCustomizer)が見つからないので設定をスキップします
[main] WARN  org.seasar.framework.container.assembler.BindingTypeShouldDef 
- org.seasar.uruma.container.creator.UrumaProviderCreatorのプロパティ(providerCustomizer)が見つからないので設定をスキップします
[main] WARN  org.seasar.framework.container.assembler.BindingTypeShouldDef 
- org.seasar.uruma.container.creator.UrumaSorterCreatorのプロパティ(providerCustomizer)が見つからないので設定をスキップします
[main] WARN  org.seasar.framework.container.assembler.BindingTypeShouldDef 
- org.seasar.uruma.container.creator.UrumaDtoCreatorのプロパティ(dtoCustomizer)が見つからないので設定をスキップします
[main] WARN  org.seasar.framework.container.assembler.BindingTypeShouldDef 
- org.seasar.framework.container.creator.InterceptorCreatorのプロパティ(interceptorCustomizer)が見つからないので設定をスキップします
[main] INFO  org.seasar.uruma.core.TemplateManager 
- [IURM0110]画面定義XML(workbench.xml)を読み込みます.
[main] INFO  org.seasar.uruma.core.TemplateManager 
- [IURM0112]画面定義XMLを登録しました.(id:workbench type:WorkbenchComponent path:workbench.xml)
[main] ERROR org.seasar.uruma.core.StandAloneUrumaStarter
 - [EURM0001]例外が発生しました.理由は org.seasar.uruma.component.rcp.WorkbenchComponent
java.lang.ClassCastException: org.seasar.uruma.component.rcp.WorkbenchComponent
       at org.seasar.uruma.core.impl.UrumaWindowManagerImpl.loadTemplate(UrumaWindowManagerImpl.java:120)
       at org.seasar.uruma.core.impl.UrumaWindowManagerImpl.openWindow(UrumaWindowManagerImpl.java:96)
       at org.seasar.uruma.core.StandAloneUrumaStarter.openWindow(StandAloneUrumaStarter.java:125)
       at com.dnsdojo.mokkouyou.uruma.grepfinder.action.Sample1Action.main(Sample1Action.java:8)


との事。
問題は2つ

  1. app.diconがない
  2. workbenchComponentがまずい
  3. (WARNも怪しいけどね)

app.diconは必要なのね・・・ということで作成することとして、
Workbenchは・・・あれか。
ブランクの起動法もあれだし、こういう方法だと起動できないんだろうなぁと納得するものとする。
(なんかWindowManagerがどうたら〜ってなってるしね。)


んじゃまぁ気を取り直して・・・
じゃんけんからapp.dicon拝借。
COOLなのできっと、componentは不要・・・
traceInterceptorもurumaに含まれていたはず。
ということで空っぽ

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.3//EN"
       "http://www.seasar.org/dtd/components23.dtd">
<components>
</components>


さらに
画面定義xml
src/main/resources/views
に配置
sample1.xmlとする。

<?xml version="1.0" encoding="UTF-8"?>
<template xmlns="http://uruma.sandbox.seasar.org">
 <window id="sample1" title="sample1">
 </window>
</template>


で、開く画面を以下に変更

root/action/Sample1Action.java
uruma.openWindow("views/sample1.xml");


で、願いを込めて起動!

[main] DEBUG org.seasar.uruma.core.StandAloneUrumaStarter 
- [DURM9900]StandAloneUrumaStarter を初期化します.
[main] WARN  org.seasar.framework.container.assembler.BindingTypeShouldDef 
- org.seasar.uruma.container.creator.UrumaActionCreatorのプロパティ(actionCustomizer)が見つからないので設定をスキップします
[main] WARN  org.seasar.framework.container.assembler.BindingTypeShouldDef 
- org.seasar.uruma.container.creator.UrumaFormCreatorのプロパティ(actionCustomizer)が見つからないので設定をスキップします
[main] WARN  org.seasar.framework.container.assembler.BindingTypeShouldDef 
- org.seasar.uruma.container.creator.UrumaLogicCreatorのプロパティ(logicCustomizer)が見つからないので設定をスキップします
[main] WARN  org.seasar.framework.container.assembler.BindingTypeShouldDef 
- org.seasar.uruma.container.creator.UrumaProviderCreatorのプロパティ(providerCustomizer)が見つからないので設定をスキップします
[main] WARN  org.seasar.framework.container.assembler.BindingTypeShouldDef 
- org.seasar.uruma.container.creator.UrumaSorterCreatorのプロパティ(providerCustomizer)が見つからないので設定をスキップします
[main] WARN  org.seasar.framework.container.assembler.BindingTypeShouldDef 
- org.seasar.uruma.container.creator.UrumaDtoCreatorのプロパティ(dtoCustomizer)が見つからないので設定をスキップします
[main] WARN  org.seasar.framework.container.assembler.BindingTypeShouldDef 
- org.seasar.framework.container.creator.InterceptorCreatorのプロパティ(interceptorCustomizer)が見つからないので設定をスキップします
[main] INFO  org.seasar.uruma.core.TemplateManager 
- [IURM0110]画面定義XML(views/sample1.xml)を読み込みます.
[main] INFO  org.seasar.uruma.core.TemplateManager 
- [IURM0112]画面定義XMLを登録しました.(id:sample1 type:WindowComponent path:views/sample1.xml)
[main] INFO  org.seasar.uruma.core.UrumaWindowManager 
- [IURM0401]ウィンドウ(id:sample1)を初期化します.
[main] ERROR org.seasar.uruma.core.StandAloneUrumaStarter
 - [EURM0001]例外が発生しました.理由は [ESSR0007]S2Containerはnullあるいは空であってはいけません
org.seasar.framework.exception.EmptyRuntimeException: 
[ESSR0007]S2Containerはnullあるいは空であってはいけません
       at org.seasar.framework.container.factory.SingletonS2ContainerFactory.getContainer(SingletonS2ContainerFactory.java:175)
       at org.seasar.uruma.util.S2ContainerUtil.getComponentDefNoException(S2ContainerUtil.java:113)
       at org.seasar.uruma.core.ComponentUtil.setupPartAction(ComponentUtil.java:125)
       at org.seasar.uruma.ui.UrumaApplicationWindow.setupActionComponent(UrumaApplicationWindow.java:142)
       at org.seasar.uruma.ui.UrumaApplicationWindow.init(UrumaApplicationWindow.java:129)
       at org.seasar.uruma.core.impl.UrumaWindowManagerImpl.openWindow(UrumaWindowManagerImpl.java:106)
       at org.seasar.uruma.core.StandAloneUrumaStarter.openWindow(StandAloneUrumaStarter.java:125)
       at com.dnsdojo.mokkouyou.uruma.grepfinder.action.Sample1Action.main(Sample1Action.java:8)


やはり困った時はデバッグ頼み。
ということで、urumaのソース添付して、
プラグインより優先度高くして実行。と。


container.init();
でヌルポ
どうやら、COOL絡みがまずそうですね。
ちなみに
diconとしては


上記app.dicon


convention.dicon(2.1なのは気になるけど)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
       "http://www.seasar.org/dtd/components21.dtd">
<components>
       <component class="org.seasar.uruma.container.convention.UrumaNamingConventionImpl">
               <initMethod name="addRootPackageName">
                       <arg>"com.dnsdojo.mokkouyou.uruma.grepfinder"</arg>
               </initMethod>
       </component>
</components>


s2container.dicon

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
       "http://www.seasar.org/dtd/components24.dtd">
<components>
   <include path="org/seasar/uruma/dicon/uruma-cooldeploy.dicon"/>
</components>


上記通り。というか設定せず。
なんだかなぁ・・・
というわけで、COOLdeployを切り捨てることに。


s2container.diconを修正

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
       "http://www.seasar.org/dtd/components24.dtd">
<components>
   <!--<include path="org/seasar/uruma/dicon/uruma-cooldeploy.dicon"/>-->
</components>


app.dicon

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
       "http://www.seasar.org/dtd/components24.dtd">
<components>
       <component class="com.dnsdojo.mokkouyou.uruma.grepfinder.Sample1Main" />
</components>


はい起動できました。

[main] DEBUG org.seasar.uruma.core.StandAloneUrumaStarter 
- [DURM9900]StandAloneUrumaStarter を初期化します.
[main] DEBUG org.seasar.uruma.core.StandAloneUrumaStarter 
- [DURM9901]urumaImages からイメージ定義バンドルを読み込みます.
[main] INFO  org.seasar.uruma.core.TemplateManager 
- [IURM0110]画面定義XML(sample1.xml)を読み込みます.
[main] INFO  org.seasar.uruma.core.TemplateManager 
- [IURM0112]画面定義XMLを登録しました.(id:sample1 type:WindowComponent path:sample1.xml)
[main] INFO  org.seasar.uruma.core.UrumaWindowManager 
- [IURM0401]ウィンドウ(id:sample1)を初期化します.
[main] WARN  org.seasar.uruma.core.ComponentUtil 
- [WURM0221]パートアクションクラスが見つかりません.(対象パート:sample1 S2コンポーネント:sample1Action)
[main] WARN  org.seasar.uruma.core.ComponentUtil 
- [WURM0223]フォームクラスが見つかりません.(対象パート:sample1 id:sample1)
[main] INFO  org.seasar.uruma.core.UrumaWindowManager 
- [IURM0400]ウィンドウ(id:sample1)をオープンします.


うーんよくわかりません。私の環境ですかね?
COOLの説明にある構成通りだと思うのですが・・・
(app.configは結局必要なのかもわからないけど)


ということでUrumaまたしても一時終了です。*1
ちょっと忙しくなりそうだし・・・ね。
今後に期待ということで。


さてさて、私により、一方的にツンデレプロダクトと認定されたUrumaですが、
私はとっても期待をしていますし、動向を見守っていきたいと思っています。
なので、一時終了。
普通ここまで打ちのめされると放置・・・なのですが。


ツンデレが好きな方、
あまり情報が出そろっていない?時こそチャンス!第一人者になってやる!という方
などはぜひ挑戦してみてはどうでしょうか。


僕レベルの技術しかない方は、時間と情熱があれば別ですが、
もう少しドキュメントがそろうのを待ってもよいかもしれません。
まぁ素直に、MLに質問を投げられる人ならきっと親切に教えてもらえると思いますけど。

*1:dicon書けよというつっこみは聞き流す方向で。