-S00: Seasar2チュートリアル

Seasar2はひがさんが全部用意してくれるので消費者に徹してしまいがちだったのですが、そのSeasar2に今、何が欠けているか?それは「チュートリアル」。気持ちの盛り上がってるときにBLOGで「不定期」でも少しづつ書けばそのうち一回りするでしょう、きっと。手が折れても「誰かが引き継いでくれる」だろうし。ということで、スタートします。はじめのうちはあまり期待しないでおいてね。

-Inject Dependency機能(2)

上記を最初(ページを作成した直後)にやる感じです。property,initMethodタグだけをPageに適用するつもりでいます。一度、injectDependencyしたら後は、コンテナの手を離れて、Tapestryにまかせると。ページをプーリングするかどうかもTapestryまかせ。

from ひがやすおの日記2004/03/22
了解です。Type2+Type4なやり方をTapestryのカスタムコード側でなく、S2Containerのユーティリティ的機能で用意するわけですね。あとはTapestry3.1のほうでHiveMind入れるときにこういうやり方でやってくれればOK。私のほうで未完成の(なんでかバグってた)エンジンのようにTapestry部品をカスタマイズする方法なら現行の3.0でもできます。
さっき出てきてたのに触れられなかったメソッド、

injectDependency(Object component, Class componentClass)
injectDependency(Object component, String componentName)

これらはプロパティセットとinitMethodのための設定を引くために、第二引数あるわけですか。

<component name="home" instance="injection">
  <property name="prop">'val'</property>
  <initMethod name="addItem">
    <arg>item</arg>
  </initMethod>
</component>

というXML設定あって、

IComponentContainer container_;
container_ = componentContainerHolder.getComponentContainer(); 

//とりあえずPageSource#getPage(
//          IRequestCycle,String,IMonitor)が候補
public IPage getPage(
         IRequestCycle cycle, String pageName, IMonitor monitor) {
  IPage page = super.getPage(cycle, pageName, monitor);
  pageInjectBegin(monitor, pageName);
  try {
    container_.injectDependency(page, pageName);
  } catch(ComponentNotFoundRuntimeException e) {
    pageInjectException(monitor, pageName, e);
  }
  pageInjectEnd(monitor, pageName);
  return page;
}
//あと、JWCコンポーネントの場合も考えねば

Tapestry(改)がすれば、この"page"オブジェクトはS2の設定で"prop"プロパティに"val"をセットし、"addItem(item)"を実行すると。
コメントが付いた時点から後に例示をいろいろいじってしましました。ごめん>ひがさん
JWCコンポーネントの場合は難しいです。privateばっかでタイミングとれない。。。

-Inject Dependency機能(1)

ひがさんが今日のBLOGでS2ContainerとTapestryなどのプレゼンテーションフレームワークとの連携で、一考しています。

インスタンスの作成は、プレゼンテーションフレームワークにまかせ、IoCコンテナは、Dependency Injectionに専念すればよいと。具体的に、S2Containerに次のメソッドの追加を考えています。

injectDependency(Object component)
injectDependency(Object component, Class componentClass)
injectDependency(Object component, String componentName)

from ひがやすおの日記2004/03/22
Injection(=注射)、Dependency(=依存)ということで、インスタンスを登録して、後に取得するときにプロパティ設定をやるメソッドを用意する感じでしょうか。S2Containerをオブジェクトプールとして使うように理解しました。

// 仮にinjectDependency()を持つインターフェイス
// をIComponentContainerとする。
IComponentContainer container = getComponentContainer(); 
// ページ生成〜登録
IPage page = loadPage(pageName, ...);
container.injectDependency(page, pageName);
// IComponentContainerを通じて後に取得
IComponentContainer container = getComponentContainer(); 
IPage page = (IPage)container.getComponent(pageName);

ではなく?

-はてなにバナーを貼るTips

こんな方法を開発していて、ダメな奴だなと思いながらもTipsです。今、右下にアマゾンの絵が出ていると思います。なんかはてなは画像の外部リンクダメみたいなんで内部リンクにしました。毎日のBLOG入力画面のどっか一日を犠牲にして画像をアップロードします。そして、その画像のリンクを使う。そうするとアップロード限界までのサイズのバナーのみですが、うまいことページ内に貼り付けられます。不思議なことに、アップができたらBLOGよりその絵を削っても大丈夫でした。
おっと今思い出しました。羽生さんのところに会社のロゴが貼ってあったのが記憶の片隅にあったので、絶対できる!と思ったのですね。羽生さんもヤリ手だな(笑)。
一応、不安があったのでBLOGの初日(3月7日)を犠牲にしました。無いとは思いますが、BLOGに表示させていない画像をクリーンアップするようなことを夜間バッチでやってるかもしれないですから。
はじめ右上にバナー貼ってましたが、魂まで売ったみたいな切ない気持ちになったので、右下に移動させました。

-アマゾンアフリエータ

アマゾンアソシエイトプログラムというのに参加して、個人アフリエータになってみました。このBLOGの本やCDのリンクはそのアフリエートリンクになってます(というか、今そう直しました)。毎月の本代が馬鹿にならず、今朝例の「ツタンカーメンと出エジプト記の謎」を見つけた妻に「自分ばっかり買い物して〜」とちょっとイジめられたので、前からあることだけ知っていたアマゾンのアフリエータシステムを調べて登録しました。知り合いの方々はもしアマゾンで本を買うなら、このBLOGのリンクから買ってね(笑)。

-ボローニャ vs ブレシア

朝7時からはセリエAボローニャ vs ブレシアの再放送です。ボローニャは中田選手が在籍することで最近知名度がありますが、今回の対戦の話題は先週セリエ200点目を取ったバッジオと186点のシニョーリの、イタリア名球界対決でした。チームの最近の調子では旗色の悪いボローニャシニョーリの187点目でダメ押しして3-0で勝ちました。ボローニャの1点目を取ったFWターレと監督のマッツォーネが去年はブレシア所属だったりして他にもいろいろ因縁のあった試合ですが、さっきのローマダービーの雰囲気の悪いの見てたから思うのか、なんかほのぼのと日曜の午後の日差しの下楽しげなサッカーやってました。それにしても、朝から1.5試合も見て後に出社ですから、いま何時?って気分です。

-はてな機能タグのTips

このBLOGの右上につけた最終更新日の記事一覧ですが、<hatena>タグを使って実現しています。これはヘルプでもあるとおり、属性の設定で表示を変える事ができます。しかし、タイトル表示がうまくありませんでした。ソースを見るとCSSでもうまくできるはずですが、これがどうにもうまくBoldにできず、試行錯誤しました。結果、moduletitleにスペースを入れればタイトル出現の抑制ができること発見。これ既知なのかな?と思いつつ備忘録として書いておきます。

  <hatena name="section" listlimit="1"
    moduletitle=" " showcategory="false">

アンテナのほうは、同様にすると、

  <hatena name="antenna" moduletitle=" ">

リンクごと消えて、私のアンテナページへワンクリックではいけなくなりました。意図した見かけにまた一歩近づきました。