[Scala + Lift]HTMLのキャッシュ

Scala + Liftは、プロダクションモードで起動した場合には、htmlをキャッシュするみたいです。

自分自身は未確認ですが、確認方法は

GlassFishの場合

[設定] – [server-config] – [JVM 設定] – [JVM オプション]

の項目に
[text]-Drun.mode=production[/text]
を追加してGlassFishを再起動。

また、意図的にキャッシュを無効化するには

[scala]LiftRules.templateCache = Full(NoCache)[/scala]

と言う行をBoot.scalaに書く。

[Scala]LiftかPlayか

中身は全然濃いくないです。

単純に自分はどうしたらいいか、悩んでいることを書いてみるだけです。

Liftは、comet対応とかで、デフォルトだと接続がキープされたりするようだ。

少人数しかアクセスのないサイトで、リアルタイム更新を重視するのであれば

この方式で問題ないのだが、大人数接続で考えると、ちょっとややこしくなる。

接続をキープしない設定も出来るが。

また、ビューファーストなので、今までのRailsのやり方とはずいぶんと違う感じになる。

Railsからの移行を考えるのであれば、Play Frame workの方が相性が良いのかもしれない。

Play Frame workはまだ検証していないので分からないが、見た感じ使いやすそうな印象を受ける。

[Scala]MD5 ハッシュ値

ScalaでMD5を生成するには…

Javaのライブラリを呼び出して生成することになります。
[scala]import java.security.MessageDigest
val digestedBytes = MessageDigest.getInstance("MD5").digest("arekore".getBytes)
digestedBytes.map("%02x".format(_)).mkString[/scala]
Rubyの場合は
[scala]require ‘digest/md5’
Digest::MD5.new.update(‘arekore’)[/scalaa]
となります。

番外で、ScalaのLiftでは、md5(in: String)というヘルパーがありますが、これはBase64エンコードしてmd5生成しているような感じなので、Rubyでのmd5値とは一致しません。

なので、一致させたい場合は
[scala]def myMd5(in: String): String = md5(in.getBytes).map("%02x".format(_)).mkString[/scala]
とする必要あります。

もう一つ番外で

ScalaのMessageDigestで使えるアルゴリズムの一覧を得るには
[scala]Security.getAlgorithms("MessageDigest")[/scala]
とする

[Scala]Scala + Liftで、JNDIでデータベースに接続する時に、JNDI名を変えて接続する

前回「[Scala]Scala + Liftで、GlassFishの接続プールを使う」の中で、JNDI名はデフォルトでは「lift」であると書いたが、このJNDI名を変えて接続してみたい。

設定は簡単で、

Boot.scalaの中のBootクラスの中のbootメソッドの一番最初に
[scala]class Boot {
  def boot {
DefaultConnectionIdentifier.jndiName = "custom"
…[/scala]
という記述を追加するだけ。

これで、customという名のJNDIを使ってデータベース接続を行うようになる

[Scala]Scala + Liftで、GlassFishの接続プールを使う

GlassFishはWeb ・EJBコンテナなので、せっかくなので、Scala + Liftの環境からJDBC接続プールを使いたい。

幸い、liftにはJNDIでDB接続する仕組みが入っているようです。

liftがデフォルトで参照するJDBC接続プールは、liftという名前のJNDIなので、今回はliftという名前で設定します。

GlassFishはほぼ標準状態で入っている前提で。

まずはmysqlのjdbcドライバをGlassFishのlibにコピーします。

http://www.mysql.com/downloads/connector/j/

からダウンロードして c:\glassfish3/lib コピーします。

GlassFishのドメインを起動します。
[shell]asadmin start-domain[/shell]
つぎに

http://localhost:4848/

にアクセスします。

ログイン画面が出たら、初期設定時の情報でログインします。

ここでログインがどうしても失敗する場合、server.logにおかしなエラーが出てたら、ドメインの再起動をすると直ったりします。この辺はよく分かりません。

ログインすると、

というメニューが出ます。

この中のリソース – JDBC – JDBC接続プールとたどります。

新規ボタンを押して

 

プール名:lift
リソースタイプ:javax.sql.ConnectionPoolDataSource
データベースドライバのベンダー:MySql
と設定する

ステップ2/2では、追加プロパティー以外は修正しなくても良いです。

追加プロパティで変更する箇所は

user [データベースユーザ名]
password [データベースパスワード]
DatabaseName MySQL
ServerName localhost
port 3306
URL jdbc:mysql://localhost:3306/test

です。

URLのtestは、使用するデータベース名になります。

接続プールの作成が完了したので、次にJDBCリソースを追加します。

こちらも、同様に新規ボタンで項目を作成します。

liftがデフォルトで認識するJNDI名がliftなので、今回はliftにします。

これで、接続プールの設定が完了しました。

あとはscala + Liftのプロジェクトをデプロイすると、接続プールを使ってMySQLにアクセスするようになります。

そのうち、JNDI名を変更したバージョンも実験してみたいと思います。

[Scala]Maven + Scala + LiftのプロジェクトをGlassFish上にデプロイしてeclipseでデバッグする

なんか長いタイトルですが

要はMavenで作ったScala + LiftのプロジェクトをGlassFishにデプロイしたい

で、eclipseでGlassFishにデプロイしつつデバッグもしたい

という欲張り企画なんですが

eclipseのプロジェクト作成とか、Mavenのプロジェクト作成では

これらの要件を満たす設定になってくれないので

手動で設定を変更します。

必要な物

eclipseの環境構築は
やっぱりScala and Liftな環境をEclipseで開発したい!
を参照

GlassFishのインストール

まずはJava EE 6 SDKをインストールします。

このインストールで、GlassFishが同時にインストールされるはずです。

普通にインストールすると、c:\glassfish3にインストールされるはずです。

このとき、インストーラをダブルクリックで起動するとエラーになる場合

[shell]C:\> java_ee_sdk-6u3-windows-ml.exe -j "%JAVA_HOME%"[/shell]

とすればインストーラを起動できます。

eclipseからGlassFishを参照するように設定

インストールが完了したら、eclipseからGlassFishが見えるように設定します。

Open PerspectiveからJava EEを選択。

すると、ビューの下にServersタブが現れるので、その中で右クリック。
New – Serverを選択

右上のDownload additional server adaptersをクリック

出てきた画面で、Oracle GlassFish Server Adapterを選択
インストールが終わると、画面が閉じるので、またServersタブの中でNew – Serverを選択
すると、GlassFishの選択肢が増えているので、GlassFish 3.1.1を選択

この辺はそのままで、Finishをクリック。
インストール時に設定をいじっていたら、その情報を登録

これで、サーバの登録が出来たので、eclipse上からGlassFishを操作することが出来ます。

プロジェクトの作成

まずはeclipseでプロジェクトの新規作成をします。

Scala and LiftのプロジェクトをEclipse上に作成する

上記の記事を参考にすると、とりあえずScala + Liftのデバッグが出来るプロジェクトが出来上がっているはずです。

続いて、プロジェクトのRun Asで実行できるようにRun on Serverを使えるようにします。
Run on Serverというのは、先ほどServerタブで設定したGlassFish上でプロジェクトを実行できるようになるコマンドです。

一度プロジェクトをeclipse上から削除し、.projectファイルを開きます。

<buildSpec>

[xml]
<buildCommand>
<name>org.eclipse.wst.common.project.facet.core.builder</name>
<arguments>
</arguments>
</buildCommand>[/xml]

を追加

<natures>

[xml]<nature>org.eclipse.wst.common.project.facet.core.nature</nature>[/xml]

を追加

.settingsフォルダに

org.eclipse.wst.common.component ファイルを作成し
中身を以下のようにする
※deploy-nameはプロジェクト名を設定

[xml]<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="プロジェクト名">
<wb-resource deploy-path="/" source-path="/EarContent" tag="defaultRootSource"/>
</wb-module>
</project-modules>[/xml]

もう一つ、org.eclipse.wst.common.project.facet.core.xml ファイルを作成し
中身を以下のようにする

[xml]<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<runtime name="GlassFish 3.1.1"/>
<fixed facet="jst.ear"/>
<installed facet="jst.ear" version="6.0"/>
<installed facet="sun.facet" version="9"/>
</faceted-project>[/xml]

プロジェクトをインポート

これで、Run AsにRun on Server項目が追加されているはずです。

※これらの追加設定については、新規プロジェクト – Java EE – Enterprise Application Projectで作成したプロジェクトの設定を元にしています。
なので、バージョンが変わった場合、Enterprise Application Projectで作成したプロジェクトの設定をもとに設定を変更すれば良いはずです。

次に、GlassFishへデプロイする時のディレクトリ構成を設定します。

プロジェクトのプロパティを開いて、Deployment Assemblyを選択します。

Addボタンを押して、Folderを選択します。

src/main/resourcesとたどって、Finishを押します。

Deploy PathにはWEB-INF/classesを入力します。

同様にsrc/main/scalaも追加し、Deploy PathをWEB-INF/classesにします。

src/main/webappも同様に追加しますが、これのDeploy Pathは/のままにします。

libは、mavenから持ってくるのですが、めんどくさそうなので、ここはサボってしまいます。

プロジェクトディレクトリで

[shell]mvn package[/shell]

を実行

すると、targetディレクトリに

プロジェクト名-0.0.1-SNAPSHOT

という感じのディレクトリが出来るので、この中の

WEB-INF/libをフォルダでたどって追加します。

この項目のDeploy PathはWEB-INF/libを設定します。

一通り設定が完了したので、プロジェクトのRun Asから、Run on Serverを選んでみます。

出てきた画面で、そのままFinishを押すと、サーバが起動され、プロジェクトがデプロイされます。

あとは、ブラウザでlocalhost:8080に続いてプロジェクト名を入れる事で
画面にアクセス出来ます。
http://localhost:8080/ScalaLiftOnGlassFish

[Scala]LiftでMySQLに繋ぐ(sbt編)

前々回くらいで、【Scala】LiftでMySQLに繋ぐ(Maven編)では、MavenでMySQLにつなぐための設定をしたが、今回はsbtでMySQLにつなぐための設定を。

project/build/LiftProject.scalaファイルに、MySQLのドライバの設定を追加します。

[scala]override def libraryDependencies = Set(
"net.liftweb" %% "lift-webkit" % liftVersion.value.toString % "compile",
"net.liftweb" %% "lift-mapper" % liftVersion.value.toString % "compile",
"org.mortbay.jetty" % "jetty" % "6.1.26" % "test",
"junit" % "junit" % "4.7" % "test",
"ch.qos.logback" % "logback-classic" % "0.9.26",
"org.scala-tools.testing" %% "specs" % "1.6.9" % "test",
"com.h2database" % "h2" % "1.2.147",
"mysql" % "mysql-connector-java" % "5.1.14" % "runtime"// <= これ追加
)[/scala]

続いて

src/main/resources/props/default.props にデータベースの定義を追加する

[text]db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost/lift_mysql_example
db.user=root
db.password=[/text]

MySQLにログインしてデータベースを作成

[shell]mysql> create database lift_mysql_example;[/shell]

jettyを起動
※Mavenが起動時に必要なライブラリを全部そろえてくれる

[shell]sbt ~jetty-run[/shell]

これで、mysql上にusersテーブルが作成されます。
※デフォルト状態のLiftプロジェクトの場合

[Scala]Liftのrunmodeについて

Liftにはrun modeが6つ準備されている

  • development
  • test
  • staging
  • production
  • pilot
  • profile

デフォルトでは、developmentが選択される。

run modeを変えて起動する場合、
-Drun.mode=production
というように、起動時にオプションを指定することで変えることが出来る

run modeでDBの接続する先を変えたりする場合

src/main/resources/propsにproduction.default.props(ファイル名の一例)というファイルを置く事で、このファイルに設定された内容で起動する。

[Scala]LiftでMySQLに繋ぐ(Maven編)

Scala + Liftの環境は、最初はH2DBにつながるようになっている。

一般的にサービスを提供する場合、やはりMySQLなどに繋いで使いたい

ということで、MySQLに接続する方法

Mavenでプロジェクトを作っている前提で

pom.xmlファイルのdependenciesに以下を追加

[xml]<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>[/xml]

続いて

src/main/resources/props/default.props にデータベースの定義を追加する

[text]db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost/lift_mysql_example
db.user=root
db.password=[/text]

MySQLにログインしてデータベースを作成

[shell]mysql> create database lift_mysql_example;[/shell]

jettyを起動
※Mavenが起動時に必要なライブラリを全部そろえてくれる

[shell]mvn jetty:run[/shell]

これで、mysql上にusersテーブルが作成されます。
※デフォルト状態のLiftプロジェクトの場合

[Scala]Liftでコンソールを使う

Liftでコンソールを起動してモデルの動きなどを確認したい場合

プロジェクトフォルダで以下のコマンドを打ち込む

そうすれば、モデルへアクセスが出来るようになる

[Scala]liftで、 ProtoUserを継承している場合のログイン画面変更

liftで、 ProtoUserを継承している場合のログイン画面変更方法

loginXhtmlメソッドでhtmlを生成しているので、たとえばUserモデルの場合
※デフォルトで作成されるUserモデル

とすればよい。

これをテンプレートファイルで対応したい場合は

とする

 

 

object User extends User with MetaMegaProtoUser[User] {

Scala and LiftのプロジェクトをEclipse上に作成する

Scala and LiftのプロジェクトをEclipse上に作成する

なんか、単純なようですが、うまくいかなかったので、うまくいく方法を書いておく。

Eclipseの新規作成で、Scala ProjectではScalaのプロジェクトしか作成されません。

Liftのプロジェクトを作りたいときは

Maven Projectを選択

archetypeを選択

プロジェクト名などを設定

とすると、プロジェクトが作成されますが

どうも、ビルダーがjavaのままでエラー出まくりだったりするので、プロジェクトファイルを編集します。。

やりたくない。。

Close Projectでいったんプロジェクトをクローズします。

という定義がありますが、これがビルダーとしてjavaとmaven2を使うという設定なので、ここを

に変更

という所を

に変更

あとはプロジェクトを右クリックしてOpen Projectで開く。

ビルドパスにScala Libraryを追加

これで、プロジェクトのクリーンをすれば、エラーは消えるはず。

あーめんどくさい。

やっぱりScala and Liftな環境をEclipseで開発したい!

Scala and Liftの環境を、Ubuntu上に構築したのはいいが、やはり使い慣れたEclipse上で開発したくなりました。

ということで、Eclipseに環境を構築する手順を書いてみます。

まず、Eclipseを入れるOSですが、Windowsです。

なので、Windows上にjava環境をセットアップしていきます。

JDKインストール

Windows用のJDKをダウンロード
http://www.oracle.com/technetwork/java/

環境変数の設定

次に、scalaです。コンソールでscala使いたいので入れておきます。

Scalaのインストール

http://www.scala-lang.org/

環境変数の設定

liftプロジェクトを入れたり実行したりするときに使います。
たぶん

Mavenのインストール

http://maven.apache.org/

環境変数の設定

Eclipseのインストール

http://www.eclipse.org/

Scala IDEのインストール

http://www.scala-ide.org/

M2Eclipseのインストール

eclipseのInstall New Softwareを開き、m2eをインストールする

再起動後、

このようなワーニングが出る場合、eclipse.iniファイルを開き、-vmargsの前の行に

を追加する

Ubuntu 11 にScalaとLiftの環境を構築する

Scalaが気になるので、実行環境を作ってみる。
Scalaと、Scalaでwebアプリケーションを作るに当たって必要になってくるソフトウェアを上げてみる。

Scalaとは

  • JVM上で動作する比較的新しい言語
  • オブジェクト指向言語(つまりJava)と関数型言語

Liftとは

  • Scalaで構築されたWebアプリケーションフレームワーク

Mavenとは

  • Java用プロジェクト管理ツールである

環境の構築

Ubuntu 11 はインストール済みとする。

JDKのインストール

Maven 3のインストール

http://maven.apache.org/

からmavenをダウンロード

解凍

環境変数の設定

~/.profile に設定

JAVA_HOME

M2_HOME

M2

PATH

Mavenのインストール完了確認

以下のような実行結果が表示されれば問題なし

Liftのプロジェクトを作成する

Mavenで、Liftのプロジェクトを作成するコマンドを実行すると、必要なプラグインが一通りダウンロードされる

コマンドラインで適当に答えていけばインストールとプロジェクト作成の完了

色々な一覧と、上記のメッセージが出た場合、liftを入れたいので、とりあえずliftと入れて改行

すると、liftで絞り込まれるので、「lift-archetype-basic_2.9.1」を探して、その番号を入力

と出るので、2を選択

は適当に設定

も適当に設定

これはそのまま改行

ここはおそらくgroupIdが入るので、そのまま改行

最後にyを入力

これで、liftのプロジェクトと、それに必要なプラグインがインストールされました。

コマンド一発でプロジェクトを作成したい場合、下記のように情報をすべてパラメータで設定すれば一発で作成することが可能。

とりあえず、テストサーバ起動

テストサーバにアクセス

http://localhost:8080/

これで、何か表示されれば完了です。