2008年01月10日

●AIRのSQLiteでcount取ったりでちょっとはまる。

AIRでSQLiteを使っていたのですが、微妙にはまったところが。
SQLを実行した結果がオブジェクトになって帰ってくるのですが、この中身がどう入ってるのかわからなくなります。
たとえば

SELECT count(*) FROM database;

と実行すれば普通にカウントしてくれるのですが、これが帰ってくるオブジェクト内には
rsArray[0]["count(*)"]

※rsArrayはSQLResultのdataの中身
というような形の名前で保持されて帰ってきます。
なんとなくいただけないので、
SELECT count(*) AS count FROM database;

とか名前をきちんとつけてあげて
rsArray[0].count

というように取得するのが正しいのかなと。
なんとなく配列で帰ってくるような取得方法もほしかったなぁ・・。
あと、返ってくる配列は中身が無かった場合、0個の配列ではなくnullになります。
なのできちんとnull判定が必要となります。
Hibernate的なくるむものを自作してきちんと管理しとかないと思わぬところでnullで落ちたりしそうです。

あと、ローカルにDBファイルが置かれるので、思わぬところでデータの構造が違ったりすることを考えておかないとSQLが実行できないとアラートが出てしまいます。
try catchできっちり実行できなかった場合の処理も書かないとあとで痛い目見そうです。
でも毎回書き込みの度に型チェックするのもばからしいし・・。ここんとこ効率よく解決する必要がありますね。
割り切ってしまえばいいですが。

ちなみにSQLiteの情報をGUIで見るツールを。

SQLite Database Browser
http://sqlitebrowser.sourceforge.net/
ただし、これで開いてるとAIRからアクセスした時にLockされてるから書き込めないといわれるので1回づつ閉じないといけないという問題が・・。

SQLite ControlCenter
http://www.takke.jp/soft/sqliteccj.html
こっちで開いててもLockされない気がします。
ただ、ちょこちょこ叩いてると不意に落ちることが。

2008年01月08日

●Maven2のarchetypeで独自プロジェクトを作ってjettyで起動させてみる

Maven2でarchetypeの独自プロジェクトを作ってみました。
やりたい事は、archetype:createで独自のプロジェクトを自動で作って、jettyで起動させるというところまでです。
サンプル
http://wakasa.org/uploads/sample/mvnarchetypesample.zip
1で作ったものをそのままいれてるので、いらないソースがあったりしますがそれは大目に見てください。
これらはあくまでサンプルで作ったので何か問題が発生したりするかもしれませんので、それは自己責任でお願いします。

1.基本のテンプレートを作る

mvn archetype:create -DgroupId=org.wakasa -DartifactId=testsample -Dversion=0.1 -DarchetypeArtifactId=maven-archetype-archetype

このコマンドをたたくと、今いるフォルダにtestsampleというフォルダができてそこに基本のテンプレートができます。

※参考
[Maven2 Plugin]Archetype -- 独自の archetype を作成する 其ノ壱
http://d.hatena.ne.jp/waman/20071107/1194388042

2.インストールされるプログラムを配置する

src/main/resources/archetype-resources/
配下がインストールされるデータになるので、ここを変更する。 pom.xmlなどもそのまま入る。 ただし、ここ以下はテンプレートのファイル扱いなので${artifactId}など書くと、6のアプリケーション作成時で設定した値が入る。 これはJavaのプログラムファイルにも適応されるので、例えばパッケージ名が package org.wakasa.test; というものにしたい場合は package ${packageName}.test; と書き換える必要があります。 こうしないと、5で指定したパッケージに展開された時にフォルダ階層との不整合が発生します。 なので、archetype-resources以下で動作するものを作って、テキストエディタなどで一気に置換するという方法が良いと思います。

3.インストールするファイルの設定をする

src/main/resources/META-INF/maven/archetype.xml
のファイルを編集します。 sources - ソースの一覧 resources - リソースの一覧 testSources - テスト用ソースの一覧 testResources - テストで使用するリソースの一覧 siteResources - 実行時のsiteで使われるリソースの一覧

で、2で書いた通りに各ファイルはあくまでテンプレートの扱いのため、画像などを一緒に登録しようとすると無理やり開いて置き換えようとするのでそれを防止させるのには
filtered="false"
をつけると、スキップしてくれます。

※参考
[Maven2 Plugin]Archetype -- 独自の archetype を作成する 其ノ弐
http://d.hatena.ne.jp/waman/20071107/1194396903

4.jettyのプラグインが動くようにする

入れたあとにjettyを起動するように設定を追加しておきたいので

src/main/resources/archetype-resources/pom.xml

を開いてbuild部分にjettyのプラグインを登録しておきます。

%lt;plugins%gt;
 %lt;plugin%gt;
  %lt;groupId%gt;org.mortbay.jetty%lt;/groupId%gt;
  %lt;artifactId%gt;maven-jetty-plugin%lt;/artifactId%gt;
 %lt;/plugin%gt;
%lt;/plugins%gt;

5.インストールする

作ってるものの直下で下記のコマンドを叩くとローカルにインストールされます。

mvn install

6.アプリケーションを落としてjettyで実行してブラウザで見る

インストールしたいフォルダに移動して

mvn archetype:create -DgroupId=org.wakasa.ttttest -DartifactId=tttest -DarchetypeGroupId=org.wakasa -DarchetypeArtifactId=testsample -DarchetypeVersion=0.1

とコマンドを叩くと、直下にttttestというフォルダを作ってそこに入れてくれる。
完了したらそのフォルダに移動して
mvn jetty:run
とコマンドで叩くと必要なものをMavenが落としてきてjettyが立ち上がってくる。
それからブラウザで下記のURLにアクセスすると無事に見れる・・はず。
http://localhost:8080/tttest/