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.

  1. 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.

  2. 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.

  1. Melden Sie sich beim Red Hat Kundenportal an.
  2. Klicken Sie auf Downloads.
  3. Klicken Sie in der Produkt Downloads Liste auf Red Hat JBoss Enterprise Application Platform.
  4. Wählen Sie 7.1 in der Auswahlliste Version aus.
  5. Suchen Sie den Eintrag Red Hat JBoss Enterprise Application Platform 7.1.0 Quickstarts in der Tabelle und klicken Sie auf Download.
  6. Speichern Sie die Zip-Datei im gewünschten Verzeichnis.
  7. 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.

Wichtig

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!

  1. Starten Sie das JBoss Developer Studio.
  2. Wählen Sie Datei Import.
  3. Wählen Sie Maven Bestehende Maven Projekte und klicken Sie dann auf Weiter.

    Abbildung 3.1. Import bestehender Maven Projekte

  4. Gehen Sie zum gewünschten Quickstart-Verzeichnis (zum Beispiel helloworld Quickstart) und klicken Sie auf OK. Das Projekte Listenfeld wird mit der pom.xml Datei des gewählten Quickstart-Projekts bestückt.

    Abbildung 3.2. Auswahl von Maven-Projekten

  5. 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.

  1. 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.
  2. 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

  3. 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

  4. 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

  5. Ü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 helloworld Quickstarts.

      WFLYUT0021: Registered web context: /helloworld
      WFLYSRV0010: Deployed "helloworld.war" (runtime-name : "helloworld.war")
      Copy to Clipboard Toggle word wrap
    • Die Anwendung helloworld finden Sie unter http://localhost:8080/helloworld, sie zeigt den Text Hello World! an.

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.

  1. Importieren Sie den bean-validation Quickstart ins JBoss Developer Studio.
  2. 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.
  3. Klicken Sie rechts auf das Projekt bean-validation auf der Registerkarte Project Explorer und wählen Sie Ausführen als Maven Build aus.
  4. Geben Sie Folgendes in das Ziele Eingabe-Feld ein und klicken Sie dann auf Ausführen.

    clean verify -Parq-remote
    Copy to Clipboard Toggle word wrap

    Abbildung 3.6. Konfiguration bearbeiten

  5. Überprüfen Sie die Ergebnisse.

    Der Konsole Reiter zeigt die Ergebnisse des bean-validation Arquillian-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] ------------------------------------------------------------------------
    Copy to Clipboard Toggle word wrap

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

  1. Überprüfen Sie die README.md Datei im root-Verzeichnis des helloworld Quickstarts.
  2. Starten Sie den JBoss EAP-Server.

    $ EAP_HOME/bin/standalone.sh
    Copy to Clipboard Toggle word wrap
  3. Gehen Sie zum helloworld Quickstart-Verzeichnis.
  4. Build und Deployment des Quickstarts über den in der README.md Datei angegebenen Maven-Befehl.

    $ mvn clean install wildfly:deploy
    Copy to Clipboard Toggle word wrap
  5. 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
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.

  1. Gehen Sie den HelloWorldServlet Code durch.

    Die Datei HelloWorldServlet.java befindet sich im Verzeichnis src/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 }
    Copy to Clipboard Toggle word wrap

    Expand
    Tabelle 3.1. HelloWorldServlet Details
    ZeileHinweis

    43

    Sie müssen nur die Annotation @WebServlet hinzufü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.

  2. Gehen Sie den HelloService Code durch.

    Die Datei HelloService.java befindet sich im Verzeichnis src/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 + "!";
        }
    }
    Copy to Clipboard Toggle word wrap

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
Untersuchen Sie die Konfigurationsdateien

Alle Konfigurationsdateien für dieses Beispiel finden Sie im Verzeichnis QUICKSTART_HOME/numberguess/src/main/webapp/WEB-INF/ des Quickstarts.

  1. 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>
    Copy to Clipboard Toggle word wrap
  2. Gehen Sie die Datei beans.xml durch.

    Die Datei beans.xml umfasst die Versionsnummer 1.1 und den bean-discovery-mode all. 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>
    Copy to Clipboard Toggle word wrap
Anmerkung

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>
Copy to Clipboard Toggle word wrap

Die folgenden Zeilennummern entsprechen denen, die bei Ansicht der Datei in JBoss Developer Studio angezeigt werden.

Expand
Tabelle 3.2. JSF Details
ZeileHinweis

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.

  1. Gehen Sie den Random.java Qualifikator-Code durch

    Ein 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 @Random wird zur Injektion einer Zufallszahl verwendet.

    @Target({ TYPE, METHOD, PARAMETER, FIELD })
    @Retention(RUNTIME)
    @Documented
    @Qualifier
    public @interface Random {
    
    }
    Copy to Clipboard Toggle word wrap
  2. Gehen Sie den MaxNumber.java Qualifikator-Code durch

    Der @MaxNumber Qualifikator wird zur Injektion der erlaubten Höchstzahl verwendet.

    @Target({ TYPE, METHOD, PARAMETER, FIELD })
    @Retention(RUNTIME)
    @Documented
    @Qualifier
    public @interface MaxNumber {
    }
    Copy to Clipboard Toggle word wrap
  3. Gehen Sie den Generator.java Code durch

    Die Klasse Generator erstellt 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;
        }
    }
    Copy to Clipboard Toggle word wrap
  4. Gehen Sie den Game.java Code durch

    Die auf Sitzungsebene ausgelegte Klasse Game ist 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 eine FacesMessage Feedback 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@Named in 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);
            }
        }
    }
    Copy to Clipboard Toggle word wrap
Nach oben
Red Hat logoGithubredditYoutubeTwitter

Lernen

Testen, kaufen und verkaufen

Communitys

Über Red Hat Dokumentation

Wir helfen Red Hat Benutzern, mit unseren Produkten und Diensten innovativ zu sein und ihre Ziele zu erreichen – mit Inhalten, denen sie vertrauen können. Entdecken Sie unsere neuesten Updates.

Mehr Inklusion in Open Source

Red Hat hat sich verpflichtet, problematische Sprache in unserem Code, unserer Dokumentation und unseren Web-Eigenschaften zu ersetzen. Weitere Einzelheiten finden Sie in Red Hat Blog.

Über Red Hat

Wir liefern gehärtete Lösungen, die es Unternehmen leichter machen, plattform- und umgebungsübergreifend zu arbeiten, vom zentralen Rechenzentrum bis zum Netzwerkrand.

Theme

© 2025 Red Hat