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
jvx:firstapp_step-by-step [2018/01/30 12:49]
admin
jvx:firstapp_step-by-step [2020/06/12 17:03] (current)
cduncan
Line 1: Line 1:
-~~Title: First JVx application ​(step-by-step)~~+~~Title: First JVx Application ​(Step by Step)~~
  
 The aim of this tutorial is to create an application with the Enterprise Application Framework – [[https://​jvx.sibvisions.com|JVx]]. Moreover, a quick overview of the framework'​s possibilities will be given. The aim of this tutorial is to create an application with the Enterprise Application Framework – [[https://​jvx.sibvisions.com|JVx]]. Moreover, a quick overview of the framework'​s possibilities will be given.
  
-The application'​s task is to display the data from a database table and make them editable. The application requests ​authentification ​with user name and password.+The application'​s task is to display the data from a database table and make them editable. The application requests ​authentication ​with username ​and password.
  
 The following skills and tools are needed: The following skills and tools are needed:
Line 15: Line 15:
 This documentation covers the following areas: This documentation covers the following areas:
  
-  * [[#​folder_structure|JVx ​folder structure]] +  * [[#​folder_structure|JVx ​Folder Structure]] 
-  * [[#​project_configuration|Eclipse ​project configuration]] +  * [[#​project_configuration|Eclipse ​Project Configuration]] 
-  * [[#​application_development|Application ​development]]+  * [[#​application_development|Application ​Development]]
       * Client       * Client
       * Server       * Server
-  * [[#​create_a_work_screen|Creation of a work screen]] +  * [[#​create_a_work_screen|Creation of a Workscreen]] 
-  * [[#​create_database|Use of a HyperSQL ​database]]+  * [[#​create_database|Use of a HyperSQL ​Database]]
  
-== Folder ​structure ​==+== Folder ​Structure ​==
  
-To develop an application with JVx, a special folder structure is recommended. This simplifies the Build process and separates any dependencies between ​Client ​and Server. This structure is to be created as follows:+To develop an application with JVx, a special folder structure is recommended. This simplifies the build process and separates any dependencies between ​client ​and server. This structure is to be created as follows:
  
 {{:​jvx:​folders.png?​nolink|}} {{:​jvx:​folders.png?​nolink|}}
Line 40: Line 40:
 |firstapp|Contains the application with project configuration,​ sources, libraries.| |firstapp|Contains the application with project configuration,​ sources, libraries.|
 |help|Contains the client for the online help and help pages.| |help|Contains the client for the online help and help pages.|
-|libs|Contains all libraries ​which are necessary both on the client and the server.| +|libs|Contains all libraries ​that are necessary both on the client and the server.| 
-|libs/​client|Contains all libraries ​which are only necessary for the client.| +|libs/​client|Contains all libraries ​that are only necessary for the client.| 
-|libs/​server|Contains all libraries ​which are only necessary for the server.| +|libs/​server|Contains all libraries ​that are only necessary for the server.| 
-|src.client|Contains all the sources ​which are only necessary for the client.| +|src.client|Contains all the sources ​that are only necessary for the client.| 
-|src.server|Contains all the sources ​which are only necessary for the server.|+|src.server|Contains all the sources ​that are only necessary for the server.|
 |test|Contains unit tests for the client and server or the libraries.| |test|Contains unit tests for the client and server or the libraries.|
  
 Once the folder structure has been created, copy the library ''​jvxclient.jar''​ to the folder ''​libs/​client''​ and the library ''​jvx.jar''​ to the folder ''​libs/​server''​. Both libraries are contained in the JVx binary package. Once the folder structure has been created, copy the library ''​jvxclient.jar''​ to the folder ''​libs/​client''​ and the library ''​jvx.jar''​ to the folder ''​libs/​server''​. Both libraries are contained in the JVx binary package.
  
-== Project ​configuration ​==+== Project ​Configuration ​==
  
 Once the configuration steps have been performed, a new project can be created with Eclipse: Once the configuration steps have been performed, a new project can be created with Eclipse:
Line 63: Line 63:
 {{:​jvx:​project_eclipse.png?​nolink|}} {{:​jvx:​project_eclipse.png?​nolink|}}
  
-The ''​src''​ folder can be deleted for consistencyas it is not needed in our application.+The ''​src''​ folder can be deleted for consistency as it is not needed in our application.
  
-== Application ​development ​==+== Application ​Development ​==
  
-On the server side, the application needs a configuration file for the settings that only concern the application. For the configuration of the server, an extra configuration file is needed. First we create the file for the application:​+On the server side, the application needs a configuration file for the settings that only concern the application. For the configuration of the server, an extra configuration file is needed. Firstwe create the file for the application:​
  
   * **File** / **New** / **File** - config.xml \\ (created directly in the application folder **JVxFirstApp**) \\ {{:​jvx:​app_config.png?​nolink|}}   * **File** / **New** / **File** - config.xml \\ (created directly in the application folder **JVxFirstApp**) \\ {{:​jvx:​app_config.png?​nolink|}}
Line 91: Line 91:
  
 ^Parameter^Description^ ^Parameter^Description^
-|securitymanager/​class|The security manager for verification of the user names/password when logging into the application.|+|securitymanager/​class|The security manager for verification of the usernames/password when logging into the application.|
 |securitymanager/​usersfile|The file with the username/​password combinations allowed.| |securitymanager/​usersfile|The file with the username/​password combinations allowed.|
-|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|The class name of the server object ​that is instantiated when the client performs a login or starts a new MasterSession.| 
-|lifecycle/​application|The class name of the server object ​which is instantiated when the application is first accessed. This object is reused every time the application is accessed.|+|lifecycle/​application|The class name of the server object ​that is instantiated when the application is first accessed. This object is reused every time the application is accessed.|
  
 The server configuration file must be stored in the folder ''​../​JVxFirstApp/​rad/​server''​. The server configuration file must be stored in the folder ''​../​JVxFirstApp/​rad/​server''​.
  
-However, the folder does not appear in our Eclipse project because it is at a higher folder level. The configuration file could be created directly in the file system or we can create a folder link in our project:+However, the folder does not appear in our Eclipse project because it is at a higher folder level. The configuration file could be created directly in the file systemor we can create a folder link in our project:
  
   * **File** / **New** / **Folder** \\ {{:​jvx:​server_link.png?​nolink|}}   * **File** / **New** / **Folder** \\ {{:​jvx:​server_link.png?​nolink|}}
Line 114: Line 114:
 </​server>​ </​server>​
 </​file>​ </​file>​
-The server does not need any special parameters for our application. \\ \\ 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:+The server does not need any special parameters for our application. \\ \\ 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 class in the directory ''​src.client''​ with the following source code:
  
 <file java FirstApplication.java>​ <file java FirstApplication.java>​
Line 148: Line 148:
   ​   ​
   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  // Overwritten ​methods+  // Overwritten ​Methods
   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
Line 174: Line 174:
 ^Method^Description^ ^Method^Description^
 |Constructor|The standard constructor cannot be used, as each application is started with a technology-dependent launcher. This launcher is already passed to the application in the constructor.| |Constructor|The standard constructor cannot be used, as each application is started with a technology-dependent launcher. This launcher is already passed to the application in the constructor.|
-|createConnection|The communication protocol is initialised. A ''​DirectServerConnection''​ 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|The communication protocol is initialized. A ''​DirectServerConnection''​ is sufficient for our application because 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.| 
-|getApplicationName|Sets the application name. This name is needed for the communication with the server, as 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|Sets the application name. This name is needed for the communication with the server, as the  latter uses the appropriate application configuration depending on the application name. \\ In our casethe application name must be ''​firstapp'',​ because the work directory is also called ''​../​JVxFirstApp/​rad/​**firstapp**/''​. The application name MUST always match the directory name!|
  
 It is now time for the first start of the application. To do so, we set up a Runtime configuration:​ It is now time for the first start of the application. To do so, we set up a Runtime configuration:​
Line 182: Line 182:
  
 ^Parameter^Description^ ^Parameter^Description^
-|Main class|The technology-dependant ​launcher is defined here. We use the Swing technology for our application and start a Swing application.| +|Main class|The technology-dependent ​launcher is defined here. We use the Swing technology for our application and start a Swing application.| 
-|Program arguments|The launcher must be told which application to start. For our Swing application,​ we can use the mechanism of programme ​arguments and pass the class name of our application.|+|Program arguments|The launcher must be told which application to start. For our Swing application,​ we can use the mechanism of program ​arguments and pass the class name of our application.|
  
 The application can now be started and looks as follows: The application can now be started and looks as follows:
Line 211: Line 211:
 Now the login to the application works perfectly. However, to fulfill our task, we still need the possibility to display or edit a database table. We will now turn to this part of the task. Now the login to the application works perfectly. However, to fulfill our task, we still need the possibility to display or edit a database table. We will now turn to this part of the task.
  
-== Create a work screen==+== Create a Workscreen==
  
-Before we create a WorkScreen, we prepare the application to display the WorkScreen. To do so, we extend our ''​FirstApplication''​ class as follows:+Before we create a workscreen, we prepare the application to display the workscreen. To do so, we extend our ''​FirstApplication''​ class as follows:
  
 <file java FirstApplication.java>​ <file java FirstApplication.java>​
Line 252: Line 252:
   ​   ​
   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  // Overwritten ​methods+  // Overwritten ​Methods
   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
Line 324: Line 324:
  
 ^Method^Description^ ^Method^Description^
-|afterLogin|This method is invoked form the super class after a successful login. We 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|This method is invoked form the super class after a successful login. We 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.| 
-|doOpenDBEdit|This method is called when the Menu or the ToolBar ​button ​are selected.| +|doOpenDBEdit|This method is called when the menu or the toolbar ​button ​is selected.| 
-|createMenuItem|Provided by the super class to create menu entries. The first parameter contains the name of the method ​which is to be called when the menu entry is selected. The second parameter contains the command (ActionCommand) which does not play any role in our case. The text of the menu entry is to be defined in the third parameter and, lastly, the image for the entry is passed.| +|createMenuItem|Provided by the super class to create menu entries. The first parameter contains the name of the method ​that is to be called when the menu entry is selected. The second parameter contains the command (ActionCommand) which does not play any role in our case. The text of the menu entry is to be defined in the third parameterand, lastly, the image for the entry is passed.| 
-|createToolBarButton|Similar to ''​createMenuItem'',​ except ​that here a button is created which adjusts itself to the layout of the ToolBar.|+|createToolBarButton|Similar to ''​createMenuItem'',​ except here a button is created which adjusts itself to the layout of the toolbar.|
 |UIImage.getImage|Provides a predefined image from the image library of JVx. \\ We use a predefined image for convenience.| |UIImage.getImage|Provides a predefined image from the image library of JVx. \\ We use a predefined image for convenience.|
  
-We now create the client class for our work screen:+We now create the client class for our 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:+and use the following ​source code:
  
 <file java DBEditFrame.java>​ <file java DBEditFrame.java>​
Line 358: Line 358:
 { {
   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  // Class members+  // Class Members
   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
Line 440: Line 440:
  
   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  // Overwritten ​methods+  // Overwritten ​Methods
   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
Line 467: Line 467:
  
 ^Method^Description^ ^Method^Description^
-|initializeModel|Instantiates the objects for access to the server or to data.| +|initializeModel|Instantiates the objects for access to the server or data.| 
-|InitializeUI|Layout of the work screen.| +|InitializeUI|Layout of the workscreen.| 
-|dispose|Ends the connection to the server for the WorkScreen ​and closes the Frame. The connection must not be explicitely ​closed, as this takes place fully automatically by the GarbageCollector. This is however not a drawback in our first application.| +|dispose|Ends the connection to the server for the workscreen ​and closes the frame. The connection must not be explicitly ​closed, as this takes place fully automatically by the GarbageCollector. This ishowevernot a drawback in our first application.| 
-|createSubConnection|We create our own connection to the server. This has the advantage that a separate ​Lifecycle ​object is used on the server. This object contains all objects which are needed by the WorkScreen. Once the WorkScreen ​is closed, the used memory is released. Moreover, each connection can have special parameters and timeouts. The requested ​Lifecycle ​object is defined with the class name: ''​apps.firstapp.frames.DBEdit''​. \\ \\ The class we will create later.|+|createSubConnection|We create our own connection to the server. This has the advantage that a separate ​lifecycle ​object is used on the server. This object contains all objects which are needed by the workscreen. Once the workscreen ​is closed, the used memory is released. Moreover, each connection can have special parameters and timeouts. The requested ​lifecycle ​object is defined with the class name: ''​apps.firstapp.frames.DBEdit''​. \\ \\ The class we will create later.|
  
 ^Member^Description^ ^Member^Description^
-|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|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''​.| 
-|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|The ​data source ​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.|
 |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|The model and the controller for data display. \\ The name ''​contacts''​ defines under which name the server-side business object can be found.|
 |table|The view for data display.| |table|The view for data display.|
  
-The WorkScreen ​is now ready and can be integrated in the application. We now implement the missing call:+The workscreen ​is now ready and can be integrated in the application. We now implement the missing call:
  
 <file java FirstApplication.java>​ <file java FirstApplication.java>​
Line 547: Line 547:
 { {
   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  // User-defined methods+  // User-Defined Methods
   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   ​   ​
Line 579: Line 579:
  
 ^Description^ ^Description^
-|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.|+|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.|
  
 ^Method^Description^ ^Method^Description^
-|getDBAccess|Opens a new connection to a HyperSQL databaseif this has not already happened. \\ \\ The Exception Handling ​is taken over by the server.|+|getDBAccess|Opens a new connection to a HyperSQL database if this has not already happened. \\ \\ The exception handling ​is taken over by the server.|
  
   * **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 603: Line 603:
 { {
   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  // User-defined methods+  // User-Defined Methods
   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   //​~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
Line 634: Line 634:
  
 ^Description^ ^Description^
-|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.|+|The class represents the lifecycle object for the ''​DBEditFrame'' ​workscreen. The objects can only be accessed via the SubConnection of the workscreen. \\ \\ Thanks to the inheritance of ''​apps.firstapp.Session''​it is very easy to access all ''​Session''​ and ''​Application''​ objects.|
  
 ^Method^Description^ ^Method^Description^
 |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|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.|
  
-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.+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 that 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 sufficient. In the next chapter, you will find a short summary of the necessary steps.
  
-== Create ​database ​==+== Create ​Database ​==
  
 The following steps should take place to create and start a HyperSQL DB. The following steps should take place to create and start a HyperSQL DB.
Line 661: Line 661:
      ​file:​firstappdb -dbname.0 firstappdb</​file>​      ​file:​firstappdb -dbname.0 firstappdb</​file>​
  
-== The first application ​==+== The First Application ​==
  
 Once the database has been started, the application can also be started. The final application should look as follows: Once the database has been started, the application can also be started. The final application should look as follows:
Line 667: Line 667:
 {{:​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.+The source code and the Eclipse project can be found in the [[https://​www.sibvisions.com/​en/​jvxmdownload|Download]] section.
This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information