Marcel's Tech-Blog

Letzte Beiträge

Meine ersten Erfahrungen mit embedded Jetty

In diesem Beitrag möchte ich kurz auf meine Erfahrungen mit embedded Jetty eingehen. In den letzten Wochen habe ich mehrere kleine Projekte im Kopf gehabt, welche ich gerne umsetzen würde. Da ich unter der Woche mit Web Applikationen zu tun habe, wollte ich mein Wissen dahingehend nutzen. Im Projekt wird jedoch ein proprietärer Application Server verwendet, welcher einfach viel zu viel Funktionen und Möglichkeiten bietet, die ich in keinster Weise benötigen werde. Mit Tomcat hatte ich in letzter Zeit viel gute Erfahrungen, doch es gibt auch andere Möglichkeiten statische Seiten oder ganze Applikationen zu nutzen. Zumindest habe ich davon gehört 🙂

Jetty

Jetty ist ein open-source projekt welches einen HTTP Server, HTTP Client anbietet und mit javax.servlet Container umzugehen weis. Es ist eine standalone Java Anwendung, die durch einfache Kommandos gestartet und konfiguriert werden kann (siehe Quickstart). Nähere möchte ich nicht auf Jetty (standalone) eingehen. Wer mehr wissen möchte, darf sich gerne auf der Projektseite oder der Dokumentation (aktuelle Version 9.4.6) detailiert informieren.

Jetty Embedded

Leider habe ich mir nicht notiert wo ich das Kommentar gefunden habe, möchte es aber an dieser Stelle (sinngemäß) rezitieren:

Hört auf eure Anwendungen für einen Application Server vorzubereiten. Integriert den Application Server IN eure Anwendung.

Zuerst war ich ein wenig skeptisch, da in meinem Arbeitsalltag genau dass der Fall ist. Es werden Anwendungen in EARs und WARs verpackt um diese dann anschließend auf einem proprietären Application Server zu deployen. Doch anscheinend geht es auch anders. Und genau dieses Mittel möchte ich hier kurz demonstrieren.

Beispiele

Im folgenden habe ich zwei kleine Spielereien von mir Dokumentiert. All die folgenden Beispiele wurden mit folgender Maven POM erzeugt. Besonderes Interesse gilt natürlich dabei der Definition der Jetty Dependency.

Static HTTP Server

In diesem Beispiel habe ich mit wenigen Zeilen einen voll funktionsfähigen File/Web Server erstellt. Mit ein paar Handgriffen kann dieser Server als executable JAR in einen Ordner deiner Wahl kopiert werden. Je nach Konfiguration des ResourceBase Parameters ermöglicht diese JAR einen portablen WebServer des aktuellen oder eines spezifischen Dateipfad (hier "./src/webapp" ).

Dieser Static HTTP Server kann für zweierlei Dinge benutzt werden. Zum einen als einfachen File Server zum Anzeigen der Dateien innerhalb des angegebenen Verzeichnisses. Oder zum anderen als Web Server für die Anzeige von WebContent via eines beliebigen Browsers. Ohne weitere Konfiguration prüft Jetty eigenständig ob in dem angegebenen Verzeichnis eine index.html Seite vorhanden ist. Wenn dem so ist, wird der File Server zum Web Server. Egal ob eine index.html Seite gefunden wird oder nicht, kann über die Einstellung resource_handler.setWelcomeFiles(String[] welcomeFiles);  die gewünschte Startseite des Web Servers überschrieben werden.

Hier ausgewählte Eindrücke.

REST Service

In meinem nächsten Projekt habe ich einen REST Service zu bauen. Da dieser durch die Mobilität attraktiver wird, wollte ich Jetty embedded mit Jersey kombinieren. Dies war genau wie der HttpServer mit wenigen Handgriffen und Zeilen Code startklar.

DummyClass Servlet

Mit dieser kleinen Klasse habe ich ein stupides Testwerkzeug gebaut um die Funktionstüchtigkeit meines Servlet zu prüfen. Zuerst habe ich versucht die DummyClass innerhalb meiner RESTServer Klasse zu belassen.Leider war der Zugriff mit dieser Variante nicht erfolgreich, weshalb ich die Klasse in eine eigene Datei auslagern musste (siehe Commit).

DummyClass als integrierte Klasse innerhalb von RESTServer.class

RESTServer

Der Server ist unter dem Port 8090 zu erreichen und das Servlet unter dem Pfad /dummy/test . Ob bei dem ServletHolder die Methode .setInitOrder(int order) wirklich notwendig war, hatte ich nicht kontrolliert. Die Konfiguration habe ich aus diesem Beitrag entnommen und nicht weiter hinterfragt. Aber das Ergebnis spricht für sich. 🙂

erfolgreicher REST Zugriff auf die DummyClass

Ausblick

Mit diesem Wissen, wie ich mit einfachen Mitteln einen FileServer, HttpServer oder einen RestService mit Jetty bereit stelle, können die zukünftigen Projekte nun kommen. Am meisten freue ich mich auf mein Projekt, welches die manuellen Aktionen von Fernzugriff auf mein Media Center mit Owncloud automatisiert. Hierfür möchte ich die vorhandenen Dateien über eine Web Oberfläche sichtbar machen und bei Auswahl die Datei über den REST Service im Hintergrund konvertieren. Je nach dem wie viel Spaß mir das Projekt bereitet, werde ich eventuell noch weitere Features hinzufügen.

Quellen

Als Grundlagen für diesen Beitrag haben diese Beiträge und Dokumentationen gedient:

Der in diesem Beitrag entstandenen Dateien sind unter meinem github repository zu finden.

Fernzugriff auf mein Media Center mit Owncloud

In meinem letzten Beitrag habe ich beschrieben wie ich meine Daten-Cloud aufgesetzt habe. Nach mehreren Wochen Nutzung sind mir ein paar Aspekte aufgefallen, welche ich gerne kombinieren möchte. Vor meiner beruflich bedingten erhöhten Reisetätigkeit haben meine Frau und ich gerne Abends zusammen Serien und Filme geschaut. Dies ist leider auf Grund der großen Distanz aktuell nicht möglich, da weder sie noch ich unter der Woche im heimischen Netzwerk sind.

Nun möchte ich meine Daten mit Owncloud nicht nur zum Download anbieten können, sondern auch über meine Owncloud Instanz die Datei(en) meiner Wahl direkt abspielen können. Zu meinem Bedauern ist die von uns benutze Internetleitung nicht dafür ausgelegt Medien in Blu-Ray-Qualität / -Größe zu übertragen. Aus diesem Grund möchte ich meine bestehenden Dateien vor dem Streamen so konvertieren, dass diese für das Streamen die geeignete Größe und von mir akzeptierte Qualität haben. Aktuell nutze ich ausschließlich das Format .mkv, welches leider durch den Owncloud internen Movie Player nicht abgespielt werden kann (siehe Server Enhancement Request). Deshalb werde ich bei der Größenreduktion gleich darauf achten die Owncloud Player kompatiblen Formate zu benutzen.
Da ich jedoch meine ursprüngliche (hochwertige) Qualität meiner Dateien nicht verlieren möchte, werde ich also Duplikate anfertigen. Diese sollen nach einer beliebigen Zeit (z.B. 30 Tagen) automatisiert gelöscht werden, sonst bekomme ich schneller Platz Probleme auf meinem NAS.

Folgenden Aufbaue habe ich mir Überlegt:

Neben meinen originalen Dateien, die ich bisher über Samba-Shares an meine Owncloud freigegeben habe, werde ich nun eine weitere Freigabe einrichten. Diese neue Freigabe wird zukünftig meine konvertierten Dateien beinhalten. Auch, wenn ich rein Theoretisch weiterhin meine originalen Dateien in Owncloud zugänglich machen könnte, sehe ich darin keinen Sinn mehr. Denn das aktuelle Format und die Größe der Dateien spricht gegen das Teilen.

Für den ersten Durchstich dieser Lösung werde ich die Dateien manuell mit Handbrake formatieren und in der neuen Freigabe deponieren. Für die Automatisierung habe ich mir auch schon Gedanken gemacht und die ersten Zeilen Code sind ebenfalls vorhanden. Doch für den jetzigen Zeitpunkt ist das Projekt nicht der Rede wert. Für das Projekt möchte ich noch ein wenig mit verschiedenen Technologien spielen, welche ich in der Kombination noch nicht verwendet habe. Dazu aber mehr in meinem nächsten Beitrag.

Meine eigene Daten-Cloud

Da ich gerne Daten mit Freunden und Familie teilen möchte und mir die kostenlosen Services von Dropbox, GoogleDrive oder OneDrive nicht ausreichen möchte ich den Schritt zur eigenen Cloud gehen. In diesem Beitrag möchte ich meine Schritte zur Einrichtung und Konfiguration der Software Owncloud dokumentieren. (mehr …)

Shu-Ha-Ri, bald wird geschätzt wie nie!

Diese Woche geht es um Shu-Ha-Ri und seine Bedeutung für mich in der Praxis. Betrachtet wird dabei weniger die Art des Lernens, sondern mehr die Denkweise. Als Beispiel soll eine kürzliche Erfahrung bei einem Kunden dienen.

(mehr …)

Eclipse Che und Neon wie Kartoffeln und Apfelsaft!

Eclipse Che ist auch diese Woche wieder Thema meines Blogs. Letzte Woche habe ich in meinem Beitrag beschrieben wie man Eclipse Che einrichtet. Als Vorbereitung für meinen Vortrag beim Kunden gehe ich in diesem Beitrag auf die Unterschiede zwischen Che und Neon ein. (mehr …)

Wie man Eclipse Che auf Linux/Windows einrichtet

Diese Woche möchte ich mit euch meine Erfahrungen, hinsichtlich der Installation und Einrichtung von Eclipse Che auf Windows / Linux (Ubuntu) , teilen. (mehr …)

Erste Erfahrungen mit Remote-Gaming durch Steam und Steam Link

Diese Woche möchte ich das Thema Remote-Gaming, was auch als Inhouse-Streaming bekannt ist, ansprechen, da es mich schon seit Wochen beschäftigt. In diesem Beitrag beschreibe ich welche Vorstellungen ich von Inhouse-Streaming hatte, wie sich diese bewahrheitet haben und welche Schwierigkeiten bei der Einrichtung auftraten.

(mehr …)

Willkommen auf meinem Blog!

Hallo,

mein Name ist Marcel Hodan. Ich möchte mich und meinen Inhalt, den ich beabsichtigte hier zu veröffentlichen, kurz vorstellen, bevor ich die ersten Beiträge auf meinem Blog veröffentliche.

(mehr …)