Trace:
Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
de:jvx:firstapp_step-by-step [2018/01/30 11:23] admin |
de:jvx:firstapp_step-by-step [2018/01/30 11:50] (current) admin |
||
---|---|---|---|
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 468: | Line 468: | ||
|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ß.| | ||
- | ^Member^Description^ | + | ^Member^Beschreibung^ |
- | |connection|The connection to the server, especially 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 Server, speziell 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 server. The 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 Server. Fü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 application. We now implement the missing call: | + | Der WorkScreen ist nun fertig und kann in die Applikation integriert werden. Wir implementieren nun den fehlenden Aufruf: |
<file java FirstApplication.java> | <file java FirstApplication.java> | ||
Line 504: | 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'' werfen. Sä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 look. This also includes the menu 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.| |
- | The client implementation is now finished. Before we can use the application, we must create the missing server classes. We create the following classes: | + | Die Client Implementierung ist nun abgeschlossen. Bevor wir die Applikation verwenden können müssen die fehlenden Server Klassen erstellt werden. Wir 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 528: | Line 527: | ||
</file> | </file> | ||
- | ^Description^ | + | ^Beschreibung^ |
- | |The class represents the lifecycle object for an application. There 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 wieder. Pro 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 578: | Line 577: | ||
</file> | </file> | ||
- | ^Description^ | + | ^Beschreibung^ |
- | |The class represents a lifecycle object for a session. In our case, a session begins with the login to the application and ends with the logout. There is exactly one instance of this object for each session. This 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 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|Opens a new connection to a HyperSQL database, if this has not already happened. \\ \\ The Exception Handling is taken over by the server.| | + | |getDBAccess|Öffnet eine neue Verbindung zu einer HSQL Datenbank, falls 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 633: | Line 632: | ||
</file> | </file> | ||
- | ^Description^ | + | ^Beschreibung^ |
- | |The class represents the lifecycle object for the DBEditFrame work screen. The 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 wieder. Auf 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 run. So as to be able to work with the application, we need a database with the ''CONTACTS'' table which we want to access. The configuration of HyperSQL DB is not described in detail in this document, as 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ähig. Damit wir nun mit der Applikation arbeiten können benötigen wir die Datenbank inklusive Tabelle ''CONTACTS'' auf die wir zugreifen wollen. Die Konfiguration von HSQLDB wird in diesem Dokument nicht detailiert beschrieben, da 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 658: | 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 started. The final application should look as follows: | + | Nachdem die Datenbank gestartet wurde kann die Applikation ebenfalls gestartet werden. Die 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. |