SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新開発言語「Scala」の実体

Javaの限界を超えて実用化を目指す
新開発言語「Scala」のメリットとは~後編

キーワードは手軽さと拡張性

  • X ポスト
  • このエントリーをはてなブックマークに追加

LiftのO/RマッパーでPostgreSQLに接続

 Lift自身には、デフォルトで組み込みDB(Apache Derby)が付属していますが、実際の環境では外部のデータベースを使用したくなることが多いと思います。ここでは、PostgreSQLに接続するサンプルコードを示しておきます。

 ¥todo¥pom.xmlファイルの<dependencies>セクションにLIST33を追加し、JDBCドライバをプロジェクトに追加します。

LIST33
<dependency>
  <groupId>postgresql</groupId>
  <artifactId>postgresql</artifactId>
  <version>8.3-603.jdbc4</version>
</dependency>

 ¥todo¥src¥main¥webapp¥WEB-INFフォルダに¥classes¥props¥default.propsファイルを作成し、LIST34の内容を記述します。

LIST34
db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://192.168.111.111/test_db
db.user=admin
db.password=admin

 さらに、¥todo¥src¥main¥scala¥bootstrap¥liftweb¥Boot.scalaを、LIST35に示すサンプルコードのように編集します。

LIST35
class Boot {
  def boot {
    if (!DB.jndiJdbcConnAvailable_?)
      DB.defineConnectionManager(DefaultConnectionIdentifier, DBVendor)

    //★追加:デバッグの為に、SQLクエリをログに吐き出す
    DB.addLogFunc((sql,time)=>{print("SQL> "+sql+" time:"+time+"¥n")})

    // where to search snippet
    LiftRules.addToPackages("com.liftworkshop")
    Schemifier.schemify(true, Log.infoF _, User)

    // Build SiteMap
	// ++ 以降を追加
val entries = Menu(Loc("Home", List("index"), "Home")) :: User.sitemap ++ Test1Table.menus
    LiftRules.setSiteMap(SiteMap(entries:_*))

 Boot.scalaでは、59行目からのDBVendorオブジェクトでドライバの読み込みや、接続/切断/コネクションプーリングを行っています。また、17行目からのBootクラスのboot関数の先頭(20行目)で、先ほどのDBVendorオブジェクトを設定しています。

 これにより、O/Rマッパーが任意のタイミングでDBに接続できるようになります。

LiftのCRUD操作クラスの使用方法

 まず、簡単にDBを操作するCRUD(挿入/表示/更新/削除)クラス「CRUDify」の使用方法から解説します。実は、このクラスは既に使用する準備は整っています。コマンドラインからLIST36のコマンドを入力し、Webアプリケーション・サーバ(jetty)を起動しましょう。LIST36の最終行が表示されれば起動完了です。

LIST36:Liftアプリケーションの起動コマンドと、起動完了までのログ出力
¥todo>mvn jetty:run

[INFO] Scanning for projects...
[INFO] artifact org.mortbay.jetty:maven-jetty-plugin: checking for updates from
scala-tools.org
[INFO] ------------------------------------------------------------------------
[INFO] Building todo
[INFO]    task-segment: [jetty:run]
[INFO] ------------------------------------------------------------------------
[INFO] Preparing jetty:run

・・・(省略)

[INFO] Starting jetty 6.1.16 ...
2009-06-24 03:50:38.388::INFO:  jetty-6.1.16
2009-06-24 03:50:39.638::INFO:  No Transaction manager found - if your webapp re
quires one, please configure one.
2009-06-24 03:50:45.419::INFO:  Started SelectChannelConnector@0.0.0.0:8080
[INFO] Started Jetty Server
[INFO] Starting scanner at interval of 5 seconds.

[INFO] Starting scanner at interval of 5 seconds.

 続いてWebブラウザでhttp://localhost:8080/にアクセスすると、画面2が表示されます。枠で囲ってあるメニューが、今回追加した部分です。このリンクから、簡単なデータ操作(CRUD操作)を行うことができます。

画面2:CRUD操作のリンク追加後の画面
画面2:CRUD操作のリンク追加後の画面

 これだけの機能が、O/Rマッパーの定義時にwith CRUDifyと記述し、Boot.scalaに数行追加するだけで得ることができます。これをカスタマイズすれば、検索機能などを追加することも可能です。

次のページ
まとめ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
新開発言語「Scala」の実体連載記事一覧

もっと読む

この記事の著者

株式会社パテントビューロ 三木隆史(ミキ タカフミ)

株式会社パテントビューロ所属。マネージャー業務と平行して、Webアプリケーション開発、自然言語系の研究開発を行なう。以前はC言語による組込開発。違和感なくScalaへ移行できたことや、ロジック部分に注力できる生産性の高さに驚いている。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

株式会社パテントビューロ 木村吉博(キムラ ヨシヒロ)

政府系研究機関での研究開発を経て、現在、株式会社パテントビューロにて、プログラミング(知財関連文書(SGML/XML)の変換バッチ処理のScalaでの記述など)を担当している。複雑でイレギュラーな記述も多々見られる大量の文書を相手にする際に、Scalaの書きやすさと高速性とに大いに助けられている。か...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4476 2009/11/19 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング