Documentation

Trace:

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
de:jvx:firstapp_step-by-step [2018/01/30 11:42]
admin
de:jvx:firstapp_step-by-step [2024/11/18 10:22] (current)
admin
Line 1: Line 1:
 ~~Title: Erste JVx Applikation (Schritt für Schritt)~~ ~~Title: Erste JVx Applikation (Schritt für Schritt)~~
  
-Das Ziel dieses Tutorials ist die Erstellung einer Applikation mit dem Enterprise Application Framework ​- [[https://​jvx.sibvisions.com|JVx]]. Dazu wird ein erster Einblick in die Möglichkeiten des Frameworks gegeben.+Das Ziel dieses Tutorials ist die Erstellung einer Applikation mit dem Enterprise Application Framework. Dazu wird ein erster Einblick in die Möglichkeiten des Frameworks gegeben.
  
 Die Aufgabe der Applikation ist, die Daten aus einer Datenbanktabelle darzustellen und editierbar zu machen. Die Applikation erfordert eine Authentifizierung mit Benutzername und Passwort. Die Aufgabe der Applikation ist, die Daten aus einer Datenbanktabelle darzustellen und editierbar zu machen. Die Applikation erfordert eine Authentifizierung mit Benutzername und Passwort.
Line 9: Line 9:
   * [[http://​sourceforge.net/​projects/​jvx/​files/​latest/​download|JVx Binärpaket]]   * [[http://​sourceforge.net/​projects/​jvx/​files/​latest/​download|JVx Binärpaket]]
   * Eclipse IDE (>= 3.4) mit JDT (Empfohlen wird: Eclipse IDE für Java EE Entwickler)   * Eclipse IDE (>= 3.4) mit JDT (Empfohlen wird: Eclipse IDE für Java EE Entwickler)
-  * JDK 6.0 (1.6) or höher+  * JDK 8.0 (1.8) or höher
   * HSQLDB Bibliothek (http://​www.hsqldb.org)   * HSQLDB Bibliothek (http://​www.hsqldb.org)
   * Datenbank- bzw. SQL Kenntnisse   * Datenbank- bzw. SQL Kenntnisse
Line 69: Line 69:
 Die Applikation benötigt Serverseitig eine Konfigurationsdatei für Einstellungen die nur die Applikation betreffen. Für die Konfiguration des Servers wird zusätzlich eine Konfigurationsdatei benötigt. Zuerst erstellen wir die Datei für die Applikation:​ Die Applikation benötigt Serverseitig eine Konfigurationsdatei für Einstellungen die nur die Applikation betreffen. Für die Konfiguration des Servers wird zusätzlich eine Konfigurationsdatei benötigt. Zuerst erstellen wir die Datei für die Applikation:​
  
-  * **File** / **New** / **File** - config.xml \\ ((Erstellung direkt im Applikationsverzeichnis **JVxFirstApp**) \\ {{:​jvx:​app_config.png?​nolink|}}+  * **File** / **New** / **File** - config.xml \\ (Erstellung direkt im Applikationsverzeichnis **JVxFirstApp**) \\ {{:​jvx:​app_config.png?​nolink|}}
  
 Die Datei wird wie folgt befüllt: Die Datei wird wie folgt befüllt:
Line 114: Line 114:
 </​server>​ </​server>​
 </​file>​ </​file>​
-Der Server benötigt für unsere Applikation keine speziellen Parameter. \\ \\ Für den Client benötigen wir nun eine Klasse die vom Typ ''​javax.rad.application.IApplication''​ ist. Von JVx wird eine Standard Implementierung durch ''​com.sibvisions.rad.application.Application''​ implementiert. Von dieser werden wir unseren Client ableiten und erstellen somit eine Klasse, im Verzeichnis ''​src.client'',​ mit folgendem Source Code:+Der Server benötigt für unsere Applikation keine speziellen Parameter. \\ \\ Für den Client benötigen wir nun eine Klasse die vom Typ ''​jvx.rad.application.IApplication''​ ist. Von JVx wird eine Standard Implementierung durch ''​com.sibvisions.rad.application.Application''​ implementiert. Von dieser werden wir unseren Client ableiten und erstellen somit eine Klasse, im Verzeichnis ''​src.client'',​ mit folgendem Source Code:
  
 <file java FirstApplication.java>​ <file java FirstApplication.java>​
 package apps.firstapp;​ package apps.firstapp;​
  
-import ​javax.rad.application.genui.UILauncher;​ +import ​jvx.rad.application.genui.UILauncher;​ 
-import ​javax.rad.remote.IConnection;​+import ​jvx.rad.remote.IConnection;​
  
 import com.sibvisions.rad.application.Application;​ import com.sibvisions.rad.application.Application;​
Line 127: Line 127:
 /** /**
  * First application with JVx, Enterprise Application Framework.  * First application with JVx, Enterprise Application Framework.
- ​* ​<p/>+ ​* ​
  * @author René Jahn  * @author René Jahn
  */  */
Line 139: Line 139:
    * Creates a new instance of <​code>​FirstApplication</​code>​ with a technology    * Creates a new instance of <​code>​FirstApplication</​code>​ with a technology
    * dependent launcher.    * dependent launcher.
-   ​* ​<p/>+   ​* ​
    * @param pLauncher the technology dependent launcher    * @param pLauncher the technology dependent launcher
 +   * @throws Exception if initialization fails
    */    */
-  public FirstApplication(UILauncher pLauncher)+  public FirstApplication(UILauncher pLauncher) ​throws Exception
   {   {
     super(pLauncher);​     super(pLauncher);​
Line 217: Line 218:
 package apps.firstapp;​ package apps.firstapp;​
  
-import ​javax.rad.application.genui.UILauncher;​ +import ​jvx.rad.application.genui.UILauncher;​ 
-import ​javax.rad.genui.UIImage;​ +import ​jvx.rad.genui.UIImage;​ 
-import ​javax.rad.genui.component.UIButton;​ +import ​jvx.rad.genui.component.UIButton;​ 
-import ​javax.rad.genui.container.UIToolBar;​ +import ​jvx.rad.genui.container.UIToolBar;​ 
-import ​javax.rad.genui.menu.UIMenu;​ +import ​jvx.rad.genui.menu.UIMenu;​ 
-import ​javax.rad.genui.menu.UIMenuItem;​ +import ​jvx.rad.genui.menu.UIMenuItem;​ 
-import ​javax.rad.remote.IConnection;​+import ​jvx.rad.remote.IConnection;​
  
 import com.sibvisions.rad.application.Application;​ import com.sibvisions.rad.application.Application;​
Line 230: Line 231:
 /** /**
  * First application with JVx, Enterprise Application Framework.  * First application with JVx, Enterprise Application Framework.
- ​* ​<p/>+ ​* ​
  * @author René Jahn  * @author René Jahn
  */  */
Line 242: Line 243:
    * Creates a new instance of <​code>​FirstApplication</​code>​ with a technology    * Creates a new instance of <​code>​FirstApplication</​code>​ with a technology
    * dependent launcher.    * dependent launcher.
-   ​* ​<p/>+   ​* ​
    * @param pLauncher the technology dependent launcher    * @param pLauncher the technology dependent launcher
    */    */
Line 338: Line 339:
 package apps.firstapp.frames;​ package apps.firstapp.frames;​
  
-import ​javax.rad.genui.container.UIGroupPanel;​ +import ​jvx.rad.genui.container.UIGroupPanel;​ 
-import ​javax.rad.genui.container.UIInternalFrame;​ +import ​jvx.rad.genui.container.UIInternalFrame;​ 
-import ​javax.rad.genui.control.UITable;​ +import ​jvx.rad.genui.control.UITable;​ 
-import ​javax.rad.genui.layout.UIBorderLayout;​ +import ​jvx.rad.genui.layout.UIBorderLayout;​ 
-import ​javax.rad.remote.AbstractConnection;​ +import ​jvx.rad.remote.AbstractConnection;​ 
-import ​javax.rad.remote.MasterConnection;​+import ​jvx.rad.remote.MasterConnection;​
  
 import com.sibvisions.rad.application.Application;​ import com.sibvisions.rad.application.Application;​
Line 351: Line 352:
 /** /**
  * A simple database table editor.  * A simple database table editor.
- ​* ​<p/>+ ​* ​
  * @author René Jahn  * @author René Jahn
  */  */
Line 378: Line 379:
   /**   /**
    * Creates a new instance of DBEditFrame for a specific application.    * Creates a new instance of DBEditFrame for a specific application.
-   ​* ​<p/>+   ​* ​
    * @param pApp the application    * @param pApp the application
    * @throws Throwable if the remote access fails    * @throws Throwable if the remote access fails
Line 394: Line 395:
   /**   /**
    * Initializes the model.    * Initializes the model.
-   ​* ​<p/>+   ​* ​
    * @throws Throwable if the initialization throws an error    * @throws Throwable if the initialization throws an error
    */    */
Line 416: Line 417:
   /**   /**
    * Initializes the UI.    * Initializes the UI.
-   ​* ​<p/>+   ​* ​
    * @throws Exception if the initialization throws an error    * @throws Exception if the initialization throws an error
    */    */
Line 468: Line 469:
 |initializeModel|Instanziert die Objekte für den Zugriff auf den Server bzw. die Daten.| |initializeModel|Instanziert die Objekte für den Zugriff auf den Server bzw. die Daten.|
 |InitializeUI|Layouting des WorkScreen.| |InitializeUI|Layouting des WorkScreen.|
-|dispose|Beendet die Verbindung zum Server für den WorkScreen und schließt den Frame. +|dispose|Beendet die Verbindung zum Server für den WorkScreen und schließt den Frame. Die Verbindung müsste nicht explizit geschlossen werden, da dies beim Verwerfen durch den GarbageCollector vollautomatisch passiert. In unserer ersten Applikation ist das aber auch kein Nachteil.|
-Die Verbindung müsste nicht explizit geschlossen werden, da dies beim Verwerfen durch den GarbageCollector vollautomatisch passiert. In unserer ersten Applikation ist das aber auch kein Nachteil.|+
 |createSubConnection|Wir erstellen eine eigene Verbindung zum Server. Das hat den Vorteil, dass am Server ein eigenes Lifecycle Objekt verwendet wird. Dieses Objekt hält alle Objekte, die vom WorkScreen benötigt werden. Nachdem der WorkScreen geschlossen wird, wird auch der benutzte Speicher wieder freigeben. Weiters kann jede Verbindung spezielle Parameter und Timeouts haben. Das gewünschte Lifecycle Objekt wird mit der Klassenbezeichnung definitert: apps.firstapp.frames.DBEdit. \\ \\ Die Klasse erstellen wir im Anschluß.| |createSubConnection|Wir erstellen eine eigene Verbindung zum Server. Das hat den Vorteil, dass am Server ein eigenes Lifecycle Objekt verwendet wird. Dieses Objekt hält alle Objekte, die vom WorkScreen benötigt werden. Nachdem der WorkScreen geschlossen wird, wird auch der benutzte Speicher wieder freigeben. Weiters kann jede Verbindung spezielle Parameter und Timeouts haben. Das gewünschte Lifecycle Objekt wird mit der Klassenbezeichnung definitert: apps.firstapp.frames.DBEdit. \\ \\ Die Klasse erstellen wir im Anschluß.|
  
Line 489: Line 489:
   /**   /**
    * Opens the edit screen.    * Opens the edit screen.
-   ​* ​<p/>+   ​* ​
    * @throws Throwable if the edit frame can not be opened    * @throws Throwable if the edit frame can not be opened
    */    */
Line 505: Line 505:
  
 ^Methode^Beschreibung^ ^Methode^Beschreibung^
-|doOpenDBEdit|Die Methode kann ohne Probleme Throwable werfen. Sämtliche Applikationsfehler werden vom Applikationsrahmen abgefangen und in einem Informationsdialog angezeigt.|+|doOpenDBEdit|Die Methode kann ohne Probleme ​''​Throwable'' ​werfen. Sämtliche Applikationsfehler werden vom Applikationsrahmen abgefangen und in einem Informationsdialog angezeigt.|
 |configureFrame|Diese Methode wird von der Superklasse bereitgestellt und sorgt dafür, dass alle Frames einheitlich aussehen. Dazu zählt unter anderem das Menü Icon.| |configureFrame|Diese Methode wird von der Superklasse bereitgestellt und sorgt dafür, dass alle Frames einheitlich aussehen. Dazu zählt unter anderem das Menü Icon.|
  
Line 519: Line 519:
 /** /**
  * The LCO for the application.  * The LCO for the application.
- ​* ​<p/>+ ​* ​
  * @author René Jahn  * @author René Jahn
  */  */
Line 541: Line 541:
 /** /**
  * The LCO for the session.  * The LCO for the session.
- ​* ​<p/>+ ​* ​
  * @author René Jahn  * @author René Jahn
  */  */
Line 581: Line 581:
 |Die Klasse spiegelt das Lifecycle Objekt für eine Session wieder. Eine Session beginnt in unserem Fall mit der Anmeldung an die Applikation und endet mit der Abmeldung. Pro Session existiert genau eine Instanz dieses Objektes. Es können somit Objekte für die Dauer der Anmeldung verwendet werden. \\ \\ Durch die Ableitung von ''​apps.firstapp.Application''​ ist es auf einfachste Art und Weise möglich, auch die Applikationsobjekte zu verwenden.| |Die Klasse spiegelt das Lifecycle Objekt für eine Session wieder. Eine Session beginnt in unserem Fall mit der Anmeldung an die Applikation und endet mit der Abmeldung. Pro Session existiert genau eine Instanz dieses Objektes. Es können somit Objekte für die Dauer der Anmeldung verwendet werden. \\ \\ Durch die Ableitung von ''​apps.firstapp.Application''​ ist es auf einfachste Art und Weise möglich, auch die Applikationsobjekte zu verwenden.|
  
-^Method^Description^+^Methode^Beschreibung^
 |getDBAccess|Öffnet eine neue Verbindung zu einer HSQL Datenbank, falls dies nicht bereits geschehen ist. \\ \\ Das Exception Handling wird vom Server übernommen.| |getDBAccess|Öffnet eine neue Verbindung zu einer HSQL Datenbank, falls dies nicht bereits geschehen ist. \\ \\ Das Exception Handling wird vom Server übernommen.|
  
Line 589: Line 589:
 package apps.firstapp.frames;​ package apps.firstapp.frames;​
  
-import ​javax.rad.persist.IStorage;​+import ​jvx.rad.persist.IStorage;​
  
 import com.sibvisions.rad.persist.jdbc.DBStorage;​ import com.sibvisions.rad.persist.jdbc.DBStorage;​
Line 597: Line 597:
 /** /**
  * The LCO for the DBEdit WorkScreen.  * The LCO for the DBEdit WorkScreen.
- ​* ​<p/>+ ​* ​
  * @author René Jahn  * @author René Jahn
  */  */
Line 645: Line 645:
 Folgende Schritte sollten durchgeführt werden um eine HSQLDB zu erstellen und zu starten. Folgende Schritte sollten durchgeführt werden um eine HSQLDB zu erstellen und zu starten.
  
-  * Kopieren Sie den HSQLDB JDBC-Teiber (hsqldb.jar) in das Verzeichnis ​\\ ''​../​JVxFirstApp/​libs/​server/'​+  * Kopieren Sie den HSQLDB JDBC-Teiber (''​hsqldb.jar''​) in das Verzeichnis ''​../​JVxFirstApp/​libs/​server/​''
   * Fügen Sie den JDBC-Treiber dem CLASSPATH des JVxFirstApp Projektes hinzu   * Fügen Sie den JDBC-Treiber dem CLASSPATH des JVxFirstApp Projektes hinzu
   * Erstellen Sie eine Datenbank mit dem Alias ''​firstappdb''​ und folgender Tabelle: \\ <file sql>​create table CONTACTS   * Erstellen Sie eine Datenbank mit dem Alias ''​firstappdb''​ und folgender Tabelle: \\ <file sql>​create table CONTACTS
Line 667: Line 667:
 {{:​jvx:​app_finished.png?​nolink|}} {{:​jvx:​app_finished.png?​nolink|}}
  
-Den Source Code und das Eclipse Projekt finden Sie auch im [[https://​www.sibvisions.com/​en/​jvxmdownload|Download]] Bereich.+Den Source Code und das Eclipse Projekt finden Sie auch im [[de:jvx:​example_applications|Download]] Bereich.
This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information