So far we used Nashorn to emulate a Read-Eval-Print-Loop (REPL) for Java. But Java 9 can do better. This version includes a real REPL – the command line tool jshell. Although the Early Access (EA) version is not intended for production, you still can use it for interactively working with Java. Continue reading “Interactive Java with jshell”
Tag: Java
Interactive Java using Nashorn (part I)
Have you ever needed to evaluate a Java class, or just perform some quick tests to see how a statement is working? Writing a full Java program just to test a single command might be a solution. A better one would be to use a REPL (Read Eval Print Loop) tool for an interactive test of Java constructs.
I’m going to write about the upcoming REPL tool of Java 9 soon. But before, I like to show how to perform this task with the recent Java 8 version. Continue reading “Interactive Java using Nashorn (part I)”
JavaLand 2015 & Java aktuell
Last week I visited JavaLand 2015. This great software conference [1] with lot of community activities resides in my home town Brühl [2].
Beside attending lots of tracks I had the opportunity to meet a couple of people face-to-face like Ed Burns (JSF Spec Lead), Geertjan Wielenga (NetBeans product manager), Arun Gupta (Java EE evangelist) and more, especial lot of JUG members from all over Germany. Read an article about my impressions [3].
Most slides are available for download now [4].
And I had the chance, to attend the celebration of 5 years Java aktuell, the Java magazine by the iJUG [5]. Great!
[1] javaland.eu
[2] bruehl.de
[3] heise.de/developer/artikel/developer_artikel_2591380.html
[4] javaland.eu/programm/vortragsunterlagen-zum-download.html
[5] doag.org/index.php?id=1230
Java 8 & NetBeans 8
The official Java 8 release was published today. If you have already installed the Java 8 FCS version, build 132, then usually there is no need to download the current version. It’s almost the same, except some commercial features like Java Flight Recorder, which are bundled to today’s release. Read Mark Reinhold’s blog about JDK 8: General Availability [1].
NetBeans 8 is available too [2]. Take a look on it’s features by some screen-casts [3].
[1] http://mreinhold.org/blog/jdk8-ga
[2] https://netbeans.org/downloads/
[3] https://netbeans.org/kb/docs/intro-screencasts.html
Tutorial web development (with JSF) XIV – Security Part III
Now, after we’ve addressed basic log-in with simple file realm, I want to move on by exchanging the authentication method. Remember, this tutorial is about web development with JavaServer Faces. All I showed for container based security so far, is technology entirely independent from JSF. Same applies to simple form log-in. But, it’s possible to embed this into some JSF techniques. And, further on, using programmatic log-in, this is done by the use of JSF. Continue reading “Tutorial web development (with JSF) XIV – Security Part III”
Mitarbeit an NetBeans (oder anderen Projekten)
Haben Sie nicht Lust, sich an OpenSource-Projekten zu beteiligen? Sie können ein Projekt mitgestalten durch Kommentare, Fehlerreports, Erweiterungswünsche, Programmcode und mehr.
Für die aktuelle Version von NetBeans habe ich lediglich ein paar Fehler berichtet. Hier ein Teil der Resultate dieser Beiträge: Continue reading “Mitarbeit an NetBeans (oder anderen Projekten)”
JSF, Pflichfelder markieren
Kennen Sie dies nicht? Sie haben eine Applikation mit diversen Dialogen, in denen jeweils sowohl Pflicht- als auch optionale Felder enthalten sind. Damit diese beiden Typen für den Anwender unterscheidbar sind, sollen die Pflichfelder markiert werden. Und dass ganze an einer zentralen Stelle, z.B. als Teil eines Templates. Die dahinter liegende Idee ist recht einfach: Vor der Auslieferung an den Browser werden alle Label geprüft, ob die zugehörigen Eingabefelder Pflicht sind. Falls ja, erfolgt die Markierung. Continue reading “JSF, Pflichfelder markieren”
Tutorial Webentwicklung (mit JSF) VII: Backstage
Backstage
[Dieser Artikel ist noch in Bearbeitung und daher unvollständig]
Bei einer traditionellen Anwendung ist es in der Regel so, dass die Applikation selbst für die Darstellung verantwortlich ist. Auch wenn Sie dafür eines Severdienstes wie X bedienen sollte, so obliegt die Steuerung dennoch dem Programm.
Anders bei einer Webapplikation. Hier werden die Daten an einen Browser übergeben, der sich um die Darstellung kümmert. Dazu verpackt der Server den darzustellenden Inhalt in ein (X)HTML-Dokument. Daneben kann der Server noch ein paar Darstellungsinformationen in Form von CSS mitliefern. Alles Weitere ist dann Sache des Browsers. Und so wie es unterschiedliche Browser gibt, kann sich auch die Darstellung unterscheiden. Die stetige Weiterentwicklung der Standards sorgt hier glücklicherweise für eine allmähliche Angleichung. Hält hier der Anwender aber ein lokales CSS vor, so kann die Darstellung wieder anders ausfallen.
Nicht nur, dass eine Webapplikation die Ausgabe an den Browser delegiert; sie wird auch nicht von selbst aktiv! Erst wenn der Anwender via Browser eine Seite anfordert, so liefert die Applikation eine solche aus. Die (scheinbar) aktive Änderung von Inhalten aufgrund von severseitiger Verarbeitung geht nicht ohne weitere Hilfsmittel. Hier lautet das Stichwort AJAX (Asynchronous JavaScript and XML). Womit wir neben (X)HTML und CSS bei einer weiteren browserseitigen Technik angelangt sind: JavaScript. Der Browser fordert zwischendurch mittels JavaScript immer wieder mal mittel pertiellem Request ein paar Daten an und tauscht Teile des Browserinhalts aus. Somit entsteht zumindest zum Teil der Eindruck, der Server aktualisiere den Bildschirm. Tatsächlich geht hier aber immer wieder eine Anfrage vom Client aus (pull). Ein echtes Push, also die vom Server veranlasste aktive Änderung der Darstellung erfordert einen tieferen Griff in die Trickkiste. Hier wird die Antwort an den Client künstlich verzögert, um zu einem späteren noch Informationen übermitteln zu können. Doch dies ist etwas für einen späteren Teil.
Bei einer traditionellen Applikation kann das Programm sofort auf eine Anwendereingabe reagieren. Bei einer Webapplikation bekommt das Programm erst dann etwas von den Anwendereingaben mit, wenn eine neue Seite oder – meist in Verbindung mit AJAX – patriell eine neue Seite angefordert wird. Zu diesem Zeitpunkt können bereits Eingaben in diversen Feldern erfolgt sein. Nicht schwer vorzustellen, dass die Applikation hiermit etwas anders umgehen muss. An dieser Stelle unterstützt JSF den Anwender und löst auf dem Server für die einzelnen Eingaben entsprechende Events aus, so dass sich ein dem Entwickler nicht ganz fremdes Programmiermodell ergibt.
Und noch ein Unterschied: Eine Webapplikation läuft meist in einer Ablaufumgebung, die ihr zahlreiche Dienste zur Verfügung stellt. Eine solche Ablaufumgebung wird als Container beszeichnet, im Falle von JSF ist dies ein sogenannter Servlet-Container. Dies deutet auf die zugrunde liegende Technik der Servlets hin. Auch bei der Entwicklung mit JSF kann die direkte Nutzung von Servlets hier und da angebracht sein. Es kann also nicht schaden, wenn Sie sich auch mit dieser Technik vertraut machen. Mehr dazu in einem späteren Teil.
Der Servlet -Container versorgt die Applikation mit Schnittstellen zu anderen Diensten. Er ist Bestandteil eines Applikations- oder auch Webservers. Zahlreiche Server beinhalten im Wesentlichen einen Container und so werden die Begriffe Container und Applikationsserver häufig synonym genutzt. Tatsächlich kann ein Server jedoch mehrere Container beherrbergen. So z.B., GlassFish, der neben Dem Servlet-Container u.a. Auch einen EJB-Container beherrbergt. Im Folgenden schauen wir von außen auf den Applikationsserver.
Wenn nun ein Anwender die Web-Applikation nutzen möchte, so ruft er in seinem Browser die URL der Anwendung auf. Der Client startet eine Anfrage an den Server. Dieser erkennt anhand der URL, dass er nicht einfach eine statische Seite ausliefern muss, sondern leitet die Anfrage über den Container an die Applikation weiter. Dort wird diese verarbeitet. Die Ausgabe wird als (X)HTML-Dokument genertiert und an den Browser verschickt. Dieser zeigt die Daten an.
<Abbildung fehlt noch>
Bei dieser Sichtweise betrachten wir den ApplicationServer al BlockBox. Interessant ist aber auch, was darin passiert. Erinnern Sie sich kurz an die bisherigen Anwendungen: Hier haben Sie jeweils eine JSF-Seite definiert. Als Seitensprache wurden Facelets eingesetzt. Jede Seite bestand neben HTML auch aus bestimmten Tags, wie beispielsweise “f:InputText”. Im Browser haben jeweils die URL einer solchen Seite angegeben. Entweder direkt oder indirekt als Angabe der Applikations-URL, die aber intern auf eine konkrete Seite verwiesen hat.
Der Server bestimmt anhand der URL die darzustellende Seite, analysiert deren Inhalt und löst die Tags auf. Im einfachsten Fall werden diese durch entsprechende Daten ersetzt. Die so entstandene Seite wird an den Browser geschickt. Dies ist aber lediglich eine vereinfachte Darstellung. Der Browser könnte ja bereits vorher Daten der Aplikation angezeigt haben. Daher prüft JSF als erstes, ob bereits eine Session besteht. Falls ja wird der Komponentenbaum, die logische Abbildung der dazustellenden Inhalte, wieder hergestellt. Eingaben werden validiert und Datenfelder upgedatet. Insgesamt unterscheidet hier JSF sechs verschiedene Phasen.
JPA und Legacy-Datenbanken
Angenommen, Sie müssen Bestellung in einer SQL-Datenbank ablegen. Eine Bestellung enthält Kopfdaten (Adresse, Datum , Nummer etc.) sowie eine variable Anzahl Zeilen (Menge, Artikel, Preis, Steuer, …). Das Ganze soll in zwei Tabellen abgelegt werden.
Table Order (
orId Integer,
[...]
)
Table OrderLine (
olId Integer,
olOrderId Integer,
[...]
)
Um nicht mit SQL direkt arbeiten zu müssen, setzen Sie JPA ein. Zwei Entitätsklassen, die mit den passenden Annotationen versehen sind.
Tutorial Webentwicklung (mit JSF) VI: Schablonen
Schablonen
Im voherigen Teil dieses Tutorials haben wir eine zweite Seite erstellt, die in ihrem Aufbau der ersten gleicht. Nun geht es darum, die gemeinsamen Teile auch gemeinsam zu nutzen. Wir werden daher eine Schablone (template) erstellen, welche die gemeinsamen Elemente enthält und in die von den einzelnen Seiten einfach der individuelle Teil hinein kopiert wird.
Zur Erinnerung, hier nochmals der Quelltext der beiden Seiten:
Continue reading “Tutorial Webentwicklung (mit JSF) VI: Schablonen”