Client Installation¶
This chapter is out of date and is no longer being maintained. It is only being retained for historical purposes. The replacement chapter can be found in Client Installation.
This chapter documents how to install the runtime code that allows the FWD client to execute. Configuration and execution of the client is documented in the Bootstrap Configuration and Running the Client chapters.
The converted application runs entirely on the FWD Server, and unlike the Progress client, no business logic or data access of ANY kind is executed on the FWD thin Client. The client process is “thin” from the perspective that it does nothing except connect to the server, authenticate and then invoke an entry point (the business logic) on the server side. The server drives all client activities using a set of user interface “primitives“. This allows the client code to be completely generic (not application specific) as well as reasonably thin.
System Requirements¶
Since the client process is thin the hardware resources needed for running it are relatively low. The following hardware requirements needed to support Java runtime usually should suffice:
Feature | Requirement |
---|---|
CPU | Any recent Intel compatible CPU will work. It is recommended to stay with a 32bit x86 processor since it greatly simplifies the installation of the runtime components. FWD has been tested to work on systems which can run 64bit code. The FWD runtime is highly threaded, so a multi-core CPU environment will be of great benefit for this purpose. Both AMD and Intel CPUs have been tested and have been found to work well. If the JVM being used works well on a given CPU, then that CPU is OK. Modern CPUs such as the Intel Core2 Duo have been found to be quite suitable for runtime performance. |
Memory | The client memory footprint is rather low as it needs memory just to process the interface primitives from server. The client only stores the current screen and active frame configuration. As JREs usually no not require more than 128 MB, there is enough room for client application as modern computers came with gigabyte-size memory. |
Disk space | The most disk space is taken by the JRE environment - about 100 MB, while the client application's jars only take about 5 MB, a fraction of that. If file logging is enabled then space must be reserved. Depending on the complexity of the logs generated, few tens of megabytes should be plenty. However, if the FWD application save streams locally enough space should be reserved on the disk. |
Network | The communication between client and the server is very interactive so a low-latency network should be preferred. |
Operating System
From the software point of view, you can install the client on any operating systems as long as there is a JVM implementation for it. *[CA]*However, you will be limited by the FWD's support of the native code for this operating syste. At the time of this writing, the native code on Linux/UNIX is fully supported (although dependent on NCURSES) and a port for the Windows operating system exists too (although not fully tested at this time). In both cases, this platform specific code is implemented using the Java Native Interface (JNI) and is often referred to as “native” code. This code is currently compiled as both 32bit and 64bit shared libraries for either Linux or Windows. The application has been successfully run on a variety of recent Linux distributions from Ubuntu, SuSE, Red Hat and CentOS. There are no specific dependencies on any particular distribution. It is expected that any UNIX compatible system would work properly. Testing for Windows operating system is not finished yet.[/CA]
Choosing to run the client with Swing display driver will allow to run the application on any Linux distribution and other operating systems like Windows and MacOS with a graphical system on which a Java distribution exists, [CA]keeping in mind the limitations needed for the native code to build.[/CA]
Java Virtual Machine
[CA] TODO: java 7
The Sun JRE 1.6 on Linux is a well tested option. Various versions from 1.6.0_04b12 through 1.6.0_16b01 have been tested and have been found to work well. Either the 32bit or 64bit version may be used. Even if at the time of the writing of this document Oracle's JVM 7 is rather mature it did not passed yet out tests, so we recommend to stick to Java 6.
Choosing the Appropriate JVM¶
At this moment there is a clear trend towards 64 bit architecture. The new x64 hardware is able to support very large amounts of memory and thanks to larger and increased number of 64bit registers the application's performance is improved. It's up to the already installed OS if the applications will benefit of these enhancements.
If of your operating system is a 64 bit built you may use the 32 bit or the 64 bit one. We recommend using for the client-side application the 32-bit JVM for the following reasons:
- the thin client does not need large amount of memory to run, as mentioned in previous paragraph, the needed memory is rather low.
- the client does not process any data except for the displaying primitives received from server. The improved performance of a x64 built JVM is insignificant.
- the memory footprint is usually greater on 64 bit as the pointers are twice as long as the 32 bit ones. Java uses pointers intensively as all references to objects (except for the scalars) are in fact pointers. This leads to the fact that the 64 bit version takes between 40% - 50% more memory on average than either 32-bit JVM.
- Running the client with native display driver need additional JNI and
libp2j
@.so@ libraries that must be re-compiled for the 64 bit version.
Choosing the CHUI Implementation¶
[CA]The native-based driver operates on both Linux and Windows systems.[/CA] Also, the swing-based driver should be usable on any system where the JVM supports swing applications (any graphical system such as Linux with X11, Windows or MAC OS) [CA], with the constraint that the FWD's native dependencies are ported for that OS.[/CA]
Console Driver¶
The console driver (based on NCURSES in Linux/UNIX) was the first implemented and it is fully compliant with original Progress 4GL user interface. However, choosing this driver you will need additional effort when installing the client as some patches (NCURSES and TERMINFO) have to be done and additional libraries installed, including native code (libp2j.so
) accessed by Java code using JNI. The main advantage of this ChUI driver is that it is the only solution for customers that still use hardware terminals AND there are still other good reasons to be able to run the console client (e.g. the certification harness will only work with the NCURSES client).
[CA]On Windows, the console driver and FWD runtime was built to emulate the 4GL functionalities specific to this OS.[/CA]
Swing ChUI Driver¶
The Swing driver is an alternative to using the [CA]console[/CA]-based client [CA](based on NCURSES on Linux)[/CA]. This is the first example of a non-[CA]native[/CA] client "driver". It is fully functional with only minor limitations. [CA]remove this paragraph: The main advantage of this ChUI driver is that the client application does not need to load native libraries (libp2j.so
) and no NCURSES patches and TERMINFO patches are needed for a basic environment, so it can be run on virtually any platform for which a Java Swing implementation exists.[/CA] [CA] The main advantage of this ChUI driver is that the client application can be ran on any platform for which a Java Swing implementation exists and which is supported by the FWD's native dependencies.[/CA]
Because of the nature of the java language it may be seen in action in two 'flavors': as an application (as started by our own ClientDriver.java
) or as an applet (embedded in a web-page or running in Java's appletviewer
). Please note that there are more serious limitations when running as an applet, due to the inherent limitations of the applet security environment. As applets are prohibited to access the file system, launch child processes or otherwise try to access things that trip security limits, it cannot be used for most applications.
[CA]Web Client Driver[/CA]¶
This driver allows FWD clients to be launched and accessed in a browser. The browser establishes a Web socket connection to an embedded web server running within the FWD Client, and the user will have the same experience as if the client was accessed on a physical machine. This requires that the user has an account on the remote system on which the FWD Client is launched, as the user remotely operates a real FWD client with the proper OS security context on that machine. At the time of this writing, clients can be launched only on the same machine as the one on which the FWD Server is running, but in the future is expected to allow the clients to be started on different machines.
[CA]Batch Client Driver[/CA]¶
The batch driver is a special driver used to run batch processes or Application Server Agents. In this modes, UI features are limited/restricted (depending on the type of client being started - appserver Agent or batch process). FWD will be aware of any redirection of the standard input/output streams (at OS process level) and act accordingly. As 4GL acts differently when the OS process associated with the 4GL batch program is ran background, FWD allows configuring such clients explicitly, to allow full compatibility with the legacy system.
TODO: is batch client driver dependent on NCURSES?
Installation Process¶
We will assume that the operation system is already installed and up-to-date. Also assume that the root of the client installation is given by $P2J_CLIENT
environment variable. To install the client the following steps should be followed:
1. Install the Java Virtual Machine. Please check previous paragraphs for details on what JVM to download and install.
Make sure the bin directory of the JVM installation is added to PATH variable of the operating system so the application could be executed by using “java
” command in a terminal window.
It is also recommended to set the user's CLASSPATH
to current folder (“.”). On Unix/Linux use:
export CLASSPATH=.
2. Patch NCURSES. This step is only needed if you choose to run the client with native driver, for swing chui driver [CA]or if installing FWD on Windows[/CA] skip to step 4.
[CA]TODO: on Linux, is it possible to build the native task if NCURSES is not patched???[/CA]
All common Linux distributions have support for and include NCURSES by default but FWD need a customized version of NCURSES v5.5 or higher to be installed and patched. If the currently installed NCURSES version is 5.5 or 5.6 copy
ncurses_curses_h_in_20060828.patch
andncurses_lib_getch_c_20060828.patch
files to a temporary location $P2J_CLIENT/tmp
. For version 5.7 use
ncurses_curses_h_in_20060828.patch
andncurses_lib_getch_c_v5.7_20090512.patch
.
Follow the next 4 steps to patch NCURSES package (This example will use the version numbers and patch file names for v5.7, adjust filenames for your installed version):
Step 1: Obtain the source code
cd $P2J_CLIENT/tmp apt-get source ncurses
Step 2: Patch the source
cd ncurses-5.7 patch ncurses/base/lib_getch.c $P2J_CLIENT/tmp/ncurses_lib_getch_c_v5.7_20090512.patch patch include/curses.h.in $P2J_CLIENT/tmp/ncurses_curses_h_in_20060828.patch
Step 3: Build
./configure --with-shared make
Step 4: Install
su root make install cd /lib/i386-linux-gnu/ cp libncurses.so.5.7 libncurses.so.5.7.ori cp /usr/lib/libncurses.so.5.7 . rm libncurses.so.5 ln -s libncurses.so.5.7 libncurses.so.5
3. Patch TERMINFO. This step is only needed if you choose to run the client with the native driver, for swing chui driver [CA]or if installing FWD on Windows[/CA] skip to step 4.
TERMINFO definitions for vt320, vt220 and xterm need to be fixed. Follow the next 3 steps to update the definitions (the example only shows vt320 case):
Step 1: Decompile the TERMINFO Entry into a temporary file:
infocmp vt320 > vt320.tmp
Step 2: Edit and Fix the Definitions. Edit the vt320.tmp
file. Notice the TERMINFO location mentioned in the first line. It is typically: /usr/share/terminfo/v/vt320
. Apply the specific changes documented in the table below.
Definition | xterm | vt220 | vt320 |
---|---|---|---|
TAB | n/a | n/a | ensure that ht=^I, exists and that knxt=^I, is deleted |
HOME | n/a | n/a | add or modify the khome= to be khome=\EOH. |
END | n/a | add or modify the kend= to be kend=\E[F | add or modify the kend= to be kend=\EOF |
BACKSPACE | add or modify kbs= to be kbs=\177 | n/a | n/a |
cursor visibility | n/a | add or modify the civis= to be civis=\E[?25l add or modify the cnorm= to be cnorm=\E[?25h |
n/a |
Save the file.
Step 3: Recompile the TERMINFO Entry using the following command:
sudo tic -o/usr/share/terminfo vt320.tmp
4. Copy the client application binary files. The following files from the FWD production build:
p2j/build/lib/libp2j.so
[CA]on Linux/UNIX orp2j/build/lib/p2j.dll
on Windows[/CA]p2j/build/lib/p2j.jar
must all be copied to the same target directory $P2J_CLIENT/bin
. They are the native library (includes the ChUI terminal code [CA]and some other custom code needed by i.e. running native APIs[/CA]) and the archive that contains the FWD Java code. Both are built when FWD is built. If needed, the libraries must be recompiled in 32-bit or 64-bit to match the “bitness” of the JVM choice
5. Copy security related files. For any interactive or batch client that is using secure sockets, copy the following client configuration and security files into a directory on the client system:
- client bootstrap configuration file(s)
- client key store(s)
- server trust store
6. Set up client configuration files. The client can be customized with one or two bootstrap configuration files. Edit the xml files to reflect the needed security items and network informations needed to connect to FWD server. If needed, adjust the display preferences for the ChUI you have chosen. Check the “Bootstrap Configuration” chapter for details.
7. Ensure there are the proper user accounts on the client system under which context the FWD client will run. In addition, if there are batch processes, they will need to be started in the context of some appropriate user account, since they run [CA]as a full, non-interactive,[/CA] FWD client process. Normally each application user, dedicated program or batch process would run under their own operating system level user account, although that is not absolutely required. The following permissions are needed:
- it must be able to launch a java process with the necessary amount of RAM to provide for the maximum heap size plus some amount of overhead in the JVM itself
- it must be able to read all of the jar files copied from the FWD build
- it must have read access in the directory in which the bootstrap configuration file is stored
- it must have access to create, delete and write its log files to the log file destination (often in the current/working directory but also can be a shared directory)
- it must be able to establish an outbound TCP socket connection (with subsequent 2-way communication) to the FWD Application Server host and port
8. [CA]If using web clients or if the FWD Server is configured to launch batch processes or appserver Agents, then you need to setup a special FWD tool called the spawner. This tool will allow the FWD Server to automatically launch FWD Clients on behalf of a certain user, as the clients need to run using that user's credentials and OS security context. See the _Spawner Setup and Configuration _chapter of this book for details about how to setup and configure the spawner.[/CA]
9. Firewall setup. Any firewall support must be configured to allow an outbound TCP socket connection (with subsequent 2-way communication) to the FWD Application Server host and port.
10. Update CLASSPATH. Add the p2j.jar
(full or relative path) to the CLASSPATH
environment variable or java
command line parameter -classpath
(specified as a JVM parameter which means it is positioned before the com.goldencode.p2j.main.ClientDriver
argument).
11. Set any application-specific environment values. These are values that are required for the operation of the converted application code and which are only known to the application (they have no relevance to FWD). A common example is to set the path to executables that are run as child processes from the converted application. Often these values must be setup in user-specific scripts or profiles.
12. Install any application-specific configuration files. These are files that are required for the operation of the converted application code and which are only known to the application (they have no relevance to FWD). Make sure to assign the necessary permissions/ownership using the operating system security facilities.
13. Install any application-specific program files or libraries. These are files that are required for the operation of the converted application code and which are only known to the application (they have no relevance to FWD). Make sure to assign the necessary permissions/ownership using the operating system security facilities. A common example is to install executables that are run as child processes from the converted application.
14. Setup environment variables used by application. Determine all environment variables that are read directly from the converted application code. Encode these values as JVM properties in the client command line. For example, if the application uses the HOME
environment variable, then the client command line should be passed to the client JVM as a defined property using a -DHOME=value
syntax and the construct should appear before the com.goldencode.p2j.main.ClientDriver class name (otherwise it will be considered a parameter to ClientDriver
instead of a parameter to the JVM).
15. Create all necessary directories needed by the converted application. Make sure to assign the necessary permissions/ownership using the operating system security facilities. See the 'File System Structure' for a recommended directory structure.
Optionally, if FWD_LOG_DIR
environment variable is defined, create the folder that matches its value where all client logs will be located. This is the only place where application need write access.
16. Setup printer. All printing in FWD comes from the FWD clients, not the FWD servers. This is due to the client-centered design of the Progress 4GL. In an interactive Progress application (not on an "appserver" or in Webspeed), printing is done using specific Windows APIs (in GUI applications) or in UNIX or Linux by using child process support. In either case, the processing runs on the client side. In FWD, the system on which the FWD client runs must appropriate printers defined/configured and operations in the operating system. Queues and connectivity for all the printers must be setup and the printers must be turned on, attached to the system/network and ready to accept jobs.
File System Structure¶
The client application need just a few files to run. As a consequence a file system structure is not usually needed, all application files can reside into the root of the installation.
However, for a good organization, here is an example of files and their location in a client installation.
File structure | Details |
|
---|---|---|
$P2J_CLIENT |
The root of installation |
|
client.sh |
Shell script that automates the startup of the client |
|
$P2J_CLIENT/bin |
Subdirectory that contains binary files needed to run the client |
|
libp2j.so - on Linux/UNIXp2j.dll - on Windows |
Native startup library |
|
p2j.jar |
Runtime of FWD client application |
|
$P2J_CLIENT/cfg |
Configuration subdirectory |
|
client_shared.xml |
Shared bootstrap configuration file (when used in split configuration mode). |
|
client_custom.xml |
Custom bootstrap configuration file (when used in split configuration mode). |
|
$P2J_CLIENT/log |
This subdirectory will hold logs from client The name must fit the value of $P2J_LOG_DIR . |
|
client_joe_1894.log |
Sample log file. The name will be client_<userid>_<pid>.log where the <userid> is found via the program whoami and the pid is the process ID of the shell process. |
|
$P2J_CLIENT/security |
Any security files needed by server security will be kept here. For FWD clients that connect to a to FWD server that validate SSL connections, they must have a trust-store file that contains the certificates for the root CA. |
|
keystore.store |
A keystore file containing [CA] client's private-keys.[/CA] |
|
truststore.store |
A truststore file. |
|
$P2J_CLIENT/tmp |
Temporary files location. |
|
ncurses_curses_h_in_20060828.patch |
Diff file needed to patch the NCURSES package. (May be removed after install) |
|
ncurses_lib_getch_c_v5.7_20090512.patch |
||
[CA]$P2J_CLIENT/spawner |
The FWD spawn tool. Full details about its setup and configuration are found in the Spawner Setup and Configuration chapter of this book. |
|
p2j.jar |
The FWD jar file. On Linux/UNIX, the permissions need to be set to 0550 . |
|
spawn - on Linux/UNIXspawner.exe - on Windows |
The spawn tool. On Linux/UNIX, the permissions need to be set to 4755 . |
|
srv-certs.store |
The server trust-store. On Linux/UNIX, the permissions need to be set to 0550 . |
|
spawn.ini |
Spawner configuration file (only on Windows).[/CA] |
© 2004-2017 Golden Code Development Corporation. ALL RIGHTS RESERVED.