Kapitel 3. Entwicklung von Anwendungen, die die JBoss EAP verwenden
3.1. Überblick
Dieses Handbuch gibt Ihnen Information zum Einstieg in die Anwendungsentwicklung mithilfe des Red Hat JBoss Developer Studio und JBoss EAP 7 Quickstart-Beispielen.
Das Red Hat JBoss Developer Studio ist eine auf Eclipse basierende, integrierte Entwicklungsumgebung (Integrated Development Environment, IDE), die Plugins der JBoss Anwendungsentwicklung integriert. Das JBoss Developer Studio kann Ihnen bei der Entwicklung Ihrer Anwendung durch die Verfügbarkeit von JBoss-spezifischen Assistenten und durch die Fähigkeit, Anwendungen auf JBoss Servern bereitzustellen, helfen. Viele Quickstart-Codebeispiele werden mit der JBoss EAP 7 bereitgestellt um den Benutzern den Einstieg beim Schreiben von Anwendungen mittels verschiedener Java EE 7 Technologien zu erleichtern.
3.2. Einrichten der Entwicklungsumgebung
Es wird empfohlen, JBoss Developer Studio 11.0 oder höher für JBoss EAP 7.1 zu verwenden.
Laden Sie JBoss Developer Studio herunter und installieren sie es.
Anweisungen finden Sie unter Installation des JBoss Developer Studio Stand-Alone über den Installer im JBoss Developer Studio Installationshandbuch.
Richten Sie den JBoss EAP-Server in JBoss Developer Studio ein.
Anweisungen finden Sie unter Verwendung der Runtime Detection zur Einrichtung von JBoss EAP über die IDE im Leitfaden Erste Schritte mit JBoss Developer Studio Tools guide.
3.3. Verwendung von Quickstart-Beispielen
Die Quickstart-Beispiele für JBoss EAP sind Maven-Projekte.
3.3.1. Über Maven
Apache Maven ist ein verteiltes Build-Automatisierungstool, das bei der Entwicklung von Java-Anwendungen für Erstellung, Verwaltung und Build von Software-Projekten verwendet wird. Maven verwendet Standard-Konfigurationsdateien namens Project Object Model (POM), die den Build-Prozess definieren und verwalten. POMs beschreiben die Modul- und Komponenten-Abhängigkeiten, die Build-Reihenfolge und die Ziele für resultierendes Projekt-Packaging und Ausgabe unter Verwendung einer XML-Datei. Dies stellt den korrekten und einheitlichen Build des Projekts sicher.
Maven erreicht dies unter Verwendung eines Repositorys. Ein Maven Repository speichert Java-Bibliotheken, Plugins und andere Build-Artefakte. Das standardmäßige öffentliche Repository ist das Maven 2 Central Repository, aber Repositorys können innerhalb eines Unternehmens privat und intern sein, mit dem Ziel gemeinsame Artefakte unter den Entwicklungsteams zu teilen. Repositorys sind auch von Drittanbietern erhältlich. Weitere Informationen finden Sie im Apache Maven Projekt und im Handbuch Einführung in Repositorys.
Die JBoss EAP beinhaltet ein Maven-Repository, das viele Anforderungen enthält, die Java EE Entwickler in der Regel für den Build von Anwendungen auf der JBoss EAP verwenden.
Weitere Informationen zur Verwendung von Maven mit JBoss EAP finden Sie unter Verwendung von Maven mit JBoss EAP im JBoss EAP Entwicklungsleitfaden.
3.3.2. Verwendung von Maven mit Quickstarts
Die für Build und Deployment von Anwendungen auf der JBoss EAP 7 erforderlichen Artefakte und Abhängigkeiten werden auf einem öffentlichen Repository gehostet. Beim Start mit JBoss EAP 7 Quickstarts ist es nicht mehr nötig Ihre Maven settings.xml Datei zur Verwendung dieser Repositorys beim Build von Quickstarts zu konfigurieren. Die Maven Repositorys sind jetzt in den POM Dateien des Quickstart-Projekts konfiguriert. Diese Konfigurationsmethode soll den Einstieg in die Quickstarts erleichtern, wird jedoch im Allgemeinen nicht für Produktionsprojekte empfohlen, da sie Ihren Build verlangsamen kann.
Red Hat JBoss Developer Studio umfasst Maven, dies muss also nicht eigens heruntergeladen und installiert werden. Die Verwendung von JBoss Developer Studio Version 11.0 oder höher wird empfohlen.
Falls Sie die Maven-Befehlszeile für Build und Deployment Ihrer Anwendungen verwenden wollen, müssen Sie zuerst Maven vom Apache Maven Projekt entsprechend der Anleitung in der Maven-Dokumentation herunterladen und installieren.
3.3.3. Download und Ausführung der Quickstarts
3.3.3.1. Download der Quickstarts
Die JBoss EAP kommt mit einem umfassenden Satz an Quickstart-Codebeispielen, die den Benutzern beim Schreiben von Anwendungen mittels verschiedener Java EE 7 Technologien helfen sollen. Die Quickstarts können vom Red Hat Kundenportal heruntergeladen werden.
- Melden Sie sich beim Red Hat Kundenportal an.
- Klicken Sie auf Downloads.
- Klicken Sie in der Produkt Downloads Liste auf Red Hat JBoss Enterprise Application Platform.
- Wählen Sie 7.1 in der Auswahlliste Version aus.
- Suchen Sie den Eintrag Red Hat JBoss Enterprise Application Platform 7.1.0 Quickstarts in der Tabelle und klicken Sie auf Download.
- Speichern Sie die Zip-Datei im gewünschten Verzeichnis.
- Entpacken Sie die Zip-Datei.
3.3.3.2. Ausführen der Quickstarts im JBoss Developer Studio
Sobald die Quickstarts heruntergeladen sind, können Sie ins JBoss Developer Studio importiert und in der JBoss EAP bereitgestellt werden.
Importieren der Quickstarts ins JBoss Developer Studio
Jeder Quickstart wird mit einer POM Datei geliefert, die seine Projekt- und Konfigurationsinformationen enthält. Mit dieser POM Datei können Sie den Quickstart einfach ins JBoss Developer Studio importieren.
Befindet sich Ihr Quickstart-Projektordner beim Import ins JBoss Developer Studio innerhalb der IDE-Arbeitsfläche, so generiert IDE einen ungültigen Projektnamen und WAR-Archivnamen. Stellen Sie sicher, dass sich Ihr Quickstart-Projektordner außerhalb der IDE-Arbeitsfläche befindet, ehe Sie anfangen!
- Starten Sie das JBoss Developer Studio.
- Wählen Sie Datei → Import.
Wählen Sie Maven → Bestehende Maven Projekte und klicken Sie dann auf Weiter.
Abbildung 3.1. Import bestehender Maven Projekte

Gehen Sie zum gewünschten Quickstart-Verzeichnis (zum Beispiel
helloworldQuickstart) und klicken Sie auf OK. Das Projekte Listenfeld wird mit derpom.xmlDatei des gewählten Quickstart-Projekts bestückt.Abbildung 3.2. Auswahl von Maven-Projekten

- Klicken Sie auf Fertigstellen.
Führen Sie den helloworld Quickstart aus
Durch die Ausführung des helloworld Quickstarts kann man ganz einfach prüfen, ob der JBoss EAP Server konfiguriert ist und ordnungsgemäß läuft.
- Wenn Sie noch keinen Server definiert haben, fügen Sie den JBoss EAP-Server dem JBoss Developer Studio hinzu. Siehe Verwendung der Runtime Detection zur Einrichtung von JBoss EAP über die IDE im Leitfaden Erste Schritte mit JBoss Developer Studio Tools.
Klicken Sie rechts auf das Projekt helloworld in der Registerkarte Project Explorer und wählen SieAusführen als → Ausführung auf Server aus.
Abbildung 3.3. Ausführen als - Ausführen auf Server

Wählen Sie den JBoss EAP 7.1 Server aus der Serverliste aus und klicken Sie auf Weiter.
Abbildung 3.4. Ausführen auf Server

Der helloworld Quickstart ist bereits zur Konfiguration auf dem Server aufgelistet. Klicken Sie auf Fertigstellen um den Quickstart bereitzustellen.
Abbildung 3.5. Bearbeiten von auf dem Server konfigurierten Ressourcen

Überprüfen Sie die Ergebnisse.
-
In der Registerkarte Server ändert sich der JBoss EAP 7.1 Serverstatus auf
Started. Der Konsole Reiter zeigt Nachrichten zum JBoss EAP Server-Start und zum Deployment des
helloworldQuickstarts.WFLYUT0021: Registered web context: /helloworld WFLYSRV0010: Deployed "helloworld.war" (runtime-name : "helloworld.war")
-
Die Anwendung
helloworldfinden Sie unter http://localhost:8080/helloworld, sie zeigt den TextHello World!an.
-
In der Registerkarte Server ändert sich der JBoss EAP 7.1 Serverstatus auf
Weitere Informationen zum helloworld Quickstart finden Sie unter Den helloworld Quickstart erkunden.
Führen Sie den bean-validation Quickstart aus
Einige Quickstarts, wie der bean-validation Quickstart, bieten keine Benutzerschnittstellen-Schicht und stellen stattdessen Arquillian-Tests bereit um ihre Funktionalität zu demonstrieren.
-
Importieren Sie den
bean-validationQuickstart ins JBoss Developer Studio. - Klicken Sie auf der Registerkarte Servers rechts auf den Server und wählen Sie Start aus, um den JBoss EAP-Server zu starten. Wenn Sie keine Registerkarte Servers sehen oder noch keinen Server definiert haben, fügen Sie den JBoss EAP-Server dem JBoss Developer Studio hinzu. Siehe Verwendung der Runtime Detection zur Einrichtung von JBoss EAP über die IDE im Leitfaden Erste Schritte mit JBoss Developer Studio Tools.
-
Klicken Sie rechts auf das Projekt
bean-validationauf der Registerkarte Project Explorer und wählen Sie Ausführen als → Maven Build aus. Geben Sie Folgendes in das Ziele Eingabe-Feld ein und klicken Sie dann auf Ausführen.
clean verify -Parq-remote
Abbildung 3.6. Konfiguration bearbeiten

Überprüfen Sie die Ergebnisse.
Der Konsole Reiter zeigt die Ergebnisse des
bean-validationArquillian-Tests:------------------------------------------------------- T E S T S ------------------------------------------------------- Running org.jboss.as.quickstarts.bean_validation.test.MemberValidationTest Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.189 sec Results : Tests run: 5, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------
3.3.3.3. Ausführen der Quickstarts von der Befehlszeile aus
Build und Bereitstellung von Quickstarts von der Befehlszeile aus sind mit Maven einfach. Wenn Sie Maven noch nicht installiert haben, gehen Sie zum Apache Maven Projekt um es herunterzuladen und zu installieren.
Eine README.md Datei im root Verzeichnis des Quickstarts enthält allgemeine Informationen über Systemanforderungen, über die Konfiguration von Maven, über das Hinzufügen von Benutzern und über die Ausführung von Quickstarts.
Jeder Quickstart enthält zudem seine eigene README.md Datei, die spezifische Anweisungen und Maven-Befehle zur Ausführung des Quickstarts bereitstellt.
Führen Sie den helloworld Quickstart von der Befehlszeile aus
-
Überprüfen Sie die
README.mdDatei im root-Verzeichnis des helloworld Quickstarts. Starten Sie den JBoss EAP-Server.
$ EAP_HOME/bin/standalone.sh- Gehen Sie zum helloworld Quickstart-Verzeichnis.
Build und Deployment des Quickstarts über den in der
README.mdDatei angegebenen Maven-Befehl.$ mvn clean install wildfly:deploy
-
Die Anwendung helloworld ist nun unter http://localhost:8080/helloworld verfügbar und zeigt den Text
Hello World!an.
3.4. Gehen Sie die Quickstart-Beispiele durch
3.4.1. Erkunden Sie den Quickstart helloworld
Der helloworld Quickstart demonstriert, wie sich ein einfaches Servlet auf JBoss EAP bereitstellen lässt. Die Geschäftslogik ist in einem Dienst verkapselt, der als Contexts and Dependency Injection (CDI) Bean bereitgestellt und in ein Servlet eingesetzt wird. Dieser Quickstart ist der Startpunkt, über den Sie sicherstellen können, dass Sie den Server korrekt konfiguriert und gestartet haben.
Detaillierte Anweisungen zum Erstellen und Bereitstellen dieses Quickstarts über die Befehlszeile finden Sie in der Datei README.html am Ursprung des Quickstart-Verzeichnisses helloworld. Dieses Thema zeigt Ihnen, wie Sie das Red Hat JBoss Developer Studio zur Verwendung des Quickstarts nutzen können und geht davon aus, dass Sie das Red Hat JBoss Developer Studio installiert haben, Maven konfiguriert haben und den Quickstart helloworld importiert und erfolgreich ausgeführt haben.
Voraussetzungen
- Installieren Sie JBoss Developer Studio. Anweisungen finden Sie unter Installation des JBoss Developer Studio Stand-Alone über den Installer im JBoss Developer Studio Installationshandbuch.
-
Führen Sie den Quickstart
helloworldaus. Anweisungen finden Sie unter Ausführen der Quickstarts im JBoss Developer Studio. -
Prüfen Sie, dass der Quickstart
helloworlderfolgreich in JBoss EAP bereitgestellt wurde, indem Sie den Webbrowser öffnen und über http://localhost:8080/helloworld auf die Anwendung zugreifen.
Untersuchen Sie die Verzeichnisstruktur
Den Code für den helloworld Quickstart finden Sie im Verzeichnis QUICKSTART_HOME/helloworld/. Der helloworld Quickstart besteht aus einem Servlet und einer CDI-Bean. Er umfasst zudem die Datei beans.xml im Verzeichnis WEB-INF/ der Anwendung mit Versionsnummer 1.1 und einen bean-discovery-mode all. Diese Marker-Datei identifiziert den WAR als Bean-Archiv und teilt JBoss EAP mit, in dieser Anwendung nach Beans zu suchen und die CDI zu aktivieren.
Das Verzeichnis src/main/webapp/ enthält die Dateien für den Quickstart. Alle Konfigurationsdateien für dieses Beispiel befinden sich im Verzeichnis WEB-INF/ in src/main/webapp/, einschließlich der Datei beans.xml. Das Verzeichnis src/main/webapp/ umfasst zudem eine Datei index.html, die eine einfache Meta-Aktualisierung verwendet, um den Browser des Benutzers zum Servlet weiterzuleiten, das sich unter http://localhost:8080/helloworld/HelloWorld befindet. Für den Quickstart ist keine web.xml Datei erforderlich.
Untersuchen Sie den Code
Die Paket-Deklaration und -Importe sind aus diesen Auflistungen ausgeschlossen. Die vollständige Auflistung finden Sie im Quellcode des Quickstarts.
Gehen Sie den
HelloWorldServletCode durch.Die Datei
HelloWorldServlet.javabefindet sich im Verzeichnissrc/main/java/org/jboss/as/quickstarts/helloworld/. Dieses Servlet sendet die Informationen zum Browser.Beispiel: HelloWorldServlet Klassencode
42 @SuppressWarnings("serial") 43 @WebServlet("/HelloWorld") 44 public class HelloWorldServlet extends HttpServlet { 45 46 static String PAGE_HEADER = "<html><head><title>helloworld</title></head><body>"; 47 48 static String PAGE_FOOTER = "</body></html>"; 49 50 @Inject 51 HelloService helloService; 52 53 @Override 54 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 55 resp.setContentType("text/html"); 56 PrintWriter writer = resp.getWriter(); 57 writer.println(PAGE_HEADER); 58 writer.println("<h1>" + helloService.createHelloMessage("World") + "</h1>"); 59 writer.println(PAGE_FOOTER); 60 writer.close(); 61 } 62 63 }Tabelle 3.1. HelloWorldServlet Details
Zeile Hinweis 43
Sie müssen nur die Annotation
@WebServlethinzufügen und eine Zuordnung zu einer URL, über die auf das Servlet zugegriffen wird, bereitstellen.46-48
Jede Webseite benötigt korrekt geformtes HTML. Dieser Quickstart verwendet statische Strings, um den Mindest-Header und Footer-Output zu schreiben.
50-51
Diese Zeilen fügen die HelloService CDI-Bean ein, die die tatsächliche Nachricht erstellt. Wird die API von HelloService nicht geändert, können wir so die Implementierung von HelloService später ändern, ohne die Ansichtsebene zu ändern.
58
Diese Zeile ruft den Dienst ab, um die Nachricht "Hello World" zu erstellen und sie über die HTTP-Anfrage auszugeben.
Gehen Sie den
HelloServiceCode durch.Die Datei
HelloService.javabefindet sich im Verzeichnissrc/main/java/org/jboss/as/quickstarts/helloworld/. Dieser Dienst gibt einfach eine Nachricht aus. Es ist kein XML und keine Annotations-Registrierung erforderlich.Beispiel: HelloService Klassencode
public class HelloService { String createHelloMessage(String name) { return "Hello " + name + "!"; } }
3.4.2. Erkunden Sie den numberguess-Quickstart
Der numberguess Quickstart zeigt Ihnen, wie Sie eine einfache, nicht persistente Anwendung erstellen und in JBoss EAP bereitstellen können. Informationen werden über eine JSF-Ansicht angezeigt und die Geschäftslogik in zwei CDI-Beans eingekapselt. Im numberguess Quickstart haben Sie zehn Versuche, eine Zahl zwischen 1 und 100 zu erraten. Nach jedem Versuch wird Ihnen mitgeteilt, ob Sie zu hoch oder zu niedrig lagen.
Den Code für den Quickstart numberguess finden Sie im Verzeichnis QUICKSTART_HOME/numberguess/, wobei QUICKSTART_HOME das Verzeichnis ist, in das Sie die JBoss EAP Quickstarts heruntergeladen und in das Sie diese entpackt haben. Der numberguess Quickstart besteht aus Beans, Konfigurationsdateien und Facelet-Ansichten (JSF) und ist als WAR-Modul gepackt.
Detaillierte Anweisungen zum Erstellen und Bereitstellen dieses Quickstarts über die Befehlszeile finden Sie in der Datei README.html am Ursprung des Quickstart-Verzeichnisses helloworld. Die folgenden Beispiele nutzen Red Hat JBoss Developer Studio, um den Quickstart auszuführen.
Voraussetzungen
- Installieren Sie JBoss Developer Studio. Anweisungen finden Sie unter Installation des JBoss Developer Studio Stand-Alone über den Installer im JBoss Developer Studio Installationshandbuch.
-
Führen Sie den Quickstart
numberguessaus. Anweisungen finden Sie unter Ausführen der Quickstarts im JBoss Developer Studio, ersetzen Sie in der Anleitunghelloworlddurchnumberguess. -
Prüfen Sie, dass der Quickstart
numberguesserfolgreich in JBoss EAP bereitgestellt wurde, indem Sie den Webbrowser öffnen und über http://localhost:8080/numberguess auf die Anwendung zugreifen.
Untersuchen Sie die Konfigurationsdateien
Alle Konfigurationsdateien für dieses Beispiel finden Sie im Verzeichnis QUICKSTART_HOME/numberguess/src/main/webapp/WEB-INF/ des Quickstarts.
Untersuchen Sie die Datei
faces-config.xml.Dieser Quickstart verwendet Version JSF 2.2 des Dateinamens
faces-config.xml. Eine standardisierte Version von Facelets ist der Standard-Ansichtshandler in JSF 2.2 und benötigt daher keine Konfiguration. Diese besteht nur aus dem Root-Element und ist eine einfache Marker-Datei, die darauf hinweist, dass JSF in der Anwendung aktiviert sein sollte.<faces-config version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"> </faces-config>Gehen Sie die Datei
beans.xmldurch.Die Datei
beans.xmlumfasst die Versionsnummer 1.1 und denbean-discovery-modeall. Diese Datei ist eine Marker-Datei, die WAR als Bean-Archiv identifiziert und JBoss EAP mitteilt, in dieser Anwendung nach Beans zu suchen und die CDI zu aktivieren.<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" bean-discovery-mode="all"> </beans>
Dieser Quickstart benötigt keine Datei web.xml.
3.4.2.1. Gehen Sie den JSF-Code durch
JSF verwendet die Dateierweiterung .xhtml für Quelldateien, liefert die gerenderten Ansichten jedoch über die Erweiterung .jsf. Die Datei home.xhtml befindet sich im Verzeichnis src/main/webapp/.
Beispiel: JSF Quellcode
19<html xmlns="http://www.w3.org/1999/xhtml"
20 xmlns:ui="http://java.sun.com/jsf/facelets"
21 xmlns:h="http://java.sun.com/jsf/html"
22 xmlns:f="http://java.sun.com/jsf/core">
23
24 <head>
25 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
26 <title>Numberguess</title>
27 </head>
28
29 <body>
30 <div id="content">
31 <h1>Guess a number...</h1>
32 <h:form id="numberGuess">
33
34 <!-- Feedback for the user on their guess -->
35 <div style="color: red">
36 <h:messages id="messages" globalOnly="false" />
37 <h:outputText id="Higher" value="Higher!"
38 rendered="#{game.number gt game.guess and game.guess ne 0}" />
39 <h:outputText id="Lower" value="Lower!"
40 rendered="#{game.number lt game.guess and game.guess ne 0}" />
41 </div>
42
43 <!-- Instructions for the user -->
44 <div>
45 I'm thinking of a number between <span
46 id="numberGuess:smallest">#{game.smallest}</span> and <span
47 id="numberGuess:biggest">#{game.biggest}</span>. You have
48 #{game.remainingGuesses} guesses remaining.
49 </div>
50
51 <!-- Input box for the users guess, plus a button to submit, and reset -->
52 <!-- These are bound using EL to our CDI beans -->
53 <div>
54 Your guess:
55 <h:inputText id="inputGuess" value="#{game.guess}"
56 required="true" size="3"
57 disabled="#{game.number eq game.guess}"
58 validator="#{game.validateNumberRange}" />
59 <h:commandButton id="guessButton" value="Guess"
60 action="#{game.check}"
61 disabled="#{game.number eq game.guess}" />
62 </div>
63 <div>
64 <h:commandButton id="restartButton" value="Reset"
65 action="#{game.reset}" immediate="true" />
66 </div>
67 </h:form>
68
69 </div>
70
71 <br style="clear: both" />
72
73 </body>
74</html>
Die folgenden Zeilennummern entsprechen denen, die bei Ansicht der Datei in JBoss Developer Studio angezeigt werden.
Tabelle 3.2. JSF Details
| Zeile | Hinweis |
|---|---|
|
36-40 |
Dies sind die Nachrichten, die dem User gesendet werden können: "Higher!" und "Lower!" |
|
45-48 |
Wenn der Benutzer rät, verringert sich der Bereich der Zahlen, die geraten werden können. Der Satz ändert sich, um sicherzustellen, dass der Benutzer den Zahlenbereich eines gültigen Rateversuchs kennt. |
|
55-58 |
Dieses Eingabefeld ist mit einer Bean-Eigenschaft verbunden, die einen Wertausdruck verwendet. |
|
58 |
Eine Validator-Bindung wird verwendet, um sicherzustellen, dass der Benutzer nicht versehentlich eine Zahl außerhalb des gültigen Ratebereichs eingibt. Ohne diesen Validator könnte der Benutzer einen Rateversuch für eine ungültige Zahl verbrauchen. |
|
59-61 |
Der Benutzer benötigt einen Weg, den Rateversuch zum Server zu senden. Hier binden wir die Aktionsmethode an die Bean. |
3.4.2.2. Gehen Sie die Klassendateien durch
Alle numberguess Quickstart-Quelldateien finden Sie im Verzeichnis QUICKSTART_HOME/numberguess/src/main/java/org/jboss/as/quickstarts/numberguess/. Die Paket-Deklaration und -Importe sind aus diesen Auflistungen ausgeschlossen. Die vollständige Auflistung finden Sie im Quellcode des Quickstarts.
Gehen Sie den
Random.javaQualifikator-Code durchEin Qualifikator wird verwendet, um Unklarheiten zwischen den zwei Beans zu vermeiden, die beide für eine Injektion auf Grundlage ihres Typs in Frage kommen. Weitere Informationen zu Qualifikatoren finden Sie unter Einen Qualifikator verwenden, um eine unklare Injektion zu lösen im JBoss EAP Entwicklerleitfaden. Der Qualifikator
@Randomwird zur Injektion einer Zufallszahl verwendet.@Target({ TYPE, METHOD, PARAMETER, FIELD }) @Retention(RUNTIME) @Documented @Qualifier public @interface Random { }Gehen Sie den
MaxNumber.javaQualifikator-Code durchDer
@MaxNumberQualifikatorwird zur Injektion der erlaubten Höchstzahl verwendet.@Target({ TYPE, METHOD, PARAMETER, FIELD }) @Retention(RUNTIME) @Documented @Qualifier public @interface MaxNumber { }Gehen Sie den
Generator.javaCode durchDie Klasse
Generatorerstellt die Zufallszahl über eine Producer-Methode und stellt die mögliche Höchstzahl über dieselbe Methode zur Verfügung. Diese Klasse ist auf Anwendungsebene ausgelegt, damit nicht jedes Mal eine andere Zufallszahl erstellt wird.@SuppressWarnings("serial") @ApplicationScoped public class Generator implements Serializable { private java.util.Random random = new java.util.Random(System.currentTimeMillis()); private int maxNumber = 100; java.util.Random getRandom() { return random; } @Produces @Random int next() { // a number between 1 and 100 return getRandom().nextInt(maxNumber - 1) + 1; } @Produces @MaxNumber int getMaxNumber() { return maxNumber; } }Gehen Sie den
Game.javaCode durchDie auf Sitzungsebene ausgelegte Klasse
Gameist der primäre Zugangspunkt für die Anwendung. Sie ist dafür verantwortlich, das Spiel einzurichten oder zurückzusetzen, den Rateversuch des Benutzers zu erfassen und zu validieren und dem Benutzer über eineFacesMessageFeedback zu geben. Sie verwendet eine Post-Construct-Lifecycle-Methode, um das Spiel zu initialisieren, indem eine Zufallszahl aus der Bean@Random Instance<Integer>abgerufen wird.Beachten Sie die Annotation
@Namedin der Klasse. Diese Annotation ist nur erforderlich, wenn die Bean über Expression Language (EL), in diesem Fall#{game}, für eine JSF-Ansicht verfügbar gemacht werden soll.@SuppressWarnings("serial") @Named @SessionScoped public class Game implements Serializable { /** * The number that the user needs to guess */ private int number; /** * The users latest guess */ private int guess; /** * The smallest number guessed so far (so we can track the valid guess range). */ private int smallest; /** * The largest number guessed so far */ private int biggest; /** * The number of guesses remaining */ private int remainingGuesses; /** * The maximum number we should ask them to guess */ @Inject @MaxNumber private int maxNumber; /** * The random number to guess */ @Inject @Random Instance<Integer> randomNumber; public Game() { } public int getNumber() { return number; } public int getGuess() { return guess; } public void setGuess(int guess) { this.guess = guess; } public int getSmallest() { return smallest; } public int getBiggest() { return biggest; } public int getRemainingGuesses() { return remainingGuesses; } /** * Check whether the current guess is correct, and update the biggest/smallest guesses as needed. Give feedback to the user * if they are correct. */ public void check() { if (guess > number) { biggest = guess - 1; } else if (guess < number) { smallest = guess + 1; } else if (guess == number) { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Correct!")); } remainingGuesses--; } /** * Reset the game, by putting all values back to their defaults, and getting a new random number. We also call this method * when the user starts playing for the first time using {@linkplain PostConstruct @PostConstruct} to set the initial * values. */ @PostConstruct public void reset() { this.smallest = 0; this.guess = 0; this.remainingGuesses = 10; this.biggest = maxNumber; this.number = randomNumber.get(); } /** * A JSF validation method which checks whether the guess is valid. It might not be valid because there are no guesses left, * or because the guess is not in range. * */ public void validateNumberRange(FacesContext context, UIComponent toValidate, Object value) { if (remainingGuesses <= 0) { FacesMessage message = new FacesMessage("No guesses left!"); context.addMessage(toValidate.getClientId(context), message); ((UIInput) toValidate).setValid(false); return; } int input = (Integer) value; if (input < smallest || input > biggest) { ((UIInput) toValidate).setValid(false); FacesMessage message = new FacesMessage("Invalid guess"); context.addMessage(toValidate.getClientId(context), message); } } }

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.