2008年12月6日土曜日

改めてSpringを試す(DIコンテナとしての)

これまでSpring MVCのついでにSpringの機能を使って気ましたが、改めてDIコンテナとしてのSpringコアを触ってみたいと思います。

大体"DIコンテナ"なんていう名称が胡散臭かったんだよね。またしてもJargonか。けっ。位にしか思っていなかった。でも理解しないままケチをつけるのもカッコ悪いので。

試したのは以下のチュートリアルです。こなれていて(特徴の示し方がシンプルで明確。分かりやすい)悪くないです。
http://www.atmarkit.co.jp/fjava/rensai3/springdi01/springdi01_2.html

【まとめ】

いや、Springって結構いいアイデアですね。要するにXMLを介してオブジェクトを連携させることで、疎結合やAOP(処理の注入。intercept。そんな感じ)を実現するフレームワークです。例によってSpringの本質をぜんぜん理解してなかったみたい(なんでわざわざHibernateやらStrutsと連携させる必要があるんだ。わずらわしい。くらいの認識でした。お恥ずかしい)。

以前「SpringはアーミーナイフでStrutsは鋭い刃物」と喩えました。このときはSpring MVCのみを念頭においていたのですが、Spring全体に対しても当たらずとも遠からずかもしれません。Springは便利で軽快な汎用ツール群だと思います。それにSpringで開発するのは結構楽しい(これって重要)。エンジニア魂をくすぐる。人気があるのも理解できます。

使い場所にもよるでしょうが、プロジェクトによっては有効ではないでしょうか。ただちょっとマニアックな気がするなあ。Springで作って良かった。と実感するケースはあまりなかったりして・・・(「再利用可能性」を志向して一生懸命デザインしても、実は誰も再利用しない、とかそんな感じ)

【おまけ】

チュートリアルの流れで少し拡張してみました。(ぜんぜん大したものではないですが一応)

■ SpringTest.java
package test;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {

/**
* @param args
*/
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
Target target = (Target) context.getBean("target");
System.out.println(target.getMessage());
Parent parent = (Parent) context.getBean("parent");
System.out.println("親:" + parent.getName());
List<Child> children = parent.getChildren();
for (Child child : children) {
System.out.println(child.getName());
}

}

}

■ applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="target" class="test.Target">
<property name="message">
<value>Hello World!</value>
</property>
</bean>
<bean id="oldest-son" class="test.Child">
<property name="name">
<value>長男</value>
</property>
<property name="no">
<value>1</value>
</property>
</bean>
<bean id="oldest-daughter" class="test.Child">
<property name="name">
<value>長女</value>
</property>
<property name="no">
<value>2</value>
</property>
</bean>

<bean id="parent" class="test.Parent">
<property name="children">
<list>
<ref bean="oldest-son" />
<ref bean="oldest-daughter" />
</list>
</property>
<property name="name">
<value>親</value>
</property>
</bean>
</beans>

■Parent.java

package test;

import java.util.List;

public class Parent {

private List<Child> children;
private String name;

public List<Child> getChildren() {
return children;
}
public void setChildren(List<Child> children) {
this.children = children;
}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

}

■Child.java

package test;

public class Child {
private String name;
private Integer no;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getNo() {
return no;
}
public void setNo(Integer no) {
this.no = no;
}
}

以上
.

2008年12月5日金曜日

RAD7.5でWeb Serviceを作ってみる

ここ数年使われているjargonであるところのWeb service(英語圏では大文字でなく、かつ複数形のweb servicesみたいな記載をよく見ます)。せっかくなのでRAD7.5で作ってみました。個人的にはこのテクノロジーに対しては出た当初から半信半疑です。セールストークやらわけの分からない専門用語が飛び交い過ぎている。まあ私が見限ったのはずいぶん昔のことだし、食わず嫌いもよくないので、最近のweb sevicesがどうなってるのか見てみたいと思います。

TutorialはIBM dW "Create stand-alone Web services applications with Eclipse and Java SE 6, Part 1"。例によってIBM IDの登録が必要です。

注意点)
build.xmlを実行する箇所について。RAD上で右クリック、実行 > Antビルド としてもエラーとなります。コマンド・プロンプトからantを実行すると(別途Apache antの導入が必要)、問題なく実行できました。ちなみにCygwinでもダメです。"Program Files"以下に導入しているからかもしれません。

RunServer を実行する箇所について。実行するためには commons-logging.jar と commons-discovery.jar をビルドパスに追加する必要がありました。

WebサービスエクスプローラーからUDDIメインを開いた後の画面について。Tutorialとは違うようです。RAD7.5では、
レジストリー名:SayHelloService
照会 URL :http://localhost:8080/wsServerExample?wsdl
と入力します。

Webサービスエクスプローラーの使い勝手。ぜんぜん違いますね。いろいろいじってみましたが、とうとうgetGreetingsを呼び出すことができませんでした。

結論。大山鳴動ねずみ一匹、という感じです。まだまだだな。(<偉そう)

以上。
.

2008年11月30日日曜日

カワハギ、カワハギ

だって魚関係のWebサイトを見れば「カワハギといえば肝。肝は旨い」ばっかりですよ。@nifty:デイリーポータルでも取り上げられてるし。で、スーパーに行く途中のこと。しっかりカワハギ=肝=旨いと刷り込まれた私の脳は、目ざとく通りすがりの居酒屋のメニュー「カワハギの肝和え 800円」を発見。カワハギの肝和えか。高いな。旨いらしいな。

で、スーパーに行ってみたら魚コーナーに未処理のカワハギが。何かカワハギにインスパイアされまくりって感じで。魚コーナーのお兄ちゃんに「これ刺身いけますか」と聞くと「大丈夫ですよー」と威勢のよい答え。もう買うしかないでしょ。今日の晩御飯はカワハギの肝和えに決定、ということで、カワハギを一匹買って帰りました。子供には無理だから、メインというよりは大人向けのサブアイテム。

そして夕食。メインのコロッケを作るのに一生懸命になってしまい、カワハギのことはすっかり忘れてコロッケ食べてごちそうさまー。あー美味しかった。ってカワハギどうしよう。とよくあるパターン。

しょうがない、お父さんの夜のおやつはカワハギだ。と重い腰を上げて(それでも少し楽しみにしながら)カワハギの解体に向かいました。出刃でツノを切り落とし、口を切り落とす。皮をメリメリと剥いで、後頭部?こめかみ?あたりにざくっと包丁を入れて骨を断ち、そこから頭をもぎ取る。頭にくっついて肝が出てきました。他人のWebサイトで見ると肝だけきれいに取れているんですが、実際にはグダグダといろいろ張り付いている。写真はイメージで実物とは多少異なる場合がってやつですな。慎重に取り外したつもりでしたが少し崩れてしまった。肝は皿に乗せてしょうゆを掛けておきます。子供たちが「気持ち悪ーい」「これ何?」「苦玉ってどれ?」と騒ぎながら覗き込んでます。頼むから出刃包丁のそばに顔を近づけるな。それから身を三枚に下ろして(下手なので骨にしっかり肉がついてしまう・・・クヤシイ)から、中骨を避けてサク取りに。刺身包丁で小さく切って、肝と和えました。(子供はもう飽きてどっかで遊んでる。)

実家からもらった酒「越中五箇山 三笑楽」をコップにたっぷり一合分注ぎます。普段呑む酒と違って薄い琥珀色してて、香りとうまみが濃い。ちびりとすすって、デワデワ、とカワハギに箸をつける。

う~ん。見た目結構グロいっすよ。肝にはところどころ薄い血管がまとわりついてるし(多分解体が下手だった。もしくは取るか裏ごしするべきだったみたい)。身には薄皮がついてて(これも取り忘れた)、全体になんだかぴろぴろしてる感じ。

箸に肝をつけてちょっとなめてみると。うん。確かに旨い。結構旨い。生臭さは許容範囲。

肝にまみれた身を食べてみると、こりこりして旨い。これからは普通に好物って言うかも。カワハギの肝和え行っとく?みたいな。高いから自分で作るか。

高級そうな店で、小ざかしい器にちょこんと盛られてきたら、その旨さに感動してしまうかもしれません。形のそろわない刺身にところどころ赤い血管が張り付いている、その時点で負けだったかも。でも逆に言えばその見た目にもかかわらず旨いことは確か。

演出がまずかったな。あとは技術的な失敗もいくつかあったように思われました。以下が次回の課題。

・生臭さを取るため肝には酒を振りかけておくこと
・しょうがの絞り汁を入れたい
・血管は取り除いておくこと
・身から薄皮を取ること
・刺身は形をそろえて薄く切ること(いっそ軽く叩くか)

また食べようと思ってます。

以上。
.