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 10:23]
admin
de:jvx:firstapp_step-by-step [2018/01/30 11:50] (current)
admin
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 higher+  * JDK 6.0 (1.6) or höher
   * HSQLDB Bibliothek (http://​www.hsqldb.org)   * HSQLDB Bibliothek (http://​www.hsqldb.org)
   * Datenbank- bzw. SQL Kenntnisse   * Datenbank- bzw. SQL Kenntnisse
Line 65: Line 65:
 Zur Vollständigkeit kann der src Ordner gelöscht werden. Dieser wird in unserer Applikation nicht benötigt. Zur Vollständigkeit kann der src Ordner gelöscht werden. Dieser wird in unserer Applikation nicht benötigt.
  
-== Application development ​==+== Applikationsentwicklung ​==
  
-On the server side, the application needs a configuration file for the settings that only concern the applicationFor the configuration of the server, an extra configuration file is neededFirst we create the file for the application:+Die Applikation benötigt Serverseitig eine Konfigurationsdatei für Einstellungen die nur die Applikation betreffenFür die Konfiguration des Servers wird zusätzlich eine Konfigurationsdatei benötigtZuerst erstellen wir die Datei für die Applikation:
  
-  * **File** / **New** / **File** - config.xml \\ (created directly in the application folder ​**JVxFirstApp**) \\ {{:​jvx:​app_config.png?​nolink|}}+  * **File** / **New** / **File** - config.xml \\ (Erstellung direkt im Applikationsverzeichnis ​**JVxFirstApp**) \\ {{:​jvx:​app_config.png?​nolink|}}
  
-The file is filled as follows:+Die Datei wird wie folgt befüllt:
  
 <file xml config.xml>​ <file xml config.xml>​
Line 90: Line 90:
 </​file>​ </​file>​
  
-^Parameter^Description+^Parameter^Beschreibung
-|securitymanager/​class|The security manager for verification of the user names/password when logging into the application.| +|securitymanager/​class|Der Sicherheitsmanager für die Überprüfung von Benutzernamen/Passwort bei der Anmeldung an die Applikation.| 
-|securitymanager/​usersfile|The file with the username/password combinations allowed.| +|securitymanager/​usersfile|Die Datei mit den erlaubten Benutzername/Passwort Kombinationen.| 
-|lifecycle/​mastersession|The class name of the server object which is instantiated when the client performs a login or starts a new MasterSession.| +|lifecycle/​mastersession|Die Klassenbezeichnung des Server Objektes, das instanziert wird, wenn der Client eine Anmeldung durchführt bzw. eine neue MasterSession ​startet.| 
-|lifecycle/​application|The class name of the server object which is instantiated when the application is first accessedThis object is reused every time the application is accessed.|+|lifecycle/​application|Die Klassenbezeichnung des Server Objektes das instanziert wird beim ersten Zugriff auf die ApplikationFür alle weiteren Zugriffe wird dieses Objekt wiederverwendet.|
  
-The server configuration file must be stored in the folder ​''​../​JVxFirstApp/​rad/​server''​.+Die Konfigurationsdatei des Servers muss im Verzeichnis ​''​../​JVxFirstApp/​rad/​server'' ​abgelegt werden.
  
-However, the folder does not appear ​in our Eclipse ​project because it is at a higher folder levelThe configuration file could be created directly in the file system or we can create a folder link in our project:+Dieses Verzeichnis scheint ​in unserem ​Eclipse ​Projekt jedoch nicht auf, da es sich auf einer höheren Verzeichnisebene befindetDie Konfigurationsdatei könnte direkt im Dateisystem erstellt werden oder wir erstellen einen Verzeichnis-Link ​in unserem Projekt:
  
   * **File** / **New** / **Folder** \\ {{:​jvx:​server_link.png?​nolink|}}   * **File** / **New** / **Folder** \\ {{:​jvx:​server_link.png?​nolink|}}
  
-The configuration file can then be created:+Anschließend kann die Konfigurationsdatei erstellt werden:
  
   * **File** / **New** / **File** - config.xml \\ {{:​jvx:​server_config.png?​nolink|}}   * **File** / **New** / **File** - config.xml \\ {{:​jvx:​server_config.png?​nolink|}}
  
-The file is filled as follows:+Die Datei wird wie folgt befüllt:
  
 <file xml config.xml>​ <file xml config.xml>​
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''​ istVon JVx wird eine Standard Implementierung durch ''​com.sibvisions.rad.application.Application''​ implementiertVon dieser werden wir unseren Client ableiten und erstellen somit eine Klasseim Verzeichnis ''​src.client''​mit folgendem Source Code:
-For the client, we now need a class of type javax.rad.application.IApplication. ​A standard implementation of JVx is implemented via com.sibvisions.rad.application.Application. ​We then derive our client from it and thereby create a classin the directory ​src.client, ​with the following source code:+
  
 <file java FirstApplication.java>​ <file java FirstApplication.java>​
Line 173: Line 172:
 </​file>​ </​file>​
  
-^Method^Description+^Methode^Beschreibung
-|Constructor|The standard constructor cannot be usedas each application is started with a technology-dependent launcherThis launcher is already passed to the application in the constructor.| +|Konstruktor|Der Standardkonstruktor kann nicht verwendet werdenda jede Applikation mit einem Technologieabhängigen Launcher gestartet wirdDieser Launcher wird bereits im Konstruktor an die Applikation übergeben.| 
-|createConnection|The communication protocol is initialisedDirectServerConnection ​is sufficient for our applicationbecause both the client and the server are started ​in the same VM. However, if an application server is in use, a HttpConnection ​could also be used.| +|createConnection|Das Kommunikationsprotokoll wird initialisiertFür unsere Applikation ist eine ''​DirectServerConnection''​ ausreichendda sowohl Client als auch Server ​in der selben ​VM gestartet werdenWird jedoch ein Applikationsserver eingesetzt könnte alternativ eine ''​HttpConnection''​ verwendet werden.| 
-|getApplicationName|Sets the application nameThis name is needed for the communication with the serveras the  latter uses the appropriate application configuration depending on the application name\\ In our case the application name must be firstapp, ​because the work directory is also called ​''​../​JVxFirstApp/​rad/​firstapp/''​. ​The application name MUST always match the directory name!|+|getApplicationName|Legt den Applikationsnamen festDieser Name wird für die Kommunikation mit dem Server benötigtda dieser abhängig vom Applikationsnamen die passende Applikationskonfiguration verwendet. In unserem Fall muss der Applikationsname ''​firstapp''​ lautenda das Arbeitsverzeichnis ​''​../​JVxFirstApp/​rad/​**firstapp**/'' ​ebenso lautetDer Applikationsname MUSS immer dem Verzeichnisnamen entsprechen!|
  
-It is now time for the first start of the applicationTo do so, we set up a Runtime ​configuration:+Nun ist es an der Zeit für den ersten Start der ApplikationDafür erstellen wir eine Runtime ​Konfiguration:
  
-  * **Run** / **Run  Configurations...** / **Application - New launch configuration** - with the settings: \\ {{:​jvx:​runtime_main.png?​nolink|}} \\ {{:​jvx:​runtime_args.png?​nolink|}}+  * **Run** / **Run  Configurations...** / **Application - New launch configuration** - mit den Einstellungen: \\ {{:​jvx:​runtime_main.png?​nolink|}} \\ {{:​jvx:​runtime_args.png?​nolink|}}
  
-^Parameter^Description+^Parameter^Beschreibung
-|Main class|The technology-dependant launcher is defined hereWe use the Swing technology for our application and start a Swing application.| +|Main class|Hier wird der Technologie Abhängige Launcher festgelegtWir verwenden für unsere Applikation die Technologie ​Swing und starten eine Swing Applikation.| 
-|Program arguments|The launcher must be told which application to startFor our Swing application,​ we can use the mechanism of programme arguments and pass the class name of our application.|+|Program arguments|Dem Launcher muss mitgeteilt werden, welche Applikation gestartet wirdFür unsere ​Swing Applikation können wir dafür den Mechanismus der Programm Argumente nutzen und übergeben den Klassennamen unserer Applikation.|
  
-The application can now be started and looks as follows:+Die Applikation kann nun gestartet werden und sollte wie folgt aussehen:
  
 {{:​jvx:​application_firststart.png?​nolink|}} {{:​jvx:​application_firststart.png?​nolink|}}
  
-The first login attempt fails with the following message+Der erste Anmeldeversuch scheitert mit dem Hinweis:
  
 <​code>​Userfile '​users.xml'​ does not exist!</​code>​ <​code>​Userfile '​users.xml'​ does not exist!</​code>​
  
-This file was defined in the ''​config.xml'' ​file of the application;​ howeverit has not yet been createdWe do so now here: +Diese Datei wurde im ''​config.xml'' ​der Applikation definiertbisher jedoch noch nicht erstelltDas holen wir an dieser Stelle nach:
   * **File** / **New** / **File** - users.xml \\ {{:​jvx:​users.png?​nolink|}}   * **File** / **New** / **File** - users.xml \\ {{:​jvx:​users.png?​nolink|}}
  
-We fill the file with the following:+Die Datei befüllen wir mit:
  
 <file xml users.xml>​ <file xml users.xml>​
Line 208: Line 206:
 </​file>​ </​file>​
  
-Any number of user lines can be entered!+Es können beliebig viele ''​user''​ Zeilen eingetragen werden!
  
-Now the login to the application works perfectlyHowever, to fulfill our task, we still need the possibility to display or edit a database tableWe will now turn to this part of the task.+Nun ist die Anmeldung an die Applikation ohne Probleme möglichZur Erfüllung unserer Aufgabenstellung fehlt jedoch noch die Möglichkeit eine Datenbanktabelle anzuzeigen bzwzu editieren. Diesem Teil der Aufgabe widmen wir uns jetzt.
  
-== Create a work screen==+== Erstellen eines WorkScreens ​==
  
-Before we create a WorkScreen, ​we prepare the application to display the WorkScreenTo do so, we extend our ''​FirstApplication'' ​class as follows:+Bevor wir den WorkScreen ​erstellenbereiten wir die Applikation für die Anzeige des WorkScreens vorDazu erweitern wir unsere ​''​FirstApplication'' ​Klasse wie folgt:
  
 <file java FirstApplication.java>​ <file java FirstApplication.java>​
Line 324: Line 322:
 </​file>​ </​file>​
  
-^Method^Description+^Methode^Beschreibung
-|afterLogin|This method is invoked form the super class after a successful loginWe use this method to extend our menu and our ToolBar. \\ \\ It is not necessary to undo our changes after logout as this is done by the super class.| +|afterLogin|Diese Methode wird von der Superklasse aufgerufen nachdem eine erfolgreiche Anmeldung durchgeführt wurdeWir verwenden diese Methode um unser Menü und unsere ​ToolBar ​zu erweitern. \\ \\ Es ist nicht nötig nach der Abmeldung die Änderungen rückgängig zu machen, da dies von der Superklasse übernommen wird.| 
-|doOpenDBEdit|This method is called when the Menu or the ToolBar ​button are selected.| +|doOpenDBEdit|Diese Methode wird aufgefufen wenn das Menü oder der ToolBar ​Button gedrückt werden.| 
-|createMenuItem|Provided by the super class to create menu entriesThe first parameter contains the name of the method which is to be called when the menu entry is selectedThe second parameter contains the command ​(ActionCommand) ​which does not play any role in our caseThe text of the menu entry is to be defined in the third parameter and, lastly, the image for the entry is passed.| +|createMenuItem|Wird von der Superklasse bereitgestellt um Menü Einträge zu erstellenDer erste Parameter enthält die Bezeichnung der Methode die aufgerufen werden soll wenn der Menü Eintrag gedrückt wirdDer zweite Parameter enthält den Befehl ​(ActionCommand) ​der in unserem Fall keine Rolle spieltIm dritten Parameter ist der Text des Menü Eintrags zu definieren und abschließend wird das Bild für den Eintrag übergeben.| 
-|createToolBarButton|Similar to ''​createMenuItem'', ​except that here a button is created which adjusts itself to the layout of the ToolBar.| +|createToolBarButton|Ähnlich wie ''​createMenuItem'' ​nur wird hierbei ein Button erzeugtder sich dem Layout der ToolBar ​anpasst.| 
-|UIImage.getImage|Provides a predefined image from the image library of JVx\\ We use a predefined image for convenience.|+|UIImage.getImage|Liefert ein vordefiniertes Bild aus der Bild Bibliothek von JVx \\ Wir verwenden zwecks Komfort ein vordefiniertes Bild.|
  
-We now create the client class for our work screen:+Wir erstellen nun die Client Klasse für unseren WorkScreen:
  
   * **File** / **New** / **Class** \\ ''​src.client'',​ ''​apps.firstapp.frames.DBEditFrame''​\\ {{:​jvx:​dbedit_new.png?​nolink|}}   * **File** / **New** / **Class** \\ ''​src.client'',​ ''​apps.firstapp.frames.DBEditFrame''​\\ {{:​jvx:​dbedit_new.png?​nolink|}}
  
-and use the following ​Source Code:+und verwenden folgenden ​Source Code:
  
 <file java DBEditFrame.java>​ <file java DBEditFrame.java>​
Line 467: Line 465:
 </​file>​ </​file>​
  
-^Method^Description+^Methode^Beschreibung
-|initializeModel|Instantiates the objects for access to the server or to data.| +|initializeModel|Instanziert die Objekte für den Zugriff auf den Server bzw. die Daten.| 
-|InitializeUI|Layout of the work screen.| +|InitializeUI|Layouting des WorkScreen.| 
-|dispose|Ends the connection to the server for the WorkScreen ​and closes the Frame. ​The connection must not be explicitely closedas this takes place fully automatically by the GarbageCollector. ​This is however not a drawback in our first application.| +|dispose|Beendet die Verbindung zum Server für den WorkScreen ​und schließt den Frame. ​Die Verbindung müsste nicht explizit geschlossen werdenda dies beim Verwerfen durch den GarbageCollector ​vollautomatisch passiertIn unserer ersten Applikation ist das aber auch kein Nachteil.| 
-|createSubConnection|We create our own connection to the serverThis has the advantage that a separate ​Lifecycle ​object is used on the serverThis object contains all objects which are needed by the WorkScreen. ​Once the WorkScreen ​is closedthe used memory is releasedMoreover, each connection can have special parameters and timeoutsThe requested ​Lifecycle ​object is defined with the class name''​apps.firstapp.frames.DBEdit''​. \\ \\ The class we will create later.|+|createSubConnection|Wir erstellen eine eigene Verbindung zum ServerDas hat den Vorteil, dass am Server ein eigenes ​Lifecycle ​Objekt verwendet wirdDieses Objekt hält alle Objekte, die vom WorkScreen ​benötigt werdenNachdem der WorkScreen ​geschlossen wirdwird auch der benutzte Speicher wieder freigebenWeiters kann jede Verbindung spezielle Parameter und Timeouts habenDas gewünschte ​Lifecycle ​Objekt wird mit der Klassenbezeichnung definitert: apps.firstapp.frames.DBEdit. \\ \\ Die Klasse erstellen wir im Anschluß.|
  
-^Member^Description+^Member^Beschreibung
-|connection|The connection to the serverespecially for the WorkScreen. ​A special communication protocol is used in the background. In our case, it is represented by the class ''​DirectServerConnection''​.| +|connection|Die Verbindung zum Serverspeziell für den WorkScreen. ​Im Hintergrund wird ein spezielles Kommunikationsprotokoll verwendet. In unserem Fall spiegelt dieses die Klasse ​''​DirectServerConnection'' ​wieder.| 
-|dataSource|The DataSource ​is independent of the communication protocol and takes care of the data transfer between client and serverThe connection ​defines under which name the server-side object is to be found in the lifecycle object.| +|dataSource|Die DataSource ​ist unabhängig vom Kommunikationsprotokoll und kümmert sich um die Übertragung der Daten zwischen Client und ServerFür den Transfer wird die ''​connection''​ verwendet.| 
-|rdbContacts|The model and the controller for data display. \\ The name ''​contacts'' ​defines under which name the server-side business object can be found.| +|rdbContacts|Das Model und der Controller für die Datenanzeige. \\ Der Name ''​contacts'' ​legt fest unter welchen Namen das serverseitige Objekt im Lifecycle Objekt zu finden ist.| 
-|table|The view for data display.|+|table|Die View für die Datenanzeige.|
  
-The WorkScreen ​is now ready and can be integrated ​in the applicationWe now implement the missing call:+Der WorkScreen ​ist nun fertig und kann in die Applikation integriert werdenWir implementieren nun den fehlenden Aufruf:
  
 <file java FirstApplication.java>​ <file java FirstApplication.java>​
Line 505: Line 503:
 </​file>​ </​file>​
  
-^Method^Description+^Methode^Beschreibung
-|doOpenDBEdit|The method can easily throw a  ​Throwable. ​All application errors are caught by the application and shown in an information dialogue.| +|doOpenDBEdit|Die Methode kann ohne Probleme ''​Throwable''​ werfenSämtliche Applikationsfehler werden vom Applikationsrahmen abgefangen und in einem Informationsdialog angezeigt.| 
-|configureFrame|This method is provided by the super class and ensures that all frames have a similar lookThis also includes the menu icon.|+|configureFrame|Diese Methode wird von der Superklasse bereitgestellt und sorgt dafür, dass alle Frames einheitlich aussehenDazu zählt unter anderem das Menü Icon.|
  
-The client implementation is now finishedBefore we can use the application,​ we must create the missing server classesWe create the following classes:+Die Client Implementierung ist nun abgeschlossenBevor wir die Applikation verwenden können müssen die fehlenden Server Klassen erstellt werdenWir erstellen folgende Klassen:
  
   * **File** / **New** / **Class** \\ ''​src.server'',​ ''​apps.firstapp.Application''​\\ {{:​jvx:​lco_application.png?​nolink|}}   * **File** / **New** / **Class** \\ ''​src.server'',​ ''​apps.firstapp.Application''​\\ {{:​jvx:​lco_application.png?​nolink|}}
Line 529: Line 527:
 </​file>​ </​file>​
  
-^Description+^Beschreibung
-|The class represents the lifecycle object for an applicationThere is exactly one instance of this class for each application,​ thereby enabling the use of session-wide objects.|+|Die Klasse spiegelt das Lifecycle Objekt für eine Applikation wiederPro Applikation existiert genau eine Instanz dieser Klasse. Es können somit Session übergreifende Objekte verwendet werden.|
  
   * **File** / **New** / **Class** \\ ''​src.server'',​ ''​apps.firstapp.Session''​ \\ {{:​jvx:​lco_session.png?​nolink|}}   * **File** / **New** / **Class** \\ ''​src.server'',​ ''​apps.firstapp.Session''​ \\ {{:​jvx:​lco_session.png?​nolink|}}
Line 579: Line 577:
 </​file>​ </​file>​
  
-^Description+^Beschreibung
-|The class represents a lifecycle object for a sessionIn our case, a session begins with the login to the application and ends with the logoutThere is exactly one instance of this object for each sessionThis allows objects to be used for the full duration of the login. \\ \\ Thanks to the inheritance of ''​apps.firstapp.Application'' ​it is very easy to use even application objects.|+|Die Klasse spiegelt das Lifecycle Objekt für eine Session wiederEine Session beginnt in unserem Fall mit der Anmeldung an die Applikation und endet mit der AbmeldungPro Session existiert genau eine Instanz dieses ObjektesEs 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|Opens a new connection to a HyperSQL databaseif this has not already happened. \\ \\ The Exception Handling ​is taken over by the server.|+|getDBAccess|Öffnet eine neue Verbindung zu einer HSQL Datenbankfalls dies nicht bereits geschehen ist. \\ \\ Das Exception Handling ​wird vom Server übernommen.|
  
   * **File** / **New** / **Class** \\ ''​src.server'',​ ''​apps.firstapp.frames.DBEdit''​ \\ {{:​jvx:​lco_dbedit.png?​nolink|}}   * **File** / **New** / **Class** \\ ''​src.server'',​ ''​apps.firstapp.frames.DBEdit''​ \\ {{:​jvx:​lco_dbedit.png?​nolink|}}
Line 634: Line 632:
 </​file>​ </​file>​
  
-^Description+^Beschreibung
-|The class represents the lifecycle object for the DBEditFrame ​work screenThe objects can only be accessed via the SubConnection ​of the work screen. \\ \\ Thanks to the inheritance of ''​apps.firstapp.Session'' ​it is very easy to access all Session ​and Application ​objects.|+|Die Klasse spiegelt das Lifecycle Objekt für den ''​DBEditFrame''​ WorkScreen wiederAuf die Objekte kann ausschließlich über die SubConnection ​des WorkScreens zugegriffen werden. \\ \\ Durch die Ableitung von ''​apps.firstapp.Session'' ​kann auf einfachste Art und Weise auf sämtliche Objekte der ''​Session''​ und der ''​Application''​ zugegriffen werden.|
  
-^Method^Description+^Methode^Beschreibung
-|getContacts|Enables the access to the database table ''​CONTACTS''​. ​The method name must match the object name of the RemoteDataBook:​ ''​contacts => getContacts''​. \\ \\ The Exception Handling ​is taken over by the Server.|+|getContacts|Ermöglicht den Zugriff auf die Datenbanktabelle ​''​CONTACTS''​. ​Der Methodenname muss dem Objektnamen des ''​RemoteDataBook''​ entsprechen: ''​contacts => getContacts''​. ​ \\ \\ Das Exception Handling ​wird vom Server ​übernommen.|
  
-The application is now fully implemented and ready to runSo as to be able to work with the application,​ we need a database with the ''​CONTACTS'' ​table which we want to accessThe configuration of HyperSQL DB is not described ​in detail in this documentas the examples on the project page are detailed and suffice. In the next chapter, you will find a short summary of the necessary steps.+Die Applikation ist jetzt vollständig implementiert und lauffähigDamit wir nun mit der Applikation arbeiten können benötigen wir die Datenbank inklusive Tabelle ​''​CONTACTS'' ​auf die wir zugreifen wollenDie Konfiguration von HSQLDB wird in diesem Dokument nicht detailiert beschriebenda die Beispiele auf der Projektseite detailiert und ausreichend sind. In nachfolgendem Kapitel finden Sie eine kurze Zusammenfassung der notwendigen Schritte.
  
-== Create database ​==+== Datenbank erstellen ​==
  
-The following steps should take place to create and start a HyperSQL DB.+Folgende Schritte sollten durchgeführt werden um eine HSQLDB zu erstellen und zu starten.
  
-  * Copy the HyperSQL ​JDBC-Driver ​(hsqldb.jar) ​to the directory ​\\ ''​../​JVxFirstApp/​libs/​server/'​ +  * Kopieren Sie den HSQLDB ​JDBC-Teiber ​(hsqldb.jar) ​in das Verzeichnis ​\\ ''​../​JVxFirstApp/​libs/​server/'​ 
-  * Add the JDBC-Driver to the CLASSPATH ​of the JVxFirstApp ​Project +  * Fügen Sie den JDBC-Treiber dem CLASSPATH ​des JVxFirstApp ​Projektes hinzu 
-  * Create a database with the alias firstappdb ​and the following table: \\ <file sql>​create table CONTACTS+  * Erstellen Sie eine Datenbank mit dem Alias ''​firstappdb''​ und folgender Tabelle: \\ <file sql>​create table CONTACTS
 ( (
   ID            INTEGER IDENTITY,   ID            INTEGER IDENTITY,
Line 659: Line 657:
   TOWN          VARCHAR(200)   TOWN          VARCHAR(200)
 )</​file>​ )</​file>​
-  * Start the database, e.g.: \\ <file bash>​java -cp ../​libs/​server/​hsqldb.jar org.hsqldb.Server -database.0 ​+  * SStarten Sie die Datenbank z.B.: \\ <file bash>​java -cp ../​libs/​server/​hsqldb.jar org.hsqldb.Server -database.0 ​
      ​file:​firstappdb -dbname.0 firstappdb</​file>​      ​file:​firstappdb -dbname.0 firstappdb</​file>​
  
-== The first application ​==+== Die erste Applikation ​==
  
-Once the database has been started, the application can also be startedThe final application should look as follows:+Nachdem die Datenbank gestartet wurde kann die Applikation ebenfalls gestartet werdenDie fertige Applikation sollte nun wie folgt aussehen:
  
 {{:​jvx:​app_finished.png?​nolink|}} {{:​jvx:​app_finished.png?​nolink|}}
  
-The Source Code and the Eclipse ​project can be found in the [[https://​www.sibvisions.com/​en/​jvxmdownload|Download]] ​section.+Den Source Code und das Eclipse ​Projekt finden Sie auch im [[https://​www.sibvisions.com/​de/​jvxmdownload|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