VOOZH about

URL: https://www.javacodegeeks.com/2015/03/building-a-war-with-spray-servlet.html

⇱ Building a war with spray-servlet - Java Code Geeks


We will use spray-servlet to build a war file of our API. So we can run it in a java app server. I assume we already have a working REST API. We will need a web.xml, under src/main/webapp/WEB-INF/:

<?xml version="1.0"?>
<web-app>
 <listener>
 <listener-class>spray.servlet.Initializer</listener-class>
 </listener>

 <servlet>
 <servlet-name>SprayConnectorServlet</servlet-name>
 <servlet-class>spray.servlet.Servlet30ConnectorServlet</servlet-class>
 <async-supported>true</async-supported>
 </servlet>

 <servlet-mapping>
 <servlet-name>SprayConnectorServlet</servlet-name>
 <url-pattern>/*</url-pattern>
 </servlet-mapping>
</web-app>

We need an sbt plugin to build wars. Add this to project/plugins.sbt:

addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "1.0.0")

We’ll add dependencies to build.sbt, and also extra tasks:

name := "exampleAPI"

version := "1.0"

scalaVersion := "2.11.2"

libraryDependencies ++= {
 val akkaVersion = "2.3.6"
 val sprayVersion = "1.3.2"
 Seq(
 "io.spray" %% "spray-can" % sprayVersion,
 "io.spray" %% "spray-servlet" % sprayVersion, //We need spray-servlet
 "io.spray" %% "spray-routing" % sprayVersion,
 "io.spray" %% "spray-json" % "1.3.1",
 "io.spray" %% "spray-testkit" % sprayVersion % "test",
 "org.scalatest" %% "scalatest" % "2.2.4" % "test",
 "com.typesafe.akka" %% "akka-actor" % akkaVersion,
 "com.typesafe.akka" %% "akka-testkit" % akkaVersion % "test",
 "com.typesafe.akka" %% "akka-slf4j" % akkaVersion,
 "ch.qos.logback" % "logback-classic" % "1.1.2"
 )
}

//This adds tomcat dependencies, you can also use jetty()
tomcat() 

We’ll need to extend spray.servlet.WebBoot:

import akka.actor.{Props, ActorSystem}
import spray.servlet.WebBoot

// this class is instantiated by the servlet initializer
// it needs to have a default constructor and implement
// the spray.servlet.WebBoot trait
class Boot extends WebBoot {
 //we need an ActorSystem to host our application in
 implicit val system = ActorSystem("SprayApiApp")
 
 //create apiActor
 val apiActor = system.actorOf(Props[ApiActor], "apiActor")

 // the service actor replies to incoming HttpRequests
 val serviceActor = apiActor
}

And add a reference to this class in application.conf:

spray.servlet {
boot-class = “Boot”
}

Now we can run sbt package to build a war. And in sbt, use container:start to start a tomcat server with our application. And container:stop to stop it.

A good way to restart the server every time we change code is:

~container:start
Reference: Building a war with spray-servlet from our JCG partner Tammo Sminia at the JDriven blog.
Do you want to know how to develop your skillset to become a Java Rockstar?
Subscribe to our newsletter to start Rocking right now!
To get you started we give you our best selling eBooks for FREE!
1. JPA Mini Book
2. JVM Troubleshooting Guide
3. JUnit Tutorial for Unit Testing
4. Java Annotations Tutorial
5. Java Interview Questions
6. Spring Interview Questions
7. Android UI Design
and many more ....
I agree to the Terms and Privacy Policy

Thank you!

We will contact you soon.

Tags
Akka
👁 Photo of Arthur Arts
Arthur Arts
March 26th, 2015Last Updated: March 25th, 2015
0 106 1 minute read

Arthur Arts

Arthur Arts is an experienced Enterprise Java software engineer and hands-on Agile Coach and Scrum Master. He has a strong focus on agile engineering principles and practices and loves to share his knowledge and learn from others. He has his own company Coded Value, is a passionate photographer and writes for agilearts.nl.
Subscribe

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Back to top button
Close
wpDiscuz