Apatna Jaxer を自分のサーバに入れてみる

Apatna Jaxer とは?

サーバサイドJavascriptを実現するアプリケーションサーバ。
Apatna社自身は Ajaxサーバ と表現しているようです。
構成としては、Apache と Ajaxサーバ を個別に稼動させ mod_jaxer というモジュールで連携させる感じ。

Firefox3と同じエンジンを利用していて、JavaScriptの標準に準拠。
サーバサイドの処理においてもDOM操作が可能で、protptype.jsやjQueryなどもサーバサイドで利用可能です。
さらに、Jaxer Framework というAjaxサーバで使える関数群が用意されていて、ファイル操作やMySQLなどのデータベース接続もJavaScriptで行えます。

とにかく、JavaScriptです。
Perl,Ruby,PHP,Python,etc...なんて使いたくないって人には最適です。


Apatna Jaxer のダウンロード

Download Aptana Jaxer(Aptana Jaxer ダウンロードページ)
Windows版、Mac版、Linux版がそれぞれ用意されてます。

これらのパッケージにはApache2.2もバンドルされていて、本来は事前にApacheを用意しておく必要はない。
しかし、今回は既に構築済みのApacheにJaxerを入れようと思ったので、そのように環境を設定していこうと思います。

自分のサーバはLinuxなのでLinux版をソースディレクトリにダウンロードしておきます。(この時点での最新は Jaxer for Linux build 0.9.3.2156 でした)


Apatna Jaxer の設置

まず、ダウンロードしたファイルを展開します。
unzip Jaxer_package_withApache.zip
すると、AptanaJaxer というフォルダにファイルが展開されます。
(もし、バンドルされているApacheを利用する場合はこのAptanaJaxerを '/opt' に配置すれば簡単な設定で、すぐに利用可能です)
次にAptanaJaxerをソースディレクトリから設置箇所に移動します。
私の場合はApacheディレクトリと同じ階層に設置しました。
以後、このディレクトリパスを [APP_PATH] 、Apacheディレクトリパスを [APACHE_PATH]、AptanaJaxerディレクトリパスを [JAXER_PATH]、公開トップディレクトリを [DOCUMENT_ROOT] と記述します。


mod_jaxer.so の設置

'[JAXER_PATH]/jaxer/connectors' の中に mod_jaxer.so というApacheモジュールが入っているので、それをApacheモジュールディレクトリにコピーします。
cp [JAXER_PATH]/jaxer/connectors/mod_jaxer.so [APACHE_PATH]/modules/mod_jaxer.so
コピーしたら httpd.conf に、
LoadModule jaxer_module modules/mod_jaxer.so
という記述を追加して mod_jaxer.so を読み込む設定にします。


Apache の設定

'[JAXER_PATH]/jaxer/confs' の中に jaxer-linux.httpd.conf というlinux用の設定ファイルがあります。
これを下記のようにコピーします。
cp [JAXER_PATH]/jaxer/confs/jaxer-linux.httpd.conf [APACHE_PATH]/conf/extra/httpd-jaxer.conf

コピーしたら httpd.conf の最後に、
Include conf/extra/httpd-jaxer.conf
という記述を追加して、httpd-jaxer.conf をhttpd.confにIncludeします。


httpd-jaxer.conf の修正

httpd-jaxer.conf 内に記述してあるパス等を、自分の環境に書き換えます。
今回は下記のように書き換えました(コメントは削除してあります)。
<Directory "[JAXER_PATH]/jaxer/aptana">
    Order Deny,Allow
    Allow from all
</Directory>
Alias /aptana [JAXER_PATH]/jaxer/aptana

<IfModule jaxer_module>
  JaxerWorker localManagerWorker 127.0.0.1 4327
  <Location "/jaxer-server">
    SetHandler JAXER
  </Location>
  <Directory "[DOCUMENT_ROOT]">
    DirectoryIndex index.php index.php3 index.html index.htm index.html.var index.html.var index.html.redirect
    
    JaxerFilter localManagerWorker .html
    JaxerFilter localManagerWorker .xhtml
    JaxerFilter localManagerWorker .htm
    JaxerFilter localManagerWorker .php

    Order Deny,Allow
    Allow from all
  </Directory>
  <Directory "[JAXER_PATH]/jaxer/aptana">
    JaxerFilter localManagerWorker .html
    JaxerFilter localManagerWorker .xhtml
    JaxerFilter localManagerWorker .htm
    JaxerFilter localManagerWorker .php

    Order Deny,Allow
    Allow from all
  </Directory>

  <LocationMatch "/jaxer-include/">
    JaxerPassThrough
    Order Deny,Allow
    Allow from all
  </LocationMatch>
  
</IfModule>
まぁ、大体こんな感じなんだけど、この設定だと全体に影響を及ぼすので、バーチャルホストを利用して専用のドキュメントルートを設定するなり、Directory指定で部分的に JaxerFilter を適用する設定にしたりする必要がありそう。

なのでドキュメントルート直下に"jaxer"というフォルダを作成して、その中で"JaxerFilter"を設定した。(.htaccessで設定を上書きできれば一番良いのだが、JaxerFilterの上書き許可の指定方法がわからん)
<Directory "[JAXER_PATH]/jaxer/aptana">
    Order Deny,Allow
    Allow from all
</Directory>
Alias /aptana [JAXER_PATH]/jaxer/aptana

<IfModule jaxer_module>
  JaxerWorker localManagerWorker 127.0.0.1 4327
  <Location "/jaxer-server">
    SetHandler JAXER
  </Location>
  <Directory "[DOCUMENT_ROOT]/jaxer">
    DirectoryIndex index.php index.php3 index.html index.htm index.html.var index.html.var index.html.redirect
    
    JaxerFilter localManagerWorker .html
    JaxerFilter localManagerWorker .xhtml
    JaxerFilter localManagerWorker .htm
    JaxerFilter localManagerWorker .php

    Order Deny,Allow
    Allow from all
  </Directory>
  <Directory "[JAXER_PATH]/jaxer/aptana">
    JaxerFilter localManagerWorker .html
    JaxerFilter localManagerWorker .xhtml
    JaxerFilter localManagerWorker .htm
    JaxerFilter localManagerWorker .php

    Order Deny,Allow
    Allow from all
  </Directory>

  <LocationMatch "/jaxer-include/">
    JaxerPassThrough
    Order Deny,Allow
    Allow from all
  </LocationMatch>
  
</IfModule>

Jaxer の起動スクリプトの修正

'[JAXER_PATH]/scripts' の中にJaxerの起動/停止スクリプトが入ってるので環境に合わせて修正する。

[start.sh]
##3行目辺り
export JAXERBASE=/opt/AptanaJaxer
↓
export JAXERBASE=[JAXER_PATH]

##6行目辺りをコメントアウト
sleep 3
$JAXERBASE/scripts/startApache.sh
↓
#sleep 3
#$JAXERBASE/scripts/startApache.sh

[startJaxer.sh]
##76行目辺り
export JAXER_LOGFILE=file://$JAXERBASE/logs/jaxer.log
↓
export JAXER_LOGFILE=$JAXERBASE/logs/jaxer.log

[stop.sh]
##3行目辺り
export JAXERBASE=/opt/AptanaJaxer
↓
export JAXERBASE=[JAXER_PATH]

##6行目辺りをコメントアウト
$JAXERBASE/scripts/stopApache.sh
↓
#$JAXERBASE/scripts/stopApache.sh

Jaxer の起動と停止

Jaxerの起動:
[JAXER_PATH]/scripts/start.sh
Jaxerの停止:
[JAXER_PATH]/scripts/stop.sh
上記のコマンドで、Jaxerの起動と停止が行える。

Jaxerを起動したらApacheの再起動が必要なようなので、忘れずにApacheを再起動させる。


Jaxer の動作確認

Jaxerを起動し、Apacheを再起動したら、
http://[YOURDOMAIN]/aptana
にアクセスしてみよう。
こんなページが表示されます

うまくページが表示されましたか?
ページ左側に "Build: 0.9.3.2156" とBuild番号が表示されたらスクリプトも正常に動作していると思います。


サンプルの実行

Jaxer の動作確認がうまくいったら、サンプルページを表示させてみよう。
ドキュメントルート直下に用意した"jaxer"ディレクトリの中に下記を記述した index.html を作成する。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Language" content="ja" />
<title>Jaxer Sample</title>
<script runat="server">
  function init(){
    document.getElementById('build').innerHTML = "Build:" + Jaxer.buildNumber;
  }
</script>
</head>
<body onserverload="init()">
<div id="build"></div>
</body>
</html>
準備が出来たら、
http://[YOURDOMAIN]/jaxer/
にアクセスしてみる。

うまく動作すれば"Build:0.9.3.2156"のようにBuild番号が表示されるはず。
サンプル

表示されたら、ブラウザからソースを表示してみよう。
ちゃんと指示通りにDIVタグの中に文字列が挿入されているのが見てわかると思います。
ただ、htmlヘッダがグチャグチャにされて、xhtmlがValidじゃなくなってるのが残念。


まとめ

勢いで書いたので解りづらい説明になってしまいましたが、実際はほとんどサーバ設定をせずに動作させるようなパッケージになっています。
なので気軽に試せるのは間違いありません。
自分はあまりさわってませんが、サンプルソースとかAPIを見るとちょっとワクワクしますよ。


--
楽しそうなことはたくさんあるんだけど、気力がついていかねぇー。
Name
Email
Your website or blog
Comment
Security code (CAPTCHA™)