スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

S2JDBCを使ってみる

先日、J2EE勉強会に出たときに、ついでにSeasarのことについてもいろいろと聞いてきた。
新しいプロジェクトでは、SAStruts + S2DAOで行こうと思っていたのですが、中村さん(taediumさん)から、関連するエンティティを一緒に持ってこれるS2JDBCの方が生産性が高いと言われ、また自己参照のテーブルも引っ張ってこれると聞いた。

正直、JPA自体あまり好きではなく、流れるインターフェースといっても、何か擬似SQLっぽいコードというのはどうもという印象を持っていた。なので、LINQなんかも懐疑的な目で見ていた。Criteriaというのもいまいち。どうせSQLにマッピングされるんだったら、SQLで書いたらと思っていた。
それよりもS2DAOのインターフェースしかないスタイルというのが気に入っていたところでもあった。

が、自己参照のテーブルを普通に引っ張ってこれるというのが気になって早速試してみた。
自己参照のテーブルとは、EMP表で自分の上司のidも持つようなもので、無限に階層化されるというようなテーブルのこと。以前そういう処理をしたとき、MySQLでは、SQLでどうすることもできないので、階層化を構築するロジックをJavaで書いた。Oracleだと、connect by priorで階層を扱えるが、それでもJavaのエンティティオブジェクトへのマッピングが必要になる。

S2JDBCだとこれをいとも簡単にやってくれる。
以下が簡単なテスト・コード。

<table作成>
----------------------------------------
create table tbl (id integer primary key, name varchar(10), parent integer, foreign key (parent) references tbl (id));
insert into tbl values(1,'papa', null);
insert into tbl values(2,'me', 1);
insert into tbl values(3,'son', 2);
insert into tbl values(4,'daughter', 2);

<TblService.java>
------------------------------------------------------------
package zzz.service;

import java.util.List;
import org.seasar.extension.jdbc.service.S2AbstractService;
import zzz.entity.Tbl;

public class TblService extends AbstractService<Tbl> {
public List<Tbl> findAllwithChild() {
List<Tbl> list = jdbcManager.from(Tbl.class)
.leftOuterJoin("tblList").getResultList();

// ツリー構造にして返す。
List<Tbl> retList = new ArrayList<Tbl>();
for (Tbl tbl : list) {
if (tbl.parent == null) {
retList.add(tbl);
}
}
return retList;
}
}


<Tbl.java>
------------------------------------------------------------
package zzz.entity;

import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

@Entity
public class Tbl {
@Id
@GeneratedValue
public Integer id;
public String name;
public Integer parent;

@OneToMany(mappedBy = "parentTbl")
public List<Tbl> tblList;

@JoinColumn(name="parent",nullable=true)
@ManyToOne
public Tbl parentTbl;
}

<TblServiceTest.java>
------------------------------------------------------------
package zzz.service;

import java.util.List;
import javax.annotation.Resource;
import org.seasar.extension.unit.S2TestCase;
import zzz.entity.Tbl;

public class TblServiceTest extends S2TestCase {
@Resource
protected TblService TblService;

public void testTbl() {
print(TblService.findAllwithChild(), "");
}

private void print(List<Tbl> list, String indent) {
for (Tbl tbl : list) {
System.out.println(indent + tbl.name);
if (tbl.tblList != null) {
print(tbl.tblList, indent + " ");
}
}
}

public void setUp() throws Exception {
include("app.dicon");
}

}

------------------------------------------------------------

マッピングの書き方で少しつまづいたもののうまくいった。SQLは一回しか発行されていないが、子リストをたどって、無限に一番下までたどることができる。
この後、実際のプロジェクトで使うテーブルで、さらに別テーブルとの外部結合、さらにそのテーブルとの外部結合もネストという形で記述でき、すんなり目的のものを持ってくることができた。
なかなかの感動もの。

今さらながら、Seasarを触っていて、いろいろと便利さに感動させられることが多い。
SAStrutsも簡単にパスからActionのメソッドににマッピングできるし、HotDeployもいい。S2TestCaseも、Excelでテストデータを用意してできるのがよい(複数のワークシートを1ブックにまとめてできるようにしたかったがこれはうまく行かなかった)。
DIも、セッターを書く必要もなく、privateフィールドに@Bindingまたは@Resourceのアノテーションを書くだけでできてしまう。

Entityもpublicフィールドを使っている。フィールドはprivateにすべしと洗脳されてきたJava技術者にとっては使うのには抵抗があるが、私も単なるgetter/setterしかないデータクラスにわざわざメソッドを作るのは意味がないと思っていたので、こういうのを堂々とやってくれるのはうれしい。
privateフィールドにしてsetterを作れば、カプセル化が守られるなんていうのは迷信に過ぎない。
hoge.id = 1;とするかhoge.setID(1);とするかの違いで、後者が単にステップ数、バイト数が稼げるだけのこと。途中で処理をかますところだけgetter/setterを使えばよい。

あと、Doltengで出力されるサンプルに、インターフェースがないのが気になっていたので、koichikさんに聞いたところ、インターフェースを使わなくても問題なく動作するとのこと。
昔、ひがさんは、インターフェースの重要性を謳っていたと記憶していたのだが、ひがさんの言うことはコロコロ変わるとのことで、seasarの自動登録で、1インターフェースに対して実装クラスが1つしかない場合、インターフェース使う意味ないね、ということで、最近のSeasarではできるだけ余計なものを省いて、インターフェースなしということ。入れポン出しポンのWebアプリでは、簡素なつくりで十分で、そういう要望が多く寄せられていたとのこと。

この「入れポン出しポン」という言葉、私はこの間のSeasar Conferenceの出羽さんのセッションで初めて聞いたが、画面の表示内容とDBの中身が一致しているもので、間にほとんどロジックがないもので、ドメイン層を設ける必要がないもの。ただこの言葉はまだ業界標準にはなっていないようだ。

サービス層やロジック層を、全ユースケースについて、統一して作るべきかについてもkoichikさんに聞いてみたが、彼の答えでは、単に受け渡ししかしないクラスをたくさん作っても工数が増えるだけなので、できるだけシンプルに作って、必要なところだけ使えばいいとのこと。

J2EE勉強会でもドメイン層の役割についての議論があり、それもなかなかの充実振りで、
この日はいろいろ勉強になった。
スポンサーサイト

今後の行方

今日は一気に値を戻しましたね。空売り規制の効果でしょうか。
とはいっても、もともと下げすぎているので、依然低い水準ですが。

今日のモーニング・サテライトで、コメンテータに日経平均の底値についてアンケートをとったところ、多くが5000円としていました。まあ、アナリストの予測は当たらないし、万人の悲嘆となったら底かもしれないので、今こそ勇気を持って買いを入れて行く時期かもしれないなんて思ったりもする。とはいえ、実体経済にかなり影響が出ていることを考えると、やはり上向きになるのはまだまだ先かもしれない。鶏と卵どっちが先か、株価が上がるのが先か、実体経済が上がるのが先か。

多くのアナリストが言うのは、実体経済への影響が出ているものの、それでも日本株は売られすぎとのこと。今日のモーサテで、日本円で見ると日本株はかなり下がっているように見えるが、欧米人から見れば円高を含めれば、日本株は他の国の株に比べるとパフォーマンスは悪くないとのことだ。

100年に一度の大恐慌を経験していると思えば、今すごい時期を体験しているのだなと思う。経済というのは昔は興味なかったが、今は非常に面白い学問だと思う。モーニングサテライトも毎日欠かさず見るようになったし(まあ、好みの女子アナが出ているというのもあるのだが)、経済記事も読むようになった。損失は痛いが、株をやっていなかったら、ここまで経済動向には興味を持たなかったと思う。とはいえ、まだまだフィナンシャル・リテラシーなるものは皆無だし得したものは今のところないので、興味がなかった方が、幸せだったかもしれないとは心の片隅で思う。

ブログもあまり書かなくなっていたが、気を取り直し、勉強がてら最近読んだ本のレビューでもしていこうと思う。


テーマ : 日記
ジャンル : 日記

26年ぶりの安値水準だって

久しぶりにブログを書く。
今思うと、リーマンショックの後なんて可愛いものだったなと思う。
前回のブログで1万割を覚悟していたなんて書いてたけど、そこからも下がる一方。5000円割れも十分に現実味を帯びてきた。世界が連動している状態では一国の政策ではどうにもならないだろう。もはや好材料がない状態で、景気が回復するまで数年はかかると言われている状況で、今が底だとは言えないだろう。もちろん株価は将来のことを織り込んでいるので、どうかわからない。

正直、いい勉強になったという言い訳では片付けられない傷を負った。数年間の定期預金に預けたと思えばと思っていたが、数年で戻るかわからない。この一ヶ月いろいろ思うことはあった。今から思うと、自分のとってきた行動は首をかしげてしまうものばかり。不動産を買えなかったので、その間株にでも入れておこうなどとしたが、あまりにも選定が甘すぎた。悪銭身につかずというか、中途半端に金が余っているのはよくない。損切りするには遅すぎると思ったときはまだまだ十分早かった。こうしている間にも、自分の資産が減っていくのを眺めるだけ。
あぶく銭ではなく、欲しいものを我慢して貯めたお金だ。また単に稼いだお金ではなく、税金、ローンの返済、高い生活費をかいくぐってきたお金だ。損したお金を消費に回していたら。必要なものを我慢してまで投資するのはあまり得策ではない。どうせ収入を増やしたところで、先に国に横取りされるのだ。

まあ、自嘲気味に今回のダメージをかわしながら、数年はしっかりと次の大相場の準備をしておくことかな。

テーマ : 日記
ジャンル : 日記

4日続落、一時1万円大台割れ

http://biz.yahoo.co.jp/column/tpc/081007/081007_vbiz009.html

覚悟していたとはいえ、実際に起こると心中穏やかではない。
後悔先に立たずで、後から見ると自分がいかにおろかなことをしたのかがわかる。
必死に努力して上げた給料は、すべて税金と株式市場に消えた。

よくこの暴落状況を、チャンスと見るか否かは云々などと寝ぼけたことを言って励まそうとする奴がいるが、チャンスと見れるのは、今まで体力を温存してきた人だけ。
大幅なロスカットやホールドをした人には余力はない。

あとよく、経済アナリストが、日本経済は底堅く、PBRやPERからして安値圏で配当利回りも高いのに誰も買わないなどといっているが、決算発表を見ればわかるとおり、実体経済が悪化している。株価はそれを先回りしているに過ぎない。利益が減少すれば、配当は当然出なくなる。

とまあ愚痴を言うしかない状況なのが情けない。

事故米より怖い「国産」

http://zasshi.news.yahoo.co.jp/article?a=20080916-00000002-aera-soci


前・農水相はこういうことを知っていたから、汚染米など大したことないなどと発言できたのではないかと勘ぐってしまう。

不思議なことだが、一部の業界の人にとっては常識であることが、世の中全体にはなかなか広まらないし、問題にならないことが多々ある。非常に由々しき事態で、一部の人間がこれは大問題だといっても、マスコミが大々的に取り上げない限り問題にはならない。その一方で、情報が隠されていたものが漏れると一気に大騒ぎになったりする。一部の人たちの間で常識となっているものは隠すまでもなく、またスクープにもならないし、自分たちの業界に不利益なことを外にしゃべったりはしない。
結局はマスコミの反応だ。

以前、アメリカでマスターカードの情報漏えいでカード業界に激震が走りそうで、その後問題が膨らむかと思えば、それっきりの報道で後はしぼんでしまった。また以前愛媛だったが警察の裏金問題の告発も問題が飛び火するかと思えば、その後の報道は小さく扱われ、途絶えてしまった。
一方、昔の雪印を端に発する賞味期限問題は大きく飛び火した。耐震偽装は問題が大々的に取り扱われた。が、建築業界全体には飛び火はしなかった。鉄骨の本数どころか、建築部材を少なくして、材料費を安くするなど建築現場では半ば常識のようだがこういうところには飛び火しなかった。

以前、私も、ブログで、所得税から住民税への税源委譲のことで、国がインチキをやっている旨糾弾したが、所詮過疎ブログなので世の中へのインパクトはゼロ。それは当然のことで別段驚くことではないが、驚いたことは、この問題を指摘する知識人が皆無だったことだ。本当に極少数の人がこの問題に気づき、意見を言ったが、大半の人は問題視しない、というか理解できていないのが現状だった。
この件は、中国の故事でいう、朝三暮四を思い起こさせた。大衆は目先のことしか見えず、このときも定率減税廃止の件、、というよりも、住民税が上がったことに苦情を呈するだけで、問題の本質は考えることができなかった。そして、マスコミが騒がない限りは、問題を問題とは思えない愚民なのだと強く思わされた。

とはいえ、希望もある。
毎日新聞のwaiwaiの問題は掲示板で盛り上がり、ついには、傲慢な態度をとっていた毎日新聞を謝罪させるまで追い込んだ。これは、その内容自体の問題というよりも、情報や話題をコントロールする側で独裁的な立場に立っていたマスコミへの反逆だと思う。

もちろん、ここにも扇動し、火をつける人たちがいたのだと思うが、火がついたら後は勝手に進む。力で管理する社会から、情報で管理する社会へ、そして、インターネットによって情報も民衆の手に渡る。テレビや新聞の影響力がどんどん少なくなっていく。そうなると世の中の流れは、今の経済同様コントロールが難しくなる。コントロールされた社会と、どう動くか予測不可能な世界とどちらがいいのか。


と、まとまりもなく、つれづれなるままに、最初にとりあげた記事とは無関係なことをだらだら書いてしまった。。。

Eclipse3.4 Ganymedeをインストールし、Software Updatesを実行しようとしたら、
「No repository found at ...」
とエラーが出てうまく行かない。
Preferences-Network Connectionのところでプロキシの設定を行うが、それでも駄目。再起動しても駄目。
内部ブラウザはちゃんと外部にアクセスできる。

途方にくれて、ethereal改題Wiresharkでキャプチャーしてみる。が、アクセスしている雰囲気はない。こういうときは、一度アクセスした後結果をキャッシュしている場合が多いので、また再起動して確認。
404 Not Foundになっている。
そのサイトをブラウザで調べてみると、確かに404だ。さすがにeclipse本体にそれはないだろうと思い、調べるとちゃんと表示される。

今度は、ブラウザでのアクセスをキャプチャーしてみる。
プロキシのアドレスが違う!
チャンチャン。いつか来た道。自己嫌悪に陥る。

ブラウザで設定しているのは、スクリプトファイルのアドレス。あるアプリではスクリプトファイルを解釈して正しいプロキシにアクセスしてくれるが、eclipseではそうでないということ。プロキシの正しいアドレスを入力し、問題解消。

プロフィール

dayan

Author:dayan
小職は、SE(システムエンジニア)を専門としておりますが、技術的な情報を中心に、それ以外に経済関連の日記、たわいもない日記も載せていきます。
[公式HPもよろしく!]

天気予報

-天気予報コム- -FC2-
リンク
ブロとも申請フォーム

この人とブロともになる

カテゴリー
最近の記事
ブログ内検索
最近のコメント
最近のトラックバック
RSSフィード
月別アーカイブ


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。