Lift2.2 の中から seedo1.1 によってOracle11g に接続しました。
Liftの良さは、DBを意識しなくてもアプリケーションを作ることができるのですが、
DBを意識してアプリケーションを作りたいときもあるわけです。
LiftやRuby on Railsのように処理や画面を中心にアプリケーションを作るのではなく、
データベースを設計して、データベースを中心にアプリケーションを作るという主義です。
Liftを使ってきた人からは、「意味ないじゃん」といわれそうですが、、、
Lift2.2
Lift2.2のインストールは、
http://liftweb.net/downloadに行って、
Lift 2.2 release Tar or Zip. からZIPファイルをダウンロードします。
ZIPファイルを展開すると4つのフォルダがあります。
ここでは、lift_basicを使います。
コマンドラインで次のコマンドを実行します。
sbt update ~jetty-run
コマンドラインで次のように表示したら
[info] Started SelectChannelConnector@0.0.0.0:8080
[info] == jetty-run ==
[success] Successful.
ブラウザから http://localhost:8080 にアクセスして次の画面が表示したらインストールは成功。
seedo framewark
ここからが、seedo framewarkを使ってプログラムを作ります、
lift_basic/src/main/scala/code/snippet/ フォルダに、HelloDb.scala ファイルを作ります。
package code { package snippet { import _root_.scala.xml.{NodeSeq, Text} import _root_.net.liftweb.util._ import _root_.net.liftweb.common._ import _root_.java.util.Date import code.lib._ import Helpers._ import scala.collection.immutable._ import scala.xml._ import seedo.database._ class HelloDb { def recx(record:Array[Any]) :Node = { var nodes = Queue.empty[Node] record.foreach{(fx) => nodes += <TD>{fx}</TD>} return <TR>{nodes}</TR> } def tb = { val sql = new Db val re = sql.executeQuery("select * from emp order by ename") sql.close var nodes = Queue.empty[Node] re.foreach{(rec) => nodes += recx(rec)} "#list *" #> <table>{nodes}</table> } def title(xhtml:NodeSeq) = Text("タイトルA") } } }
次に、lift_basic/src/main/webapp/ フォルダにある index.html ファイルを次のように書き換えます。
「span class=”lift:helloDb.tb”」によって先ほどのHelloDb クラスのtb関数が呼び出されます。
<!DOCTYPE html> <html> <head> <meta content="text/html; charset=UTF-8" http-equiv="content-type" /> <title>Home</title> <SCRIPT> </SCRIPT> </head> <body class="lift:content_id=main"> <div id="main" class="lift:surround?with=default;at=content"> <h2>Welcome to your project!</h2> <p> <span class="lift:helloWorld.howdy"> Welcome to your Lift app at <span id="time">Time goes here</span> </span> <HR/> <span class="lift:helloDb.tb"> Get Emp Table <span id="list">EMP table list</span> </span> </p> </div> </body> </html>
JARファイルは、lift_basic/lib_managed/scala_2.8.1/compile/フォルダに置きます。
OracleのJDBCドライバなら、
ojdbc6.jar
orai18n.jar
MySQLのJDBCドライバなら、
mysql-connector-java-5.1.8-bin.jar
seedo framewarkのJARは、
seedo-1.1.jar
env.propertiesファイルにDB接続の定義を記述します。
lift_basic/src/main/resources/フォルダにenv.propertiesファイルを置きます。
driver = oracle.jdbc.driver.OracleDriver #driver = com.mysql.jdbc.Driver #dsn = jdbc:mysql://192.168.0.100:3306/seedo?useUnicode=true&characterEncoding=UTF-8 dsn = jdbc:oracle:thin:@127.0.0.1:1521:ORCL user = scott password = tiger connection-jndi = off
seedo framewarkには、データベースのコネクションプールを管理するクラスが定義されていますので、LiftのDBとは干渉することなく使うことができます。
Lift2.2の起動は、lift_basiceフォルダにて
以下のコマンドを実行します。
sbt ~jetty-run
ブラウザから次のURLをアクセスします。
http://127.0.0.1:8080/index
うまくいかない場合
sbt から jetty-run すると、
lift_basic/lib_managed/scala_2.8.1/compile/フォルダにあるjarファイルを
lift_basic/target/scala_2.8.1/webapp/WEB-INF/lib/フォルダにコピーし、
同様に、
lift_basic/src/main/webapp/ フォルダにある index.html ファイル
lift_basic/target/scala_2.8.1/webapp/フォルダにコピーします。
また、
lift_basic/target/scala_2.8.1/webapp/WEB-INF/classes/code/snippet/フォルダには、コンパイルされたHelloDb.classなどのclassファイルが置かれています。
オリジナルにあるファイルが、targetフォルダにコピーされないことがあるのでファイルの中身を見て確かめましょう。
もうひとつ、最初にLiftを起動し、サンプル画面を表示させ、
sbt update ~jetty-run
コマンドラインでEnterキーを押して、Jettyを終了した後は、
次のコマンドでJettyは起動します。
sbt ~jetty-run
update をコマンドイランに入れると、追加したJARファイルはなくなってしまい、インストールした状態に戻ります。
jetty-run したときに、エラーが表示されたときはJARファイルが無くなっています。
[info] Compiling main sources... [error] C:\lift-lift_22_sbt-22a67aa\lift_basic\src\main\scala\code\snippet\Hello Db.scala:11: not found: value seedo [error] import seedo.database._ [error] ^ [error] one error found [info] == compile ==
コメントを残す
コメントを投稿するにはログインしてください。