src/main/scala/fis/db/SquerylTxMgr.scala
author Tomas Zeman <tzeman@volny.cz>
Tue, 01 May 2012 22:20:54 +0200
changeset 86 2616b8424462
parent 22 94ed9cfdb123
permissions -rw-r--r--
User projects/tasks
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
22
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     1
/*
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     2
 * Copyright 2012 Tomas Zeman <tzeman@volny.cz>
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     3
 *
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     4
 * Licensed under the Apache License, Version 2.0 (the "License");
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     5
 * you may not use this file except in compliance with the License.
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     6
 * You may obtain a copy of the License at
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     7
 *
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     8
 *     http://www.apache.org/licenses/LICENSE-2.0
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     9
 *
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    10
 * Unless required by applicable law or agreed to in writing, software
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    11
 * distributed under the License is distributed on an "AS IS" BASIS,
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    13
 * See the License for the specific language governing permissions and
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    14
 * limitations under the License.
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    15
 */
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    16
package fis.db
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    17
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    18
import java.sql.{Connection, DriverManager}
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    19
import net.liftweb.common._
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    20
import net.liftweb.http._
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    21
import net.liftweb.squerylrecord.SquerylRecord
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    22
import net.liftweb.squerylrecord.RecordTypeMode._
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    23
import net.liftweb.util._
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    24
import org.squeryl.{Session, SessionFactory}
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    25
import org.squeryl.adapters.PostgreSqlAdapter
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    26
 
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    27
object SquerylTxMgr extends Loggable {
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    28
  def init(): Unit = {
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    29
    for {
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    30
      dri <- Props.get("db.fis.driver")
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    31
      url <- Props.get("db.fis.url")
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    32
    } yield {
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    33
      Class.forName(dri)
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    34
      SquerylRecord.initWithSquerylSession {
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    35
        val con:Connection = (for {
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    36
          u <- Props.get("db.fis.user")
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    37
          p <- Props.get("db.fis.pass")
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    38
        } yield {
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    39
          DriverManager.getConnection(url, u, p)
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    40
        }) openOr { DriverManager.getConnection(url) }
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    41
        val s = Session.create(con, new PostgreSqlAdapter)
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    42
        if (Props.devMode)
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    43
          s.setLogger(_s => logger.info(_s))
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    44
        s
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    45
      }
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    46
    }
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    47
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    48
    S.addAround(new LoanWrapper {
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    49
      override def apply[T](f: => T): T = {
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    50
        val s = Session.currentSessionOption.getOrElse(
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    51
          SessionFactory.newSession)
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    52
        s.bindToCurrentThread
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    53
        transaction { f }
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    54
      }
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    55
    })
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    56
  }
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    57
}
94ed9cfdb123 Squeryl connection manager instead of mapper-based
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    58
// vim: set ts=2 sw=2 et: