Lift must have at least one MongoDB defined. Define a default db like this:
Lift 3.x:
import com.mongodb.MongoClient
import net.liftweb.util.DefaultConnectionIdentifier
import net.liftweb.mongodb.MongoDB
MongoDB.defineDb(DefaultConnectionIdentifier, new MongoClient, "test")
Lift 2.x:
import com.mongodb.Mongo
import net.liftweb.mongodb.{DefaultMongoIdentifier, MongoDB}
MongoDB.defineDb(DefaultMongoIdentifier, new Mongo, "test")
If you need more than one database, define a ConnectionIdentifier for each:
Lift 3.x:
import net.liftweb.util.ConnectionIdentifier
import net.liftweb.mongodb.MongoDB
import com.mongodb.MongoClient
object MainDb extends ConnectionIdentifier {
val jndiName = "main"
}
MongoDB.defineDb(MainDb, new MongoClient, "test1")
Lift 2.x:
import com.mongodb.Mongo
import net.liftweb.mongodb.{MongoIdentifier, MongoDB}
object MainDb extends MongoIdentifier {
val jndiName = "main"
}
MongoDB.defineDb(MainDb, new Mongo, "test")
Lift 3.x:
import com.mongodb.{MongoClient, MongoClientOptions}
import net.liftweb.mongodb.{DefaultMongoIdentifier, MongoDB}
val opts = MongoClientOptions.builder.connectTimeout(10).build
val client = new MongoClient("127.0.0.1:27017",opts)
MongoDB.defineDb(DefaultConnectionIdentifier, client, "test")
Lift 2.x:
import com.mongodb.{Mongo, MongoOptions, ServerAddress}
import net.liftweb.mongodb.{DefaultMongoIdentifier, MongoDB}
val srvr = new ServerAddress("127.0.0.1", 27017)
val mo = new MongoOptions
mo.socketTimeout = 10
MongoDB.defineDb(DefaultMongoIdentifier, new Mongo(srvr, mo), "test")
Lift 3.x:
import com.mongodb.{MongoClient,MongoClientURI,MongoClientOptions}
import net.liftweb.util.DefaultConnectionIdentifier
import net.liftweb.mongodb.MongoDB
val opts = MongoClientOptions.builder.connectTimeout(10)
val clientUri = new MongoClientURI("mongodb://db_user:db_pwd@127.0.0.1:27017",opts)
val client = new MongoClient(clientUri)
MongoDB.defineDb(DefaultConnectionIdentifier, client, "test")
import com.mongodb.Mongo
import net.liftweb.mongodb.{DefaultMongoIdentifier, MongoDB}
MongoDB.defineDbAuth(DefaultMongoIdentifier, new Mongo, "test", "db_user", "db_pwd")
Lift 3.x:
TBC
import com.mongodb.{Mongo, MongoOptions, ServerAddress}
import net.liftweb.mongodb.{DefaultMongoIdentifier, MongoDB}
import scala.collection.JavaConversions._
val srvr1 = new ServerAddress("127.0.0.1", 27017)
val srvr2 = new ServerAddress("127.0.0.1", 27018)
val srvr3 = new ServerAddress("127.0.0.1", 27019)
val srvrs = srvr1 :: srvr2 :: srvr3 :: Nil
MongoDB.defineDb(DefaultMongoIdentifier, new Mongo(srvrs), "test")
You must initialize Mongo in Boot, but you can put your code anywhere you’d like. I put a MongoConfig object in the model package and call it’s init function from Boot.
myapp/model/MongoConfig.scala:
package myapp.model
import net.liftweb._
import mongodb._
import util.Props
import com.mongodb.MongoClient
object MongoConfig {
def init: Unit = {
val host = Props.get("mongo.host", "127.0.0.1")
val port = Props.getInt("mongo.port", 27017)
val db = Props.get("mongo.db", "default")
val client = new MongoClient(host, port)
MongoDB.defineDb(DefaultConnectionIdentifier, client, db)
}
}
bootstrap/liftweb/Boot.scala
package bootstrap.liftweb
import net.liftweb._
import myapp.model.MongoConfig
class Boot {
def boot: Unit = {
// make sure you call this before trying to use any of your Mongo model classes.
MongoConfig.init
}
}
For more info see the api docs for the Mongo class
Note: If you look in the source code, you’ll see classes such as MongoAddress and MongoHost. These were created long ago, before ServerAddress existed. These are not really needed anymore, as you can now just pass in a Mongo instance to MongoDB.defineDb.