Aus Raspberry Pi Geek 06/2019

Infoscreen mit E-Ink-Displays (Seite 2)

Maven

Bei Maven handelt es sich um ein Build-Management-Tool, das typischerweise für Java-Anwendungen zum Einsatz kommt. Anhand der Angaben in Mavens Konfigurationsdatei pom.xml, die unter anderem die Abhängigkeiten des Projekts enthält, übernimmt Maven das Bauen, Installieren und Ausrollen der Anwendung. Sowohl Spring Boot als auch Maven bauen auf das Paradigma “Konvention vor Konfiguration”, um die Komplexität zu verringern: Das Einhalten gewisser Vorgaben, wie etwa einer vorgeschriebenen Dateistruktur, ersetzt eine kompliziertere Konfigurierbarkeit.

Man könnte einwenden, für so ein kleines Projekt sei das Verwenden eines Application Servers überdimensioniert. Das mag sein, doch andererseits schenkt Spring Boot mit seinen Starter-Paketen einem viel an Funktionalität, die man sonst selbst einbinden müsste: Es genügt, die gewünschten Abhängigkeiten in Mavens pom.xml anzugeben. So gibt es in dieser Datei neben Einträgen für Spring Boot auch solche für das Display, den Datenbanktreiber, für Swagger sowie für die Spring-Boot-Starter-Pakete für Datenbankzugriffe (spring-boot-starter-data-jpa) und REST- Webtechniken (spring-boot-starter-web).

Als Datenbank kommt eine H2-Datenbank zum Einsatz, deren Fähigkeiten für den Zweck völlig ausreichen. Möchten Sie diese Datenbank gegen eine andere austauschen, müssen Sie dazu lediglich die Dependency in der pom.xml austauschen. Eclipse als frei verfügbare Entwicklungsumgebung bietet Unterstützung für Java und Maven.

Für das Bauen des Demo-Projekts brauchen Sie noch ein Java-JDK, Git und Maven. Demo bedeutet in diesem Zusammenhang, dass wir zu Demonstrationszwecken und um Doppler zu vermeiden im Folgenden nur das 4,2-Zoll-Display ansteuern. Den kompletten Code zum Demo-Projekt finden Sie auf Github [3] und klonen ihn über die Kommandozeile (Listing 1). Anschließend liegt im aktuellen Verzeichnis ein neuer Ordner namens eInkDemo/ mit allen Quelldateien. Die Java-Klassen in ihrer Paketstruktur befinden sich unter src/main/java/.

Listing 1

$ git clone https://github.com/ankesreich/eInkDemo.git

Nachrichten ablegen

In Listing 2 teilt die Annotation @RestController über der Spring-Bean-Klasse RestApi dem Spring-Container mit, dass ein REST-Service definiert wird. Die Annotationen über den Methoden (beispielsweise addMessage()) dieser Klasse definieren die einzelnen REST-Services. Die Annotation @ApiOperation stammt von Swagger und dient der Beschreibung des REST-Services auf der von Swagger erstellten Internet-Seite, dem REST-Client.

Zur Trennung von Schnittstellen- und Business-Logik nimmt die REST-Schnittstelle die Aufrufe lediglich entgegen und leitet sie an den DisplayService (Listing 3) weiter. Den als @Service definierten DisplayService nutzt die Klasse RestApi, indem sie intern eine Member-Variable des Typs DisplayService definiert, die sie mit @Autowired annotiert. Der DisplayService übernimmt alle Datenbankzugriffe und das Ansteuern des Displays.

Listing 2

@RestController
public class RestApi {
  @Autowired
  DisplayService displayService;
  @ApiOperation(value = "Stores the message in the database.")
  @PostMapping("/addMessage")
  void addMessage(
    @RequestParam(required=true) String author,
    @RequestParam(required=true) String text
    ) {
      displayService.saveMessageInDb(author, text);
  }
  [...]
}

Listing 3

@Service
public class DisplayService {
  @Autowired
  MessageRepository messageRepository;
  public void saveMessageInDb(String author, String text) {
    Message message = new Message(author, new Date(), text);
    messageRepository.saveAndFlush(message);
  }
  [...]
}

Auch die Datenbanktabelle Message müssen Sie nicht selbst anlegen – dazu genügt es, die Java-Klasse Message (Listing 4) mit @Entity zu annotieren. Die Member-Variablen von Message entsprechen den (ebenfalls über Annotationen definierten) Datenbankspalten. Auch beim Datenbankzugriff hilft Spring: Das mit @Repository annotierte Interface MessageRepository (Listing 5) stellt bereits eine für das Projekt ausreichende Auswahl an geerbten Datenbankoperationen zu Verfügung. Mit der Methode saveAndFlush() lässt sich die Nachricht in die Datenbank schreiben (Listing 3).

Listing 4

@Entity
@Table(name = "MESSAGE")
public class Message {
  @Id
  @GeneratedValue
  private Long id;
  @Column(nullable = false, updatable = true, length = 100)
  private String message;
  @Column(nullable = false, updatable = true, length = 100)
  private String author;
  @Column(nullable = false)
  @Temporal(TemporalType.TIMESTAMP)
  private Date creationDate;
  public Message(String author, Date creationDate, String text) {
    this.author = author;
    this.creationDate = creationDate;
    this.text = text;
  }
[...]
}

Listing 5

@Repository
public interface MessageRepository extends JpaRepository<Message, Long> {
}

Hier passiert viel “Magie” im Hintergrund von Spring und dem Spring-Container. Das nimmt dem Programmierer die handwerklichen Aspekte ab, sodass er sich ganz auf das Implementieren der Business-Logik konzentrieren kann.

REST-Service Refresh Display

Java Swing generiert die monochrome Bitmap für die Anzeige am Display. Swing ist zwar schon etwas in die Jahre gekommen, gehört aber zum Standardumfang von Java und reicht für den Zweck völlig aus. Im mit Swing erstellten Panel sorgen diverse Layout-Manager dafür, dass bei dynamisch erzeugten unterschiedlich langen Texten auch die Formatierung und die “Verteilung übriger Pixel” funktionieren. Auch Grafiken lassen sich ins Panel integrieren.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 7 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben