This is as sbt project.
- mongodbsample/project/
- build/MongodbSampleProject.scala
- src/main
- scala/MongoServlet.scala
- webapp/WEB-INF/web.xml
package main.scala | |
import javax.servlet.http.{HttpServlet,HttpServletRequest,HttpServletResponse} | |
import org.eclipse.jetty.server.Server | |
import java.io.PrintWriter | |
import java.net.URLEncoder | |
class MongoServlet extends HttpServlet { | |
import com.mongodb.casbah.Imports._ | |
val conn = MongoConnection("mongo.example.dotcloud.com",5907) | |
val db = conn("sampledb") | |
db.authenticate("sampleuser", "samplepass") | |
val collection = db("col1") | |
def html = { | |
<html> | |
<head> | |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | |
</head> | |
<body> | |
<div> | |
<h1>mongo sample</h1> | |
<form action="/" method="POST"> | |
<ul> | |
<li>id:<input type="test" name="id" value="" /></li> | |
<li>name:<input type="test" name="name" value="" /></li> | |
</ul> | |
<input type="submit" value="submit" /> | |
</form> | |
</div> | |
<div> | |
<ul>{ | |
collection.find().sort(MongoDBObject("_id" -> -1)).limit(20) | |
.map( (x:DBObject) => <li>{x.get("id")}:{x.get("name")}</li> ) | |
}</ul> | |
</div> | |
</body> | |
</html> | |
} | |
override def doPost(req:HttpServletRequest, res:HttpServletResponse) = { | |
res.setContentType("text/html;charset=UTF-8") | |
val out = res.getWriter() | |
req.setCharacterEncoding("UTF-8") | |
val id = req.getParameter("id") | |
val name = req.getParameter("name") | |
(id.length, name.length) match { | |
case (0,0) => // do nothing | |
case _ => { | |
val user = MongoDBObject("id"->id, "name"->name) | |
collection += user | |
} | |
} | |
out.println(html) | |
} | |
override def doGet(req:HttpServletRequest, res:HttpServletResponse) = { | |
res.setContentType("text/html;charset=UTF-8") | |
val out = res.getWriter() | |
out.println(html) | |
} | |
} |
import sbt._ | |
class MongodbSampleProject(info: ProjectInfo) extends DefaultWebProject(info) { | |
/* | |
* Jetty7 | |
*/ | |
val JETTY7 = "7.3.1.v20110307" | |
val servletapi = "javax.servlet" % "servlet-api" % "2.5" % "compile" | |
val jetty7Server = "org.eclipse.jetty" % "jetty-server" % JETTY7 % "compile,test" | |
val jetty7Servlets = "org.eclipse.jetty" % "jetty-servlets" % JETTY7 % "compile,test" | |
val jetty7Webapp = "org.eclipse.jetty" % "jetty-webapp" % JETTY7 % "compile,test" | |
/** | |
* MongoDB | |
*/ | |
val casbah = "com.mongodb.casbah" % "casbah_2.9.0-1" % "2.1.5.0" | |
/* | |
* DotCloud | |
*/ | |
val copyDirectory = path("release") | |
val copyFileName = copyDirectory / "root.war" | |
val dotApplicationName = "example" | |
val dotServiceName = dotApplicationName + ".samplemongo" | |
import Process._ | |
/* | |
* 'sbt dot_create' | |
*/ | |
lazy val dot_create = task { | |
val lists:Stream[String] = "dotcloud list" lines_!; | |
def exists(x:String) = { lists.exists( _.indexOf(x)>=0) } | |
exists(dotApplicationName) match { | |
case false => "dotcloud create " + dotApplicationName ! log | |
case _ => log.warn("application is already exists.: " + dotApplicationName ) | |
} | |
exists(dotServiceName) match { | |
case false => { | |
val res = "dotcloud deploy -t java " + dotServiceName !!; | |
res.indexOf("Created") >= 0 match { | |
case true => log.info("success to deproy") | |
case _ => log.info("fail to deproy") | |
} | |
} | |
case _ => log.warn("service is already exists.") | |
} | |
None | |
} | |
/* | |
* 'sbt dot_prepare' | |
*/ | |
lazy val dot_prepare = task { | |
log.info("mkdir") | |
"mkdir " + copyDirectory !; | |
log.info( "copy war file to " + copyFileName ) | |
val files:Stream[String] = "find ./target -name *.war -exec ls -t {} ;" lines_!; | |
if (files.length > 0 ) { | |
"cp " + files.head.toString + " " + copyFileName + "" ! | |
} | |
None | |
} | |
/* | |
* 'sbt dot_push' | |
*/ | |
lazy val dot_push = task { | |
import Process._ | |
log.info("push to dotcloud") | |
"dotcloud push " + dotServiceName + " " + copyDirectory ! log; None | |
}.dependsOn(`package`, dot_prepare) | |
} |
<!DOCTYPE web-app PUBLIC | |
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" | |
"http://java.sun.com/dtd/web-app_2_3.dtd" > | |
<web-app> | |
<display-name>mongosample</display-name> | |
<servlet> | |
<servlet-name>mongo</servlet-name> | |
<servlet-class>main.scala.MongoServlet</servlet-class> | |
<load-on-startup>1</load-on-startup> | |
</servlet> | |
<servlet-mapping> | |
<servlet-name>mongo</servlet-name> | |
<url-pattern>/</url-pattern> | |
</servlet-mapping> | |
</web-app> |