StAX上でMySQLとScalaでTropyクローンを動かしてみるんだぜ。
しばらくLiftってなかったので、Liftネタをやりますよー。
今回は、StAXでScalaっていうかLiftを動かしてみるって企画なんだ。
ついでに、StAXで提供されているMySQLも使ってみようぜって勢いで。
動かすアプリは、前に作ったTropyクローンのLift版(Liftropy)。
詳しくはこちらのエントリで。
Scala勉強会@関東#2でLiftについて発表してきたんだぜ? - ゆろよろ日記
liftropy/target at master · yuroyoro/liftropy · GitHub
scala2.7.1とLift 0.9で動いてます。
Liftの最新版でやろうと思ったけどめんどくさいので。
scalaで書かれているからって、コンパイル済みのclassファイルとscalaのjarがWEB-INF/libに入ってりゃ動くだろうと思ってやってみたら、そのとおりですぐに動いたよ。
これが動いてるものです。
http://liftropy.yuroyoro.staxapps.net/
手順
StAX上でプロジェクトを作ります。
作ったら落としてきます。
やりかたはこっち 見てね。
で、前作ったLiftropyからsrc/main/をコピって、落としてきたプロジェクトのsrc/mainにコピります。
pom.xmlもコピっておきます。
MySQLを使うので、まずはpom.xmlを修正します。dependencyにMySQLのDriverを追加です。
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.0.4</version> </dependency>
DBの設定をする
で、作ったDBにアプリケーションから接続するには、web.xmlに
なので、web.xmlにこいつを追加。
<resource-ref> <res-ref-name>jdbc/DB名</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
ってか、DBはIPとポートが公開されているので、コマンドラインからも接続できるよ。
あと、ローカルの開発環境でもDBを使えるように、conf/stax-application.xmlに以下のように追加します。
<resource name="jdbc/DB名" auth="Container" type="javax.sql.DataSource"> <param name="username" value="ユーザー名" /> <param name="password" value="パスワード" /> <param name="url" value="jdbc:stax://DB名" /> </resource>
LiftからMySQLを使うには、Boot.scalaをいじります。これでContextからDataSourceをLookupして、Liftで使えるようになります。
object DBVendor extends ConnectionManager { def newConnection(name: ConnectionIdentifier): Can[Connection] = { try { var ctx:Context= new InitialContext() var obj = ctx.lookup("java:comp/env/jdbc/DB名") var ds:DataSource = obj.asInstanceOf[DataSource] var conn = ds.getConnection() Full(conn) } catch { case e : Exception => e.printStackTrace; Empty } } def releaseConnection(conn: Connection) {conn.close} }