Software Dependencies for FWD v3 0 0¶
This chapter documents the exact list of third party software upon which FWD v3.0.0 depends. These dependencies include subsystems (e.g. the Java Development Kit), compilers (e.g. gcc
), middleware (e.g. RDBMS), utilities, jar files and shared libraries (e.g. .so
files on UNIX/Linux, DLL
files on Windows). All of these are required for FWD
to operate in one way or another, but the full list is not required for all use cases.
To see the details for more recent versions of FWD, see Software Dependencies.
Operating System¶
Java processes are normally platform neutral. Most of the FWD Java code is written in pure Java, it is possible for such processing to be run on any operating system or hardware platform that supports the a compatible Java 8 environment for all system components. Some of the system components of FWD do rely upon native code:
Component | Native Code Dependency |
---|---|
FWD Application Server | No |
FWD Build Environment | Yes |
FWD Client (and FWD Spawner) | Yes |
FWD Web Client | No |
H2 Database | No |
PostgreSQL Database | Yes |
SQLServer Database | Yes |
If the specified component does not have any native code dependency, then it can be run on any operating system with the right level of compatible Java (JDK 8).
For the components that have native code dependencies, it is important that those dependencies are satisfied. Please see System Requirements for details on the operating systems that are already supported.
The sections below will provide details of the native dependencies for those components which have them.
To be more specific, FWD 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.
FWD is also fully supported on Windows, having been successfully run on a range of versions from Windows Server 2008 R2, Windows 7 and later versions.
A specific list of supported operating systems and hardware platforms can be seen in Supported Platforms.
List of Dependencies¶
The following tables list all the dependencies used by FWD during the conversion process and during runtime. Please note that all the listed jar files are automatically fetched during build.
If for whatever reason you cannot fetch the dependencies folowing the standard build process you can download them individually (see Obtaining the 3rd Party Code). The dependency files must be then placed in <fwd_home>/local-repo/
directory following the Maven repository file layout.
Build Environment¶
Majority of FWD is built using the Java technology, while smaller portions of FWD is running native code targeting either Linux operating systems or Windows. The following list of software dependencies is required to build FWD.
The build process is automated using the open source Gradle 3.x and Apache Ant projects. Gradle is written to dynamically download the jars upon which the FWD build process depends. The following is the list of minimum dependencies needed to build:
Name | Minimum Version | Target | Description |
---|---|---|---|
Java Development Kit | 1.8 | Java | A development environment for building applications and components using the Java programming language. |
Ant | 1.9 | Java | Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files as targets and extension points dependent upon each other.* |
Gradle | 3.0 | Java | Gradle is an open source build automation system. Note that the required version of Gradle is already provided in the FWD code repository in the form of Gradle Wrapper. See https://docs.gradle.org/current/userguide/gradle_wrapper.html for more information about Graddle Wrapper. |
gcc | 5.4 | Linux | GNU C Compiler. |
binutils | 2.26 | Linux | GNU assembler, linker and binary utilities. |
mingw | 3.x | Windows | MinGW provides a complete Open Source programming tool set which is suitable for the development of native MS-Windows applications.* |
libffi-dev | 3.2.1 | Linux | The libffi library provides a portable, high level programming interface to various calling conventions.* This dependency is needed only on Linux. In the official Ubuntu repositories can be found as libffi-dev . |
libjvm | 1.8 | Linux, Windows | Java Native Interface (JNI) is a programming framework that enables Java code running in a Java Virtual Machine (JVM) to call and be called by native applications (programs specific to a hardware and operating system platform) and libraries written in other languages such as C, C++ and assembly.* |
libncurses-dev | ncurses library 5.7 (last available 5.9) | Linux | A terminal-independent method for providing a character user interface. Required only on Linux/UNIX. This dependency is needed only on Linux. In the official Ubuntu repositories can be found as libncurses5-dev . |
Due to the ANTLR dependencies, version 1.5.3 does not work. Please ensure that Ant can be found via the user's PATH
.
Conversion¶
File | Project and Version | Modified | Description |
---|---|---|---|
Java Development Kit | OpenJDK 1.8 or the equivalent | No | A development environment for building applications and components using the Java programming language. The Oracle JDK 1.8 and OpenJDK 1.8 are well tested options. Versions of Oracle JDK 1.8.0_101 and OpenJDK 1.8.0_111 have been tested and have been found to work well. Either the 32-bit or 64-bit version may be used. For conversion, even projects as large as 15MM lines of code have been able to successfully convert within 4GB of memory. For this reason, there is no strong requirement for the 64-bit JVM. |
antlr-2.7.7.jar |
ANTLR 2.7.7 | No | A Language Recognition tool that provides a framework for constructing recognizers, interpreters, compilers, and translators from grammatical descriptions containing actions in a variety of target languages. ANTLR provides excellent support for tree construction, tree walking, translation, error recovery, and error reporting. |
fwd-h2-1.4.192.jar |
H2 Embedded Database 1.4.192 | Yes | H2 database is used in embedded mode for temporary table support and for internal runtime housekeeping. It can also be used with a file-based permanent database. This is useful for development and testing purposes. A customized version of H2 is included in the FWD project. For information on patching and building H2 library read Patching and Building Customized 3rd Party Libraries. |
fwd-hibernate-core-4.1.8.jar |
Hibernate 4.1.8 | Yes | Patched version of the core library of the the high-performance Object/Relational persistence and query service. Hibernate is used to provide object to relational database mapping, database caching and other data persistence support. This customized version of Hibernate is included in the FWD project. For information on patching and building Hibernate library read Patching and Building Customized 3rd Party Libraries. |
hibernate-commons-annotations-4.0.1.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar jboss-logging-3.1.0.GA.jar jta-1.1.jar |
Hibernate 4.1.8 | No | A high-performance Object/Relational persistence and query service. It takes care of the mapping from Java classes to database tables and from Java data types to SQL data types. It provides data query and retrieval facilities that significantly reduce development time. |
akiban-persistit-3.3.0.jar blueprints-core-2.4.0.jar colt-1.2.0.jar commons-beanutils-core-1.7.0.jar commons-codec-1.7.jar commons-collections-3.2.2.jar commons-configuration-1.6.jar commons-lang-2.5.jar commons-logging-1.1.1.jar guava-14.0.1.jar high-scale-lib-1.1.2.jar hppc-0.4.2.jar kryo-2.21-shaded.jar metrics-core-3.0.0-BETA3.jar spatial4j-0.3.jar titan-core-0.4.2.jar titan-lucene-0.4.2.jar |
TitanDB support | No | Titan is a highly scalable graph database optimized for storing and querying large graphs with billions of vertices and edges distributed across a multi-machine cluster. Titan is a transactional database that can support thousands of concurrent users, complex traversals, and analytic graph queries.* |
titan-persistit-0.4.2.jar lucene-analyzers-common-4.4.0.jar lucene-core-4.4.0.jar lucene-queries-4.4.0.jar lucene-queryparser-4.4.0.jar lucene-spatial-4.4.0.jar slf4j-api-1.7.5.jar |
TitanDB - Lucene Index support | No | Lucene Index support for TitanDB. |
dom4j-1.6.jar xml-apis-1.3.04.jar |
XML Processing Libraries | No | A collection of libraries responsible for XML processing. |
Application Server¶
Dependency | Project and Version | Modified | Purpose | Description |
---|---|---|---|---|
Java Development Kit | OpenJDK 1.8 or the equivalent | No | Java Runtime | A development environment for building and executing applications and components using the Java programming language. The core requirement for the JVM is that it must be compatible with Java 8.
The specific versions of Oracle JDK 1.8.0_101 and OpenJDK 1.8.0_111 have both been tested and have been found to work well. Generally, it is safe to use any later version of the Java 1.8 platform. The application server dynamically generates some converted ABL code (at runtime), which means that there are parts of the runtime system that may depend upon tools in the JDK. For this reason, the JDK is required and a JRE (runtime only, no development kit) cannot be used. |
antlr-2.7.7.jar |
ANTLR 2.7.7 | No | Dynamic Query Conversion | A Language Recognition tool that provides a framework for constructing recognizers, interpreters, compilers, and translators from grammatical descriptions containing actions in a variety of target languages. ANTLR provides excellent support for tree construction, tree walking, translation, error recovery, and error reporting. |
axiom-api-1.2.13.jar axiom-impl-1.2.13.jar axis2-adb-1.6.2.jar axis2-kernel-1.6.2.jar axis2-transport-http-1.6.2.jar axis2-transport-local-1.6.2.jar httpcore-4.0.jar mail-1.4.jar neethi-3.0.2.jar wsdl4j-1.6.2.jar XmlSchema-1.4.7.jar |
AXIS2 support | No | Communication | Apache Axis2™ is a Web Services / SOAP / WSDL engine. |
commons-httpclient-3.1.jar commons-codec-1.7.jar |
Jakarta Commons HttpClient 3.1 | No | Communication | Provides an efficient, up-to-date, and feature-rich package implementing the client side of the most recent HTTP standards and recommendations. |
postgresql-9.4-1211.jar |
PostgreSQL 9.4 | No | Database driver | PostgreSQL jdbc drivers. |
fwd-h2-1.4.192.jar |
H2 Embedded Database 1.4.192 | Yes | Database engine and driver | H2 database is used in embedded mode for temporary table support and for internal runtime housekeeping. It can also be used as a file-based permanent database. This is very useful for development and testing purposes. A customized version of H2 is included in the FWD project. For information on patching and building H2 library read Patching and Building Customized 3rd Party Libraries. The patches and original source distribution can be found in External Project Patches. |
hibernate-c3p0-4.1.8.Final.jar hibernate-commons-annotations-4.0.1.Final.jar hibernate-ehcache-4.1.8.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar jboss-logging-3.1.0.GA.jar jta-1.1.jar |
Hibernate 4.1.8 | No | Database O/R mapping | A high-performance Object/Relational persistence and query service. It takes care of the mapping from Java classes to database tables and from Java data types to SQL data types. It provides data query and retrieval facilities that significantly reduce development time. |
javassist-3.15.0-GA.jar |
Javassist 3.15.0 | No | Database O/R mapping | A class library for editing bytecodes in Java. |
jboss-transaction-api_1.1_spec-1.0.0.Final.jar |
JBoss Transaction API 1.1 | No | Database O/R mapping | Provides custom Java interfaces used by the transaction manager and the parties involved in a distributed transaction system. |
fwd-hibernate-core-4.1.8.jar |
Hibernate 4.1.8 | Yes | Database O/R mapping | Patched version of the core library of the the high-performance Object/Relational persistence and query service. Hibernate is used to provide object to relational database mapping, database caching and other data persistence support. A customized version of Hibernate is included in the FWD project. For information on patching and building Hibernate library read Patching and Building Customized 3rd Party Libraries. The patches and original source distribution can be found in External Project Patches. |
c3p0-0.9.5.2.jar mchange-commons-java-0.2.11.jar |
C3p0 0.9.5.2 | No | Database support | An easy-to-use library for augmenting traditional (DriverManager-based) JDBC drivers with JNDI-bindable DataSources, including DataSources that implement Connection and Statement Pooling, as described by the jdbc3 spec and jdbc2 std extension. |
cglib-2.1_3.jar |
Code Generation Library 2.1 | No | Database support | A Code Generation Library, It is used to extend JAVA classes and implements interfaces at runtime. |
ehcache-core-2.6.2.jar |
Ehcache 2.6.2 | No | Database support | An open source, standards-based cache used to boost performance, offload the database and simplify scalability. It can scale from in-process with one or more nodes through to a mixed in-process/out-of-process configuration with terabyte-sized caches. |
commons-logging-1.1.1.jar |
Jakarta Commons Logging 1.1.1 | No | Logging | A library that uses the commons-logging API can be used with any logging implementation at runtime. |
slf4j-api-1.7.5.jar slf4j-jdk14-1.6.1.jar |
Simple Logging Facade for Java 1.6.1 | No | Logging | The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks. |
asm-5.0.3.jar |
Asm 5.0.3 | No | Programming Support | An all purpose Java bytecode manipulation and analysis framework. It can be used to modify existing classes or dynamically generate classes, directly in binary form. Provided common transformations and analysis algorithms allow to easily assemble custom complex transformations and code analysis tools. |
aspectjrt-1.8.10.jar |
AspectJ 1.8.10 | No | Programming Support | A seamless aspect-oriented extension to the Javatm programming language[1]. |
bcel-5.2.jar |
Apache Commons BCEL™ | No | Programming Support | Gives users a convenient way to analyze, create, and manipulate (binary) Java class files (those ending with .class). Classes are represented by objects which contain all the symbolic information of the given class: methods, fields and byte code instructions, in particular. This dependency is used by FWD server and FWD client. |
quartz-2.2.1.jar |
Quartz 2.2.1 | No | Scheduling | A job scheduling library that can be integrated within any Java application. FWD uses only the cron expression parser provided by this library. |
bcpkix-jdk15on-150.jar |
BouncyCastle 1.5.0 | No | Security | A lightweight cryptography API with implementations for KIX, CMS, EAC, PKCS, OCSP, TSP, OPENSSL. |
bcprov-jdk15on-150.jar |
BouncyCastle 1.5.0 | No | Security | A provider for the Java Cryptography Extension and the Java Cryptography Architecture. |
dom4j-1.6.jar xml-apis-1.3.04.jar |
XML Processing Libraries | No | XML Processing | A collection of libraries responsible for XML processing. |
jetty-all-9.3.8.v20160314-uber.jar javax.servlet-api-3.1.0.jar |
Jetty 9.3.8 | No | Web UI and JavaScript bindings | Provides HTTP server, HTTP client, and javax.servlet container |
msv-core-2010.2.jar stax2-api-3.1.1.jar stax-utils-20070216.jar xsdlib-2010.1.jar relaxngDatatype-20020414.jar woodstox-core-asl-4.2.0.jar |
SAX support | No | XML services | High performance event driven XML parser and schema validator. |
Database Server¶
File | Project and Version | Modified | Description |
---|---|---|---|
Java Development Kit | OpenJDK 1.8 or the equivalent | No | A development environment for building applications and components using the Java programming language. The Oracle JDK 1.8 and OpenJDK 1.8 are well tested options. Versions of Oracle JDK 1.8.0_101 and OpenJDK 1.8.0_111 have been tested and have been found to work well. Either the 32-bit or 64-bit version may be used. However, this is needed only for executing very small sub-expression fragments (calls to a single built-in function) which has very minimal memory requirements. For this reason, there is no strong requirement for the 64-bit JVM. Using a 32-bit JVM for this purpose will be faster and will use less memory. Use a 32-bit JVM if possible. It is also highly recommended to limit the maximum heap size to 8MB. There is no reason to make it larger. |
libjvm |
Java Native Interface (JNI) 1.8 | No | Java Native Interface (JNI) is a programming framework that enables Java code running in a Java Virtual Machine (JVM) to call and be called by native applications (programs specific to a hardware and operating system platform) and libraries written in other languages such as C, C++ and assembly.* Used by PL/Java to launch JVMs. |
pljava.jar pljava.so pljava.dll |
PL/Java 1.5 | No | PL/Java is an add on module to the PostgreSQL backend. PL/Java is used to provide user defined functions written in Java for use with the PostgreSQL database. It falls into the same category as PL/SQL, PL/TCL, PL/Perl, and PL/Python. When installed, functions and triggers can be written in Java using your favorite Java IDE and installed into the database. For information on building PL/Java library read Patching and Building Customized 3rd Party Libraries. |
p2jspi.jar |
FWD Collation Services | Yes | FWD uses a custom implementation of java.text.spi.CollatorProvider to enable H2 to sort text data the same way Progress would. |
Client¶
The FWD Client provides support for all of the interactive user-interface scenarios (ChUI and GUI) which might be expected. Due to the inherently fat-client design of the ABL, the FWD Client is also needed for a variety of use cases that might otherwise be surprising. This includes Appserver agents, batch mode clients and WebSpeed (when it is supported).
Some of these client configurations are started automatically by the FWD Application Server, using a native executable called the FWD Spawner or usually just referred to as the "spawner". The spawner always runs on the same system as the FWD Client, which may or may not be the same system as the FWD Application Server. The requirements below include those needed for a client system that includes the spawner.
When running the FWD Web Client there is the FWD Client which is executed and then all of the user interaction is actually handled by the browser, which can be on a separate physical system. See Browser Support for details.
File | Project and Version | Modified | Purpose | Description |
---|---|---|---|---|
Java Runtime Environment | OpenJDK 1.8 or the equivalent | No | Java Runtime | A runtime environment for executing applications and components using the Java programming language. The core requirement for the JVM is that it must be compatible with Java 8.
The specific versions of Oracle JDK 1.8.0_101 and OpenJDK 1.8.0_111 have both been tested and have been found to work well. Generally, it is safe to use any later version of the Java 1.8 platform. The client does not generate Java code at runtime, which means that it is possible to use a JRE (runtime only, no development kit) instead of a JDK.If your ABL application is using calls to native libraries, then the bitness of the installed JVM must match the bitness of these native libraries. You will not be able to execute calls into a 32-bit compiled native library from a 64-bit JVM or 64-bit native code from a 32-bit JVM. If the legacy application is not dependent on native library calls, and if your operating system is 64-bit architecture, you may use either the 32-bit or the 64-bit JVM. On a 32-bit platform, only a 32-bit JVM is possible. The application server process (JVM) is where the majority of working memory exists for each client (accessing the system). The actual memory used will depend on the queries, the block flow, recursion and other features of the original ABL. The converted application code is actually running in the common server process, which is different from how Progress ABL works. By default, we recommend using the 32-bit JVM on the client for the following reasons:
Using the 32-bit version will greatly reduce the memory footprint and overhead of each JVM instance. On client systems where there will be large numbers of JVM instances (often at least one per user), this can accumulate into a significant savings. |
axiom-api-1.2.13.jar axiom-impl-1.2.13.jar axis2-adb-1.6.2.jar axis2-kernel-1.6.2.jar axis2-transport-http-1.6.2.jar axis2-transport-local-1.6.2.jar httpcore-4.0.jar mail-1.4.jar neethi-3.0.2.jar wsdl4j-1.6.2.jar XmlSchema-1.4.7.jar |
AXIS2 support | No | Communication | Apache Axis2™ is a Web Services / SOAP / WSDL engine. |
commons-httpclient-3.1.jar commons-codec-1.7.jar |
Jakarta Commons HttpClient 3.1 | No | Communication | Provides an efficient, up-to-date, and feature-rich package implementing the client side of the most recent HTTP standards and recommendations. |
commons-logging-1.1.1.jar |
Jakarta Commons Logging 1.1.1 | No | Logging | A library that uses the commons-logging API can be used with any logging implementation at runtime. |
slf4j-api-1.7.5.jar slf4j-jdk14-1.6.1.jar |
Simple Logging Facade for Java 1.6.1 | No | Logging | The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks. |
libffi.so libffi-6.dll |
Portable Foreign Function Interface Library 3.2.1 | No | Native code invocation | The libffi library provides a portable, high level programming interface to various calling conventions.* |
aspectjrt-1.8.10.jar |
AspectJ 1.8.10 | No | Programming Support | A seamless aspect-oriented extension to the Javatm programming language[1]. |
guava-14.0.1.jar |
Guava 14.0.1 | No | Programming Support | Guava is a set of core libraries that includes new collection types (such as multimap and multiset), immutable collections, a graph library, functional types, an in-memory cache, and APIs/utilities for concurrency, I/O, hashing, primitives, reflection, string processing, and much more!*. |
commons-lang-2.5.jar |
Apache Commons Lang 2.5 | No | Programming Support | Provides a host of helper utilities for the java.lang API, notably String manipulation methods, basic numerical methods, object reflection, concurrency, creation and serialization and System properties. |
libjvm |
Java Native Interface (JNI) | No | Spawner | Java Native Interface (JNI) is a programming framework that enables Java code running in a Java Virtual Machine (JVM) to call and be called by native applications (programs specific to a hardware and operating system platform) and libraries written in other languages such as C, C++ and assembly.* When the spawner executable is used to launch FWD Client instances, it uses JNI (via libjvm) for spawning. |
libncurses.so.5 |
ncurses library 5.7 (last available 5.9) | Yes | User interface | A terminal-independent method for providing a character user interface. Required only on Linux/UNIX. This project depends upon a customized version of this library (and a customized version of the associated TERMINFO database). Please see Patching NCURSES and Patching TERMINFO for the details. |
batik-anim-1.8.jar batik-awt-util-1.8.jar batik-bridge-1.8.jar batik-codec-1.8.jar batik-css-1.8.jar batik-dom-1.8.jar batik-ext-1.8.jar batik-extension-1.8.jar batik-gui-util-1.8.jar batik-gvt-1.8.jar batik-parser-1.8.jar batik-script-1.8.jar batik-svg-dom-1.8.jar batik-svggen-1.8.jar batik-swing-1.8.jar batik-transcoder-1.8.jar batik-util-1.8.jar batik-xml-1.8.jar xml-apis-ext-1.3.04.jar xmlgraphics-commons-2.0.jar |
The Apache™ Batik Project 1.8 | No | User interface | Batik is a Java-based toolkit for applications or applets that want to use images in the Scalable Vector Graphics (SVG) format for various purposes, such as display, generation or manipulation.*. |
common-image-3.1.2.jar common-io-3.1.2.jar common-lang-3.1.2.jar imageio-bmp-3.1.2.jar imageio-core-3.1.2.jar imageio-metadata-3.1.2.jar |
TwelveMonkeys ImageIO 3.1.2 | No | User interface | TwelveMonkeys ImageIO is a collection of plugins and extensions for Java's ImageIO.* |
dojo-1.10.0-distribution.zip |
Dojo Toolkit 1.10.0 | No | Web UI and JavaScript bindings | Open source modular JavaScript library (or more specifically JavaScript toolkit) designed to ease the rapid development of cross-platform, JavaScript/Ajax-based applications and web sites.* |
jetty-all-9.3.8.v20160314-uber.jar jetty-proxy-9.3.8.v20160314.jar javax.servlet-api-3.1.0.jar |
Jetty 9.3.8 | No | Web UI and JavaScript bindings | Provides HTTP server, HTTP client, and javax.servlet container |
dom4j-1.6.jar xml-apis-1.3.04.jar |
XML Processing Libraries | No | XML Processing | A collection of libraries responsible for XML processing. |
Browser Support¶
The FWD Web Client can be executed in the following minimum browser levels:
Browser | Minimum Version |
---|---|
Chrome | 30 |
Firefox | 30 |
IE | 11 |
Edge | 12 |
Safari | 8.0 |
#2674 has more details.
Obtaining the 3rd Party Code¶
All of the projects upon which FWD is dependent are licensed under permissive open source licenses.
Some of the projects are redistributed having as a bundle some other libraries. It is the case of license used for distribution of Java EE (Oracle Binary Code License Agreement for Java EE Technologies) that covers both JTA and the Servlet API. This license allows for redistribution under other licenses (see Supplemental License Term B), so long as (among other conditions), Oracle's rights under its Binary Code License are adequately protected under the license used for redistribution. Also it is the case of Apache license for Jetty distribution that covers JTA and Servlets API. Similarly, LGPL of Hibernate that covers C3p0, ANTLR, dom4j and ehcache. Therefore, these licenses (i.e., LGPL and Apache, respectively) are what we rely upon for these libraries. They allow our customers to redistribute these libraries for commercial purposes.
The following table lists each project referenced above and summarizes how it is licensed and how to obtain the code:
© 2004-2017 Golden Code Development Corporation. ALL RIGHTS RESERVED.