Eclipse Community trifft sich in Bonn

Bonn, 24.11.2014

In Bonn traf sich gestern die Eclipse Community zum Eclipse DemoCamps im Collegium Leoninum. In angenehmer Location informierten sich die Community Teilnehmer über neue Technologien, technologische Strömungen und Best Practice Beispiele. Organisiert und gesponsert wurde das Event von der itemis AG als Eclipse strategic member.
Das Event startet um 18:30 Uhr und die Teilnehmer erwarteten interessante Themen und tolle Speaker. Beim Get Together am Ende der Veranstaltung und in den Pausen gab es genügend Raum, um Fragen los zu werden oder Networking zu betreiben. Ich kann jedem Entwickler oder Technologie-Entscheider das Event empfehlen!

Und das waren die Themen:

• Sex up your workspace installation with Oomph (Karsten Thoms, itemis)
• Model based migration of an Oracle Forms application (featuring Xtext, Xtend, Scout) (Karsten Thoms, itemis)
• Write scalable enterprise application tests with Xfactory (Boris Brodski, Freelancer)
• New Domain, Less Pain: Integrated Specification of Model Edit Operations (Dennis Reuling & Christopher Pietsch)
• GEF4 Demo-Tour (Matthias Wienand, itemis)
• Visualizing Simulink-Models using GEF4 & JavaFX (Markus Muehlbrandt, itemis)
• TDD for JavaFX8 – TestFX (Sven Ruppert, codecentric AG)
• Vorstellung des neuen Testautomatisierungsframeworks „Integrity“ (Rene Schneider, Gebit Solutions GmbH)

Danke an alle Speaker und an die itemis AG für ein interessantes und informatives Event!

DemoCamp Webseite:
https://wiki.eclipse.org/Eclipse_DemoCamps_November_2014/Bonn

Frank Dolibois

REST-Service Client mit Spring erstellen

(am Beispiel von Google Maps)

Im letzten Blog habe ich gezeigt wie einfach es mit Spring ist einen REST-Service zu erstellen. Aber auch das Konsumieren eines REST-Services als Client lässt sich in Spring elegant und einfach umsetzten.

Am Beispiel von Google Maps zeige ich wie es funktioniert.

Spring bietet hierfür die Klasse org.springframework.web.client.RestTemplate an. Das folgende Code-Snippet zeigt die einfache Nutzung der RestTemplate-Klasse. Die Methode getForObject erwartet im ersten Parameter die Request-URL des REST-Services. Der zweite Parameter legt fest, in welche Klasse die Antwort gebunden werden soll. Im ersten Beispiel verwenden wir String.

	@Test
	public void testGoogleMaps() {

		RestTemplate restTemplate = new RestTemplate();

		String response = restTemplate.getForObject(
				"http://maps.googleapis.com/maps/api/geocode/json?address="
						+ "Willy-Brandt-Straße 1, 10557, Berlin"
						+ "&sensor=false", String.class);

		System.out.println(response);

		Assert.assertNotNull(response);

	}

Wir erhalten folgende JSON-Antwort:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "1",
               "short_name" : "1",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Willy-Brandt-Straße",
               "short_name" : "Willy-Brandt-Straße",
               "types" : [ "route" ]
            },

   ...

         "geometry" : {
            "location" : {
               "lat" : 52.51985999999999,
               "lng" : 13.37028
            },
   ...

Der erste REST-Client funktioniert wie erwartet! Da wir die JSON-Antwort aber nicht selbst parsen wollen, müssen wir diese Aufgabe an Spring delegieren. Zum Mappen der Antwort benötigen wir simple Java-Beans, die wir mit @JsonProperty(„foo“) annotieren. Die Annotation wird vom Jackson-Mapper Framework bereitgestellt und definiert die Attribute, welche in die angegeben Member-Variablen der Bean gebunden werden soll.

JSON-Antwort:

{
   "results" : [
      {
         "address_components" : [...],
   "status" : "OK"
}

Binding-Object:

@JsonIgnoreProperties(ignoreUnknown = true)
public class GEORespone {

	@JsonProperty("status")
	private String status;

	@JsonProperty("results")
	private AdressDetail[] results;

	public String getStatus() {...}

	public AdressDetail[] getResults() {...}

}

Das folgende Code-Snippet zeigt, wie die Antwort des Google Services in die annotierte Java-Bean GEOResponse automatisch gebunden wird.

	@Test
	public void testGoogleMapsMappedResponse() {

		RestTemplate restTemplate = new RestTemplate();

		GEORespone response = restTemplate.getForObject(
				"http://maps.googleapis.com/maps/api/geocode/json?address="
						+ "Willy-Brandt-Straße 1, 10557, Berlin"
						+ "&sensor=false", GEORespone.class);

		Assert.assertNotNull(response);

	}

Das vollständige Maven-Projekt finden Sie hier rest-service.zip

Neugierig geworden? Sprechen Sie mich an, wenn Sie effektiver Ihre Entwicklungsabteilung aufstellen wollen.

 

REST-Service mit Spring Boot erstellen

Spring Boot macht das Erstellen eines REST-Services zum Kinderspiel.

Für den REST-Service benötigen wir einen Controller. Die Annotation @Controller sorgt dafür, dass Spring die Klasse BookController als Controller erkennt. Nun benötigen wir nur noch eine Service-Methode, die als REST-Service veröffentlicht wird. Die öffentliche Methode „insert“ erhält einen String Parameter und legt damit über einen BookService die Entity Book an. Die erzeugte Entity Book wird als Ergebnis zurückgeliefert. Die Annotation @RequestMapping verdrahtet die Service-Methode „insert“ als REST-Service. Für den Response verwendet der Service JSON.

Fertig! Wir haben erfolgreich einen REST-Service erstellt.

@Controller
@RequestMapping("/books")
public class BookController {

	@Autowired
	BookService bookService;

	@RequestMapping(method = RequestMethod.GET, value = "/insert/{title}")
	public @ResponseBody
	Book insert(@PathVariable String title) {
		return bookService.insertBook(title);
	}

}

Der BookService speichert die Entity Book über ein Spring CrudRepository in eine HSQL DB.

@Component
public class BookService {

	static final Log log = LogFactory.getLog(BookService.class);

	@Autowired
	BookRepository bookRepository;

	public Book insertBook(String title) {
		Book book = new Book();
		book.setTitle(title);
		return bookRepository.save(book);
	}

}

Das vollständige Maven-Projekt findet Ihr hier rest-service.zip

Wer weiter in das Thema einsteigen möchte empfehle ich auch einen Blick in folgenden Artikel: REST Shell Makes writing and testing RESTful applications easier with CLI-based resource discovery and interaction. 

Wie man den REST-Service ebenso einfach als Client wieder konsumiert, zeige ich im nächsten Blog.

Neugierig geworden? Sprechen Sie mich an, wenn Sie effektiver Ihre Entwicklungsabteilung aufstellen wollen.

Spring.IO – Datenzugriff mit CrudRepository

Programmieren war gestern!

In Java Projekten steht man in der Regel vor der Aufgabe Datenobjekte zu speichern, laden oder zu suchen. Dann beginnt der Entwurf der DB und es werden Entity Klassen geschrieben. Danach müssen DAO Klassen entwickelt werden, um die Datenobjekte zu schreiben oder zu lesen. Ist das geschafft benötigt man noch Domain-Services zur Suche der Daten. So wird die Anlage einer neuen Datenbank Tabelle mit allen Implementierungen schnell zur tagesfüllenden Aufgabe.

Spring macht den Datenzugriff mit dem CrudRepository zum Kinderspiel.

Die folgenden drei Code Snippets lösen diese Aufgabe in 10 Minuten.

Zunächst erstellen wir eine Entity Article Klasse mit den Attributen length und size
Über Maven hbm2java lassen wir uns das DB Script zur Erzeugung der DB Tabelle aus der Entity erzeugen.

@Entity
public class Article {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private long id;

	private String length;
	private String size;

        ....
}

Nun Implementieren wir den DB Zugriff für unsere Entity Article. Hierzu erweitern wir unser Interface ArticleRepository mit dem Spring CrudRepository. Fertig!!

Sie fragen sich wo die Implementierung unseres Interfaces ArticleRepository ist? Diese gibt es nicht! Spring sorgt nun dafür, dass wir die Entity speichern, löschen und laden können.

Das CrudRepository macht noch mehr. Die Definition der Methode findByLengthAndSize im Interface reicht aus, damit wir eine Liste erhalten die über Namenskonventionen alle Datensätze mit den gesuchten Parametern retourniert.

import org.springframework.data.repository.CrudRepository;

public interface ArticleRepository extends CrudRepository<Article, Long> {

   List<Article> findByLength(String length);
   List<Article> findByLengthAndSize(String length, String size);
}

Hier sehen wir die Anwendung unseres ArticleRepository im Junit Test

public class ArticleRepositoryTest {

	@Autowired
	ArticleRepository articleRepository;

	@Test
	public void testInsert() {

		Article article = new Article();
		article.setLength("32");
		articleRepository.save(article);

		List<Article> articles = articleRepository.findByLength("32");

		Assert.assertTrue(articles.size() == 1);

	}

}

 

Neugierig geworden? Sprechen Sie mich an, wenn Sie effektiver Ihre Entwicklungsabteilung aufstellen wollen.

Free Git Source Hosting auf Atlassian

Wer für seine privaten Projekte auf der Suche nach einem Sourcehosting ist, wird bei Atlassian fündig. In der Cloud mit unbegrenzt kostenlosen privaten Respositories, inklusive Bug Tracker, Wiki und PullRequests findet man alles zum Verwalten eigener Sourceprojekte.

www.atlassian.com/de/software/bitbucket

Teilnehmer zu IT-Spezialisten geprüft

Im Auftrag der DEKRA Certification GmbH haben wir 6 Teilnehmer des Weiterbildungsprogramms FuTEx zu IT-Spezialisten geprüft. Geprüft wurden Software-Developer und IT-Projektkoordinatoren.

Das Projekt FuTEx ist Teil der Gemeinschaftsinitiative „IT 50plus“ der BITKOM und der Industriegewerkschaft Metall (IG Metall), die vom Bundesministerium für Bildung und Forschung und dem Europäischen Sozialfond gefördert wird. Die Maßnahme richtet sich an beschäftigungslose und beschäftigte ältere Fachkräfte mit einer IT-Biografie, die ihre IT-Handlungskompetenzen auffrischen oder weiterentwickeln wollen. Das Konzept wurde im Rahmen eines für öffentlich geförderte Weiterbildungsprogramme erforderlichen Zulassungsverfahrens von der Cert-IT zertifiziert und ist somit seitens der Bundesagentur für Arbeit durch Bildungsgutscheine förderfähig.

Weitere Informationen zur Qualifizierung zum IT-Spezialisten mit FuTEx und Details zu Inhalt und Ablauf des Projekts gibt es unter www.futexcorp.de und unter www.exirius-gmbh.de

thinking of U an I – the business enabler

Vaadin ist ein freies (unter Apache-Lizenz 2.0) Webanwendungs-Framework für Rich Internet Application (RIA). Im Gegensatz zu JavaScript-Bibliotheken und auf Browser-Plugins basierenden Lösungen bietet es eine serverseitige Architektur, was bedeutet, dass der Großteil der Programmlogik auf dem Server läuft. Auf der Browser-Seite kommt Ajax zum Einsatz, um ein reichhaltiges und interaktives Benutzererlebnis zu bieten. Auf der Client-Seite baut Vaadin auf dem Google Web Toolkit auf und kann damit erweitert werden.

Weitere Infos findet Ihr unter vaadin.com/home