SailfinでMySQLを使えるようにするための手順。

1. MySQL JDBCドライバをhttp://dev.mysql.com/downloads/connector/j/5.1.htmlからダウンロード。

2. ダウンロードしたZIPファイルを解凍する。

3. mysql-connector-java-5.x.x-bin.jar を{Sailfinをインストールしたディレクトリ}\lib にコピーする。

4. Sailfinを 'asadmin start-domain domain1'コマンドを実行して起動する。ちなみにasadminコマンドは{Sailfinをインストールしたディレクトリ}/binにあります。

5. Sailfinの管理画面へとログインします。デフォルトではhttp://localhost:4848/login.jsfになっています。インストール時にsetup.xmlなどで変更していなければ、ユーザ名とパスワードはそれぞれadmin,adminadminとなっています。

6. 管理画面の左側にあるCommonTaskのResourcesメニューをクリックし、JDBCメニュー配下にあるConnection Poolsをクリックします。

7. Resource Typeとしてjavax.sql.ConnectionPoolDataSourceを、Database vendorとしてMySQLを選択し、新しいConnectionPoolの名前を入力します。

8. 後はウィザード通りに進んで最後に"Ping"ボタンを押してConnection Poolが正しくセットアップされたかどうか確認してください。

9. 続いてJDBCメニューにあるJDBC Resourcesをクリックします。

10. JDBC Resourceを特定するのに使われるJNDI Nameを入力します。先程作成したConnectionPoolを'Pool Name'として選択します。

11. OKボタンを押して終了となります。コードでは先程指定したJNDI Nameを指定してデータソースにアクセスすることができるようになります。

今回は大学のプロジェクトの関係でmod_jkによるApache-Sailfin連携環境を構築する機会があったので未来の自分のためにもここで紹介しておこうと思う。というのも、一年もすれば確実にやり方を忘れてしまいそうなので。。。
さて、mod_jkを使ったApacheとTomcatの連携はよく知られているけど、ApacheとSailfinでも結果的に同じことが可能であった。ただやり方はちょっと面倒くさい。
ちなみにSailfinとは
  • オープンソースアプリケーションサーバー
  • ベースはGlassfish
  • Sip Servletが使える
  • 管理・Netbeansを使うと開発が簡単
というアプリケーションサーバーである。ベースがGlassfishということなので、この記事あたりを参考にすれば普通にできるかなぁと思ったので今回試してみました。

構築環境:
OS: Ubuntu Server 8.04
Apache(httpd): Apache 2.28
mod_jkのバイナリ 1.2.27

1. mod-jkをインストールする。


mod-jkが我がサーバーにはないので、まずはここからダウンロードする。
Apacheのバージョン情報に応じてダウンロードするものが違うみたいなので、下記のコマンドを実行し出力されたApacheのバージョンに合ったモジュールをダウンロードする。

/usr/sbin/apache2ctl -v (もしくはhttpd -v など実行)

ダウンロードしたモジュールをmod-jk.soとリネームして/usr/lib/apache2/modulesに配置する。
続いてmod_jk.confとworkers.propertiesを下記を参考にして作成し、/etc/apache2/confに配置する。

[mod_jk.conf]
JkWorkersFile /etc/apache2/conf/workers.properties
# Where to put jk logs
JkLogFile /var/log/apache2/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel debug
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
# JkOptions indicate to send SSL KEY SIZE
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat: set the request format
JkRequestLogFormat "%w %V %T"
# Send all jsp requests to Sailfin
JkMount /examples/*.jsp ajp13
# Send all XMLTester/XmlService requests to Sailfin
JkMount /XMLTester/XmlService ajp13

(注)JkMount->場合によってはVirtualHostごとに設定が必要。

[workers.properties]
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.cachesize=10
worker.ajp13.cache_timeout=600
worker.ajp13.socket_keepalive=1
worker.ajp13.socket_timeout=300
次は/etc/apache2/mods-availableにmod_jk.confとmod_jk.loadを作成し、
/etc/apache2/mods-enabledからシンボリックリンクを張る。

cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/mod_jk.load mod_jk.load
sudo ln -s ../mods-available/mod_jk.conf mod_jk.conf

[mod_jk.load]
LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so
[mod_jk.conf]
<IfModule mod_jk.c>
   Include /etc/apache2/conf/mod_jk.conf
</IfModule>

最後にApacheを再起動します。
sudo /etc/init.d/apache2 restart

2. AJPコネクタモジュールなどをインストール。

Apache Jakarta Projectからcommons-logging-1.1.1.jarを入手します。
Tomcat 5.5.16のserver/libに含まれている下記の2ファイルをコピーします。

  1. tomcat-ajp.jar
  2. commons-modeler.jar
ここで下記3ファイルをsailfinがインストールされたディレクトリ(例えば/usr/share/sailfin)のlibディレクトリにコピーします。
  1. tomcat-ajp.jar
  2. commons-logging-1.1.1.jar
  3. commons-modeler.jar
Sailfinをあらかじめ起動しておき、SailfinのbinディレクトリにあるasadminコマンドでJVMオプションを追加します。

asadmin 
create-jvm-options -Dcom.sun.enterprise.web.connector.enableJK=8009

(Sailfinディレクトリ)/domains/(ドメイン名)/configディレクトリに以下の内容でsailfin-jk.propertiesファイルを作成。他サイトの情報によるとこれをやらないとREMOTE_USER情報がSailfinに渡されないとのこと。
 
[sailfin-jk.properties]
tomcatAuthentication=false

続いて設定するドメインに応じて下記コマンドを変更した上で実行し、Sailfinが
sailfin-jk.propertiesをロードするようにする。

asadmin create-jvm-options
-Dcom.sun.enterprise.web.connector.enableJK.propertyFile=
/usr/share/sailfin/domains/domain1/config/sailfin-jk.properties


最後にドメインを再起動して終了です。
後は適当なJSPファイルを使ってちゃんと動いているか確認してください。
asadmin stop-domain domain1
asadmin start-domain domain1

お疲れ様でした。
[参考サイト]
http://www.office-matsunaga.biz/dev/description.php?id=6
http://weblogs.java.net/blog/jfarcand/archive/2006/03/running_glassfi_1.html
今日は今取り組んでいる電話会議プロジェクトのログイン画面を公開したいと思います。
一日でも早く友人たちを使ったテストを始めたいですねw。WebUIの経験はあまり無いので、デザインが微妙とかいうクレームはなしの方向でお願いします(笑)。

WebUI_Concal.JPG

疲れました!

| | Comments (0) | TrackBacks (0)
今日の夜にキャリアフェアのあったボストンから帰ってきました。
いや~、久しぶりにたくさんの日本人を見ました。
そして疲れました、特に一日目のハプニングのせいで。
というのも、出発日に予約しておいた飛行機がメカニックトラブルでキャンセルされ、午前中の面接をキャンセルする羽目になり、それらを午後に詰め込んだためスケジュールがなかなか激しいことに。。。会場を走り回りましたw。
ちなみに今回受けた5社は全て外資系になりました。IT系の会社と外資系投資銀行ですね。
2年前のキャリアフォーラムでは応募しなかった金融系の会社を今回受けてみたのですが、なかなか勉強になりましたね。それにしても外資系投資銀行は受けてる人のレベルが高いな~と。
ディナーにも連れてってもらったりしたのですが、MIT、UPENN、Columbiaなど名の通った大学の方々がたくさんいました。
とにかく、僕的には結果も含めて満足のいくキャリアフォーラムになりましたね。
あまり時間はかけられませんが、納得のいく結論を出したいです。
今日は疲れたのでこれから爆睡します。おやすみなさい。
今週末はついにボストンキャリアフォーラムです。無職の管理人も職を探しに行ってまいります。
もう受ける企業は決まっているので、後は現地に行って面接に臨むだけであります。
ちなみに今日は縁起を担ぐためにとんかつを食べました(笑)
うまくいくといいですなぁ。というのも、やっぱ自分は日本で働きたいので。
でもあんまり給料が安いとこは嫌ですけどね。

話は変わって、今学期から取り組んでいる電話会議プロジェクトがもう少しでオープンテストの段階まで持っていけそうです。今週かボストンから帰ってくる来週あたりに先生に見せてOKがでればいいかなあと。ふっふっふ、ついに購入したサーバーマシーンの出番がやってきそうだw。

サーバー稼働中!

| | Comments (0) | TrackBacks (0)
まだ公開はしていませんが、サーバーのセットアップは数日前に全て終了しました。
いや~、メールサーバーやバーチャルホストの設定などいろいろ勉強になりました。
ちゃんとスパムフィルターやウィルススキャンの設定もしましたよ~!

というわけで、とりあえずサーバーのセットアップが終わったので来週からはまた例のプロジェクトの開発に取り組めそうです。公開できるレベルにまで達したらこのブログでも発表したいですね。
まあトラフィックはかなり低いですがw。
まずメールユーザのアカウントの設定をWebで簡単に行えるように postfixadmin をインストールします。
UbuntuのRepositoryには入っていないので、

http://sourceforge.net/projects/postfixadmin/
から現時点で最新版のpostfixadmin2.2.1.1all.debをダウンロードしてインストール。


dpkg -i postfixadmin_2.2.1.1_all.deb

上記コマンドを実行するとPostfixadminは"/usr/share/postfixadmin/ "にインストールされます。
設定ファイルは"/etc/postfixadmin/config.inc.php"です。
またApacheにaliasが追加されます → /etc/apache2/conf.d/postfixadmin

続いてPostfixadminの設定ファイルを編集します。

vim config.inc.php
[...]
$CONF['configured'] = true;
$CONF['postfix_admin_url'] = 'http://example.com/postfixadmin'; 

$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'YourPassword'; //Change here
$CONF['database_name'] = 'postfix';

$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['encrypt'] = 'cleartext';


設定ファイルの中に記載されているドメインを自分のものと置き換えます。

cd /usr/share/postfixadmin
sed -i "s/\@change-this-to-your.domain.tld/\@example.com/g" config.inc.php
sed -i "s/change-this-to-your.domain.tld/example.com/g" config.inc.php
sed -i "s/Return to example.com/Return to www.example.com/g" config.inc.php

Postfix用のデータベースとユーザーを作成します。


mysql -u root -p
mysql> create database postfix;
mysql> grant all privileges on postfix.* to 'postfixadmin'@'localhost'
                        identified by 'YourPassword!';
mysql> flush privileges;
mysql> \q

ブラウザを開いてhttp://yourdomain.com/postfixadmin/setup.phpへ移動します。
SetUpCheckerが全ての項目に対してOKと表示するか確認。
場合によってはphp5-imapなどをapt-getでインストールする。
OKならAdmin用のEmailAddressとパスワードを登録。 登録し終わったらsetup.phpは削除。
続いてhttp://yourdomain.com/postfixadmin/へと移動。 先程setup.phpで作成したAdminアカウントでログインできるか確かめておく。 (注...まだドメインやメールボックスは作成できません)

次回はPostfix本体の設定を暇なときに書きます。
今回はテキストパスワードによるログインを無効化し、公開鍵暗号方式によるログインを可能にする。
鍵方式によるログインの方が攻撃者の侵入を防ぎやすいからです。
これでセキュリティ的にはかなり上昇します。

初めての方は下のリンク先にあるページでも見てみるといいと思います。
Puttyで鍵交換方式によるSSH接続

(メモ)
1. Puttyで作成した公開鍵をOpenSSH形式に変換するコマンド。
  • ssh-keygen -i -f id_rsa.pub >> authorized_keys
2. 転送した公開鍵ファイル(id_rsa.pub)を忘れずに削除。
3. ターミナルエミュレーターとしてPoderosaを使う場合はPuttyで生成した秘密鍵を「ssh.com」形式へとエクスポートする必要あり。

鍵のセットアップが終わってテストログインにも成功したら再度sshd_configファイルを編集します。

1. #PasswordAuthentication yesの行をUncommentして以下のように修正。
これで秘密鍵を所持していないとログインできなくなりセキュリティが向上します。
  • PasswordAuthentication no
2. 最後に新しい設定を有効にするためSSHを再起動!
  • sudo /etc/init.d/ssh restart
メモなので細かい説明はありません。

1. オリジナル設定ファイルのバックアップ
  • sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original
2. バックアップファイルへの書き込み禁止
  • sudo chmod a-w /etc/ssh/sshd_config.original
3. sshd_configファイルをエディタで開き以下の項目を修正または追加

  • PermitRootLogin no
  • Port 2222 (追加)
    •  (LANでは22番、外部からのアクセスの場合は2222番ポートを使うようにする。ルーターでは2222番ポートのみForward。これで22番ポートを狙ったツールによる攻撃を防ぐ。)
  • LoginGraceTime 20 (ログインするまでの時間-20秒経ったら遮断する)
  • Uncomment Banner /etc/issue.net
  • AllowGroups sshlogin (追加)
4. sudo vim /etc/issueでログインの際に表示される警告バナーを作成。

5. symbolic linkを作成。
  • sudo ln -s /etc/issue /etc/issue.net
(内部コンソールからのアクセスでは警告メッセージが表示されないようにするにはissue.netのみを作成し、/etc/issueは空にしておく。)

6. sshloginグループに所属するユーザーのみログイン可能にする。
  • sudo addgroup sshlogin
  • sudo adduser <username> sshlogin

7. 最後に新しい設定を有効にするためSSHを再起動!
  • sudo /etc/init.d/ssh restart
自分が今使っているのはThinkPad T60pなので、ビデオカードは512MB ATI Mobility FireGL V5250というWorkStation用のを積んでいるのだ(爆)
ベースが確かMobility Radeon X1600なので12個のPixel Shaderと5個のVertext Shaderユニットを積んでいるはず。
以前から何となくどれくらいのパフォーマンスかは想像できていたのだがベンチは走らせたことがなかったので、ちょっと試しにFFベンチだけ走らせてみた。ちなみにFireGL用のドライバは普通のRadeon向けのドライバと違ってかなり安定性が重視されているため3Dゲームのパフォーマンスは同等スペックのRadeonより多少落ちると思われます。
さて、結果は以下のようになりました。
(注)CPUはCore2 Duo T7600(2.33GHZ) MemoryはDDR2 667MHZ 1GB x 2です。

FINAL FANTASY XI Official Benchmark 3
LOW: 6876
HIGH: 4319

まあファイナルファンタジーが快適にプレイできるスペックであるというのは間違いないですなw。
GeForce 9300M GSとCore2 Duo T9600(2.8GHZ)を搭載した最新のVaio TypeZでLow:7739 High:4946みたいだから悪くない結果ですな。もう買ってから2年近く経ちますし。
さて、これだとWindows Vistaのグラフィックススコアはたぶん4.2~4.5くらいなのかな。
どれくらいから快適にAeroが動くんだろう。。。3.5くらいからですかね?
日本の自宅にあるファンレスビデオサーバーに続き第2弾w。
半分はリサーチ目的、半分は遊びとして自分の部屋に設置するサーバーマシーンであります。

大まかなスペックは以下の通り。

Barebone: Shuttle XPC SG31G2 (Chipset:NB:Intel G31 SB: ICH7, Video: Intel GMA3100)
CPU: INTEL PENTIUM DUAL CORE E2160 1.8GHz (1MB L2 Cache)
Memory: DDR2 667MHZ 2GB (1GB x 2)
HDD: Seagate Barracuda ES 250GB 7200RPM(16MB Cache)

まあとりあえずは十分なスペックですね。というか、あんまりハイスペックにしちゃうとファンの音がうるさくなるから無理w。
しかし、これ全部で299ドルなんだから安いでしょう。
というのも、CPUはBulk版でShuttleのベアボーンはShuttleのRecertifiedであるため新品より4割くらい安かったのだ。でも届いたのは未使用の新品同様の品だったからかなりお得!
これにとりあえずUbuntu Server Editionをインストールするつもり。
運用は固定IP/独自ドメインでいきます。
ソウトウェアとしてはOpenSSH,Apache,Derby Database,Sailfin Application Server, Asteriskなどをインストールします。
ちなみにAsteriskっていうのはIP電話に対応したPBX(構内交換機)を実現できるソフトウェアです。
構内交換機とは要するに中継装置のことで複数の構内電話機を公衆電話回線網に接続して使用するのに使います。Asteriskは単にIP電話をするだけじゃなくて転送、ボイスメール、自動応答などの機能もあるため非常に人気があります。しかもオープンソースですからね。もちろんSIPにも対応しているので、先生の勧めもありjVoiceBridgeというSunが開発しているVoIP対応のaudio mixer(この機能で会議電話が実現できた)からAsteriskに乗り換えることになったのであります。
僕が開発中のIMSの機能を取り入れた電話会議システムですが、何とか11月中にきちんと動作するプロトタイプくらいは完成させたいです。しかし、コードの量が結構多いのでユニットテストが今から憂鬱。テストコードは実際のコードの3倍くらいになりそう。。。
shuttleG31.JPG
サンプルのおかげでZimletの開発は非常に順調です。
後はアプリケーションサーバーとのやり取りに必要なXMLファイルが守らなければならない規則をXML Schema(W3C)を使ってちゃんと書いてあげれば初期段階のテストができる。
全体のArchitectureの設計もできたし、研究室の先生が僕用にサーバーを一台買ってくれることになったから今後が楽しみ!まあコーディングの方はまだ山積みですがねw、完成までは。
ちゃんとしたWeb Interfaceも作らなければいけないので。
というか、今の自分のスキルでは厳しい部分もあるけど、そこは自分でいろいろ調べたりして勉強して乗り越えたい。
というのも、この今取り組んでるConcal Projectは何としても世に出したいと思っているのです。
あ、下の写真はまだまだ開発途中ですがConcal Zimletです。
というか、ロゴはもうちょっとちゃんとした専用のやつを作らないといけないですね。

Concal_UI_Beta.JPG
今学期のルームメイトはアメリカ人1人とインド人2人です。
僕の隣がマット君というアメリカ人なんだけれども、専攻も同じで結構いい奴です。
入寮のときに任天堂のWiiを持ってきてくれていたので、さっそく遊ばせてもらってます。
Wii、夏にインターン先の会社で一人やっていたときは微妙なおもしろさだったが、複数人でやるとやっぱり楽しい!Wii Sportsしかやってませんが今のところテニスとボクシングがお気に入り。
でもボクシングはやったら結構疲れますw。
インド人2人のルームメイトも結構いいやつだし、今学期はなかなか快適な共同生活を送れそうです。
実験用に新しくドメイン名を確保してみた。
DNSレコードもいじれて、Whois Databaseには代行業者の情報が載るようにしたからちょっとだけ高くなった。料金は年約20ドルです。まあ、安いのか高いのかよくわかりませんねw。
あ、ドメイン名というのはインターネット上の住所であるIPアドレス(211.115.107.169など)を人間がわかりやすいように表現したものです。んで、このドメイン名、基本的に先着順で買うんですよね。
人気のあるキーワードが入ったドメインはもうとっくにないので、いいのを探すの大変でした。
んで、今回僕が選んだのがこれ⇒http://www.future-mobile.net

そう、future-mobile.netです。本当はfuture-mobile.comが良かったんだけどもう取られていたから断念しました(涙)

そのうちこのドメインを使っていろいろ試してみたいと思います。
大学で取り組んでいるプロジェクトにどうしても必要なためJavaScriptの勉強を始める。
今学期は授業でC++もやらされそうだし洒落にならんな(汗)

ちなみに今作ろうとしているのはZimbraというEメールおよびスケジュール管理などの機能を備えたコラボレーションソフトウェア向けのプラグインです。プラグインは俗にZimletと呼ばれています。
9月下旬までに完成させねば。。そしてApplication Serverと繋げてテストじゃ!

本日の叫び:
Solaris嫌じゃ。Resume書かなきゃ。再来週はキャリアフェア!

Recent Assets

  • WebUI_Concal.JPG
  • shuttleG31.JPG
  • Concal_UI_Beta.JPG
  • N810WiMAX.jpg
  • JavaWorld.jpg
  • Concal_Arch.JPG
  • n800_wikipedia_full.JPG
  • nokia_n800_eijiro2.JPG
  • nokia_n800_eijiro.JPG
  • n800_vga_camera.JPG

Find recent content on the main index or look in the archives to find all content.