GlassFish v3 でJNI

GlassFishにJNIを使ったアプリケーションをデプロイする方法。

普通にWarにしてデプロイするとjava.lang.UnsatisfiedLinkErrorが発生する。
これはGlassFishのClassLoaderとアプリケーションのClassLoaderが違うため、JVMの仕様?で同じネイティブライブラリにアクセスできなくて発生するエラー。

じゃあどうするか。JNIを使用する部分だけをjarにして
[glassfihs_home]/lib
にぶち込む。このディレクトリはGlassFish起動時にパスに含まれるのでwarには含めなくてOK。
こうすることでネイティブライブラリにアクセスするのはGlassFishのClassLoaderだけになる。したがってjava.lang.UnsatisfiedLinkErrorは発生しないというわけ。

こんなのに結構はまった。時間がもったいない・・。

GlassFish v3 でProxyの設定

adminコンソールにアクセスしようとしたところ、ものすごい時間がかかる。というか表示されない。
どうやらadminコンソールはインターネットに接続して更新の確認などをするらしい。
そのためプロキシ環境だと設定が必要とのこと。

[glassfishインストールディレクトリ]/domains/[domain]/config/domain.xml
を編集する。

java-configタグのjvm-optionsを追加する。

adminコンソール使用時にネットワークに接続しない

<jvm-options>-Dcom.sun.enterprise.tools.admingui.NO_NETWORK=true</jvm-options>

↑これは意味ないことが判明。かわりに「インターネットにつながらない環境でadminコンソールが開くようにする」の方法でやる。

ロキシー設定

<jvm-options>-Dhttp.proxyHost=192.168.XXX.XXX</jvm-options>
<jvm-options>-Dhttp.proxyPort=XXXX</jvm-options>

これで比較的早くadminコンソールが開くようになる。

インターネットにつながらない環境でadminコンソールが開くようにする
[インストールディレクトリ]/glassfish/modules/console-updatecenter-plugin.jar
を削除するなりリネームするなりする。

GlassFish v3 をubuntu(10.4 LTS)にインストールする

sun-java6-jdkをインストールする

GlassFish v3はopen-jdkでは動かない(XMLのパースあたりでエラー?)のでsun-java6-jdkをインストールする

sudo apt-get install sun-java6-jdk

インストールできないぜ的なメッセージが出たら以下をためす。
ubuntu(10.4 LTS)から?はsunのjdkはオプション扱いになったらしい。

sudo add-apt-repository "deb http://archive.canonical.com/ lucid  partner"
sudo apt-get install sun-java6-jdk

それでもだめなら以下を試す。

sudo apt-get update

デフォルトJDKを選択する

sudo /usr/sbin/update-alternatives --config java

GlassFish v3 のインストール

http://download.java.net/glassfish/3.0.1/release/glassfish-3.0.1.zip
を任意の場所にダウンロードする。

以下を行う

sudo unzip glassfish-3.0.1.zip 
sudo mv glassfishv3 /opt
sudo useradd --system glassfish -d /opt/glassfishv3
sudo chgrp -R admin /opt/glassfishv3
sudo chown -R glassfish glassfishv3
cd glassfishv3
sudo chmod -R +x bin/
sudo chmod -R +x glassfish/bin/

これで設定は完了。
動かしてみる。

sudo -u glassfish bin/asadmin start-domain domain1

http://[your host]:8080/
にアクセスしてみる。「Your server is now running」という画面がでたら起動成功。

/etc/init.d/の設定

ファイルを作成

sudo vi /etc/init.d/glassfish

以下の内容を記述して保存

#! /bin/sh 

GLASSFISHPATH=/opt/glassfishv3/bin 

case "$1" in 
start) 
echo "starting glassfish from $GLASSFISHPATH" 
sudo -u glassfish $GLASSFISHPATH/asadmin start-domain domain1 
;; 
restart) 
$0 stop 
$0 start 
;; 
stop) 
echo "stopping glassfish from $GLASSFISHPATH" 
sudo -u glassfish $GLASSFISHPATH/asadmin stop-domain domain1 
;; 
*) 
echo $"usage: $0 {start|stop|restart}" 
exit 3 
;; 
esac 
: 

実行権限の付与

sudo chmod a+x /etc/init.d/glassfish 
sudo update-rc.d glassfish defaults 

止めてみる

sudo /etc/init.d/glassfish stop

とまったら成功。

これでインストール完了。


参考URL:
http://skytteren.blogspot.com/2009/05/installing-glassfish-v3-on-ubuntu.html
http://www.techiegyan.com/2010/05/07/installing-sun-jdkjre-on-ubuntu-10-04-lts/

Androidのすすめ

先月docomoからでたHT-03Aを買ったんだけど、知り合いのdocomo販売の人に聞くと

「何がいいのかわからない」

つうことらしい。キャンペーンとかを大々的にやってるけど、そもそも販売員があんまりわかってないらしい。

おし。俺がおしえたる!!

前提

前提としてHT-03Ai-modeが使えない。
そこら辺が今までの携帯ユーザーには??なところなんじゃないかな?と思う

機能対比

メール機能

基本的にGmailを使う。
プッシュ配信してくれるのでメールが届くと通知してくれる。PCからもチェックできるのでとても便利。現状PCからなら互換性のある絵文字が使える。

i-modeメール

i-mode.netを契約するとwebサイト経由でdocomo.ne.jpのメールアドレスが使える。さらに、「新着i」というソフトをインストールすると、数秒間隔でメールを確認しに行ってくれて、あれば通知してくれる。つまり、i-modeメールは普通に使える

デコメ

あんまり知らんけど、HTMLメール送ったらええんちゃうの?

動画・音楽

mp3やwmaなどの音楽を入れれば聴ける。というか好きな再生ソフトをいれればどんな形式だって聞ける。つまり自由にやってくれ。Youtubeの動画も7.2Mbpsの通信速度(普通の携帯と比べたら超早い)で快適に見られる。

iコンシェル

何か最近人気ある?機能らしい。よくしらないけどRSSリーダーいれたらええやん!Googleカレンダー使こたらええやん!!クーポン自動取得するアプリあったから入れたらええやん!!しかもタダやし!!

iチャネル

これこそRSSリーダーいれたら完了っすよね?

Webサイト閲覧

7.2Mbpsの通信速度で快適なPCサイトWebブラウジング

携帯サイト

携帯サイトビューワーというソフトを入れれば見れる

位置情報・地図

最強の地図GoogleMapとGPSの組み合わせで右に出るものなし!!

ゲーム

好きなの入れてください。スーファミレベルの(言いすぎ?w)ゲームがごろごろありまっせ?しかもタダやし!!

海外で使う

普通に使えます

着うたとか

好きな曲をいれて着信音に設定できる

デスクトップのカスタマイズ

もうなんでも好きなウィジットいれてアプリのショートカット作ってフォルダ作って、好きなようにしてください。

結局今までの携帯でできてHT-03Aでできないこと

  • オサイフケータイ
  • 2in1

くらい?

すごいところ

  • 7.2Mbpsの通信速度
  • 好きなソフトをいれてやりたいことやり放題
  • その気になれば好きなアプリ作れちゃう


というわけで、すごいやつなんです。
え?PCあんまり使えない?ソフト入れるくらいできるでしょ〜。ボタン押すだけだぜ?


以上。

今の俺に足りないもの

今のプロジェクトでフレームワークを作る仕事(といっても補佐的な)をしてる。
で、そのフレームワークを中国の開発者に展開するために現地に行ってきた。

当初の予定では補佐的な立場だったのに、開発者42人(日本語あんまり通じない)の前で説明することになってしまった。

とにかく緊張するし、理解してもらえるように話すの難しいし、開発者の反応が薄いし、もう最悪だった。
夜の食事会で個人個人に聞いてみたら意外とわかってくれてたのがせめてもの救いだったけど、当然先輩からはダメ出しを食らってしまった。

  • しゃべりが固い
  • 聞き手を見てない
  • 声のトーンが同じ

その人はITのイベント?とかで講演しちゃうような人なので重みが違うね。。。
で、解決策も教わった。

  • 冗談の一つでも混ぜれば空気が変わって話しやすくなる(聞く方もちゃんと聞いてくれる)
  • 全てのオーディエンスに視線を向けると集中して聞いてくれる
  • 重要なことは特にトーンを上げて

勉強になります。

そういえばこの業界に入って3年目だけど、日本人相手にもそんなにプレゼン的なことやったことないなぁ。。。そしていきなり日本語通じない中国人だもんなぁ。
スクリーンに映しながらコード書くのとか緊張したなぁ。。。

「場数を踏めばできるようになる」って言われたしちょっとそういうのも勉強してみようかなぁと思った成田空港からの帰り道。。。

以上。

Selenimを改造する

前回の続き

Seleniumをプロジェクトに導入するにあたって懸念するところがいくつかあった。

1.画面に変更が入るとテストコードを書きなおす必要がある

まぁこれはある程度は仕方がないかなと思ってる。
ただ、画面に変更が入るということは

    • 画面設計書を修正する
    • テスト仕様書を修正する
    • JSPなどを修正する
    • ロジックを修正する
    • テストコードを修正する

っつぅ感じで手間がかかりまくる。
設計書やJSPからテストコードが自動生成できたらかっこいいなぁ。

2.テスト対象画面にたどり着くのが大変

例えば共通で使う画面や必ず通る画面とかの処理をテストメソッド毎にバカみたいに書くのか?ってこと。
その共通の画面に変更が入ったら全テストメソッドをバカみたいに書きなおすのか?ってこと。

こんなバカみたいなことは絶対にやりたくない。
この辺をうまいことできるフレームワークを考える必要がありそう

3.DOMとかXPathとか新人クラスのテスターは絶対間違える

これはどうしようかねぇ。難しいところだ。
上で書いたとおり設計書やJSPからコードが生成できれば回避できる?かも。。

4.Selenium自体に多少バグ(仕様なのかも)がある

これは回避できる方法があるんだけど、知らない人は普通にバグにはまってしまうだろう。
だからこれを回避するような共通処理をかます必要があるかな?と考えた。

さらなる要望

テスト毎にデータを変えられたらいいねっつぅこと。
これはdbunitを使ってできる。大した問題ではないな。

で?どうする?

まず、2.を解決するために、各画面をテストから切り離そうかと思う。

    • ページクラス・・・1画面をあらわすクラス。画面項目を保持し、操作を提供する。
    • テストクラス・・・ページクラスを生成し、操作する。

こうすることで、画面に変更が入ってもテストクラスで修正する必要はなくなったりする。
ただ、項目の追加、削除などは修正する必要がある。でもコンパイルエラーになるので修正すべき箇所が一目瞭然になるっつうメリットがある。

さて、2.が解決したところで思いついた。
画面設計書からページクラスが、テスト仕様書からテストクラスが自動生成できそうだな。
というわけで1.、3.も解決?
まぁ画面設計書は多少詳しく書かなきゃいけなくなるのと、フォーマットを決める必要があるけどね。

4.に関しては、ここまでくるとちょっとしたテストフレームワークになってきたのでいっそのことSeleniumを隠してしまおうかな?と。そうすればSeleniumのバグとかは全部見せなくて済むしね。

テストコードができるまで
    • 画面設計書を書く
    • テスト仕様書を書く
    • 設計書からテストコードを生成
テストの実行


うん。これならいい感じだな。これで行こうかな。

所詮趣味だけどね〜

以上

Seleniumでテストする

ここ最近はWA○sとかいう腐れFuckin'フレームワーク?のせいで地獄月間が続いて、全然更新できなかった。しんどかった。

で次のプロジェクトでSeleniumを使ってテストをするらしいので個人的に調査。。
そのための殴り書き。。

Seleniumって何よ?

http://seleniumhq.org/

  • Webブラウザからのテストを自動でやってくれるっつう優れもの。
  • しかもオープンソース
  • いろんな言語に対応してる。
  • いろんなブラウザに対応してる。
  • javaだとJUnit動かすだけでできちゃう。
  • 画面キャプチャも取れちゃう

という感じ。使い方によっては便利なヤツかもしれない。

使うといいことあるの?

コードを変更するたびに
ブラウザを開く→URLを入力→Formに値を入力→クリック→・・・

っつぅめんどくさい作業がボタンひとつでできるからとても便利かなぁ。
1回や2回だと手動でやった方が早いけど、10回、20回やると完全に便利だ。

導入するにあたって懸念するところ

  • 画面に変更が入るとテストコードを書きなおす必要がある
  • テスト対象画面にたどり着くのが大変(ログイン→メニュー→AA→BB→CC→対象画面とかね)
  • DOMとかXPathとか新人クラスのテスターは絶対間違える(いちいち教えるのもめんどいし)
  • Selenium自体に多少バグ(仕様なのかも)がある(ポップアップとかで確認)

で?結局どうなのよ?

個人的には使ってみたい。ただしこのままじゃ余計めんどくさくなる気がするので、改造することが前提。
なので改造する時間がもらえるなら使いたい。もらえないならう〜ん。。。という感じ。


つうわけでこれから改造Seleniumの仕様を考えてみようと思う。。続く。。。

以上。