Create a RESTful webapp with Scala

1) Links: http://www.planetscala.com/Using Scalate with JAXRS (Jersey) on Guice, Getting Started

2) Scalate installiert. Eine extra Shelldatei für Setzen einiger Umgebungsvariablen (PATH, JAVA_HOME).

3) scalate create jersey net.dbungert.bomberman.scalate server

4) mvn eclipse:eclipse

5) mvn jetty:run

6) Auf der Webseite eine Ressource  „GameResource“ angelegt.

Sehr schöne Sache! Mit einem Klick die Klasse, das Mapping, das Frontend erzeugt.

Es wird eine neue Klasse GameResource.scaml in WEB-INF abgelegt. Immer noch keine einzige Java-Klasse.

(Update) Natürlich keine Java-Klasse. Ist ja Scala. In „src/main/scala/…/GameResource.scala . 🙂

generated

* resource: net/dbungert/bomberman/scalate/server/resources/GameResource.scala
* view: src/main/webapp/WEB-INF/net/dbungert/bomberman/scalate/server/resources/GameResource.index.scaml

http://localhost:8080/game

7) Wie führe ich den Unit-Test mit Eclipse-Mitteln aus?

@RunWith(classOf[JUnitRunner])

8) Im Tutorial wird statt des Artefaktes mit Jersey

scalate create guice mygroup myartifactid

empfohlen. Ausprobieren … Sieht auf den ersten Blick besser aus. Auch Jersey und JAXRS drin. Plus einem ServletContextListener für Guice. Und für DI hat man immer Verwendung. Werde mit dem weitermachen.

9) Wie hänge ich mit Guice einen Backend-Service ein?

10) Fix downloadSrc in meine settings.xml eingetragen:

<profile>
<id>myProps</id>
<properties>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</properties>
</profile>

11) Was sind Scala Traits? – Ähnlich wie Java Interfaces. Können nur teilweise implementieren. Siehe abstrakte Klassen in Java.

12) Scala Code Completion klappt nicht in Eclipse? (Update: Eclipse Java IDE neu installiert, Scala IDE dazu, alles schick.)

13) Wie kann ich Scala Project Nature durch mvn eclipse:eclipse automatisch bekommen?

14) Update Site für Eclipse Scala-IDE: http://download.scala-ide.org/update-current-35

Derzeit ist Eclipse 3.6/Helios nur experimentell. Empfehlung ist Galileo/3.5. Man braucht wohl nicht die Java IDE von Eclipse. Classic reicht aus.

Eclipse 3.5 Update Site: http://download.eclipse.org/eclipse/updates/3.5

Additional Repo: http://download.eclipse.org/releases/galileo/

15) Scala Wiki

16) Hatte einige Probleme mi Guice und REST PathParam.

Guice kennt scheinbar nur Constructor Injection:

class GameResource @Inject() (val dataSvc: DBDataService){

Hatte ursprünglich noch einen weiteren @PathParam Constructor Paramter:

class GameResource @Inject() (val dataSvc: DBDataService, @PathParam(„id“) val id: String){

Das klappt so nicht! Kann man nicht mischen.

So geht’s aber:

@Path(„/game/{id}“)
@ImplicitProduces(Array(„text/html;qs=5“))
class GameResource @Inject() (val dataSvc: DBDataService){

@PathParam(„id“)
val id: String = „“;

// TODO delete me:
// this is just some dummy data we can use in a template
def name = „I am Game ID “ + id;

def message = dataSvc.getData

}

Frage: Kann Guice mit Annotation nur Constructor Injection?

Diese Variante mit einer configure() Methode in der man die Bindings händisch angeben muß, ist nicht so mein Fall.

Advertisements
Dieser Beitrag wurde unter Uncategorized veröffentlicht. Setze ein Lesezeichen auf den Permalink.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s