Software Dependencies

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 Software Dependencies.

This chapter documents the exact list of third party software upon which FWD 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.

From this information it is possible to acquire the code needed and to build or rebuild the specific version required.

In “Software Dependencies” a few 3rd party libraries have been built or download information has been provided. Build all of them before proceeding further. The following table summarize where the built libraries should be copied or moved:

Library Sample file name Actions
ANTLR antlr.jar Copy to p2j/lib/
Asm asm.jar Copy to p2j/lib/
C3p0 c3p0-0.9.1.jar Copy to p2j/lib/
Apache Commons BCEL™ bcel-5.2.jar Copy to p2j/lib/
Code Generation Library cglib-2.1_3.jar Copy to p2j/lib/
dom4j dom4j-1.6.jar Copy to p2j/lib/
ehcache ehcache-1.1.jar Copy to p2j/lib/
H2 Database h2.jar
Copy to p2j/lib/
Hibernate 3 hibernate3.jar Copy to p2j/lib/
Jakarta Commons Library commons-beanutils-core.jar
Copy all to p2j/lib/
Java Servlet API servlet-api-2.5-6.1.14.jar Copy to p2j/lib/
Java Transaction API jta.jar Copy to p2j/lib/
Jetty jetty-6.1.14.jar
Copy all to p2j/lib/
Ncurses 5.7 Install to /usr/lib/
PL/Java 1.1 pljava.jar
Copy to p2j/lib/
PostgreSQL 8.2 postgresql-8.2-508.jdbc4.jar Copy to p2j/lib/


build (java, native)


runtime (client [interactive, batch, appserver agent, web], application server, db server)

some dependencies are platform-specific

[CA]TODO: There should be only one chapter which documents all the 3rd-party libraries (grouped by modules: hibernate, stax, TitanDB, etc), and the goal of each library: runtime, conversion, etc.[/CA]

jdk 7


gcc + binutils OR mingw




Build Environment

Due to the ANTLR dependencies, version 1.5.3 does not work. Please ensure that Ant can be found via the user's PATH.




Module Project and Version Modified Purpose ncurses library 5.7
(last available 5.9)
Yes A terminal-independent method for providing a character user interface. Required only on Linux/UNIX.

Application Server

Module Project and Version Modified Purpose
antlr.jar ANTLR 2.7.4 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.
asm.jar Asm 1.5.3 No 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.
Dependency of Hibernate4.
bcel-5.2.jar Apache Commons BCEL™ No 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.
c3p0-0.9.1.jar C3p0 0.9.1 No 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.
Dependency of Hibernate4.
cglib-2.1_3.jar Code Generation Library 2.1 No A Code Generation Library, It is used to extend JAVA classes and implements interfaces at runtime.
Needed by Hibernate.
commons-beanutils-core.jar Jakarta Commons Beanutils 1.6 No Provides easy-to-use wrappers around the Java reflection and introspection APIs.
Used for logging.
commons-codec-1.7.jar Jakarta Commons Codec 1.7 No Provides implementations of common encoders and decoders such as Base64, Hex, Phonetic and URLs.
Encode and decode the Progress 4GL RAW data type to and from a string representation.
Dependency of TitanDB.
commons-collections-3.2.1.jar Jakarta Commons Collections 3.2.1 No Extends or augments the Java Collections Framework.
Used for logging.
Dependency of TitanDB.
commons-configuration-1.6.jar Apache Commons Configuration 1.10 No Provides a generic configuration interface which enables a Java application to read configuration data from a variety of sources.
Dependency of TitanDB.
commons-httpclient-3.1.jar Jakarta Commons HttpClient 3.1 No Provides an efficient, up-to-date, and feature-rich package implementing the client side of the most recent HTTP standards and recommendations.
Dependency of AXIS2.
commons-lang-2.5.jar Apache Commons Lang 2.5 No 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.
Dependency of TitanDB.
commons-logging-1.1.1.jar Jakarta Commons Logging 1.1.1 No A library that uses the commons-logging API can be used with any logging implementation at runtime.
Dependency of TitanDB and AXIS2.
dom4j-1.6.jar dom4j 1.6 No An easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP.
Dependency of Hibernate4.
ehcache-core-2.6.21.jar Ehcache 2.6.2 No 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.
Dependency of Hibernate4.
h2.jar H2 Embedded Database 1.3.169 No H2 database is used in embedded mode for temporary table support and for internal runtime housekeeping. Also, it can be used with a permanent database, for development and testing purposes.
Hibernate 4.1.8 Yes 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.

[CA]The hibernate-core-4.1.8.jar is a patched version to allow dynamic loading/unloading of DMOs at runtime. The patch resides in p2j/lib/ [/CA]

TODO: split these?
jetty-all-9.1.2.v20140210.jar Jetty 9.1.2 No Provides an HTTP server, HTTP client, and javax.servlet container
jta.jar Java Transaction API 1.1 No Specifies standard Java interfaces between a transaction manager and the parties involved in a distributed transaction system: the resource manager, the application server, and the transactional applications.
Dependency of Hibernate4.
postgresql-9.2-1002.jdbc4.jar PostgreSQL 9.2 No PostgreSQL jdbc drivers.
javax.servlet-api-3.1.0.jar Java Servlet API 3.1.0 No Includes several Java interfaces and fully defines the link between a hosting server and servlets. The Servlet API is defined as an extension to the standard JDK
javassist-3.15.0-GA.jar Javassist 3.15.0 No A class library for editing bytecodes in Java.
Dependency of Hibernate4.
jboss-logging-3.1.0.GA.jar JBoss Logging 3.1.0 No Logger for JBoss Application Server.
Dependency of Hibernate4.
jboss-transaction-api_1.1_spec-1.0.0.Final.jar JBoss Transaction API 1.1 No Provides custom Java interfaces used by the transaction manager and the parties involved in a distributed transaction system.
Dependency of Hibernate4.
quartz-2.2.1.jar Quartz 2.2.1 No 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 A lightweight cryptography API with implementations for KIX, CMS, EAC, PKCS, OCSP, TSP, OPENSSL.
bcprov-jdk15on-150.jar BouncyCastle 1.5.0 No A provider for the Java Cryptography Extension and the Java Cryptography Architecture.
SAX support No TODO: finish this
AXIS2 support No TODO: finish this
TitanDB support No TODO: finish this
TitanDB - Lucene Index support No TODO: finish this

Database Server

Module Project and Version Modified Purpose
pljava.jar PL/Java 1.1 No PL/Java is an add on module to the PostgreSQL backend. 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.
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.

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:

TODO: cmplete with the other jars

Project and Version License How to Obtain Observations
ANTLR 2.7.4 BSD License
Linux repositories (2.7.7)
Also distributed as bundle of Hibernate under LGPL license
Asm 1.5.3 France Telecom Proprietary License
Linux repositories (3.3.2-1)
Apache Commons BCEL™ Apache License, Version 2.0  
C3p0 0.9.1 GNU Lesser General Public License
Linux repositories (
Also distributed as bundle of Hibernate under LGPL license
Code Generation Library 2.1 Apache License 2.0  
dom4j 1.6 BSD style license Also distributed as bundle of Hibernate under LGPL license
ehcache 1.1 Apache 2.0 License Also distributed as bundle of Hibernate under LGPL license
H2 Database 1.3.169 MPL 1.1 or EPL 1.0  
Hibernate 4 GNU Lesser General Public License
Linux repositories (3.6.9)
The distribution license also covers other libraries among which: antlr, dom4j, C3p0, ehcache and Java Transaction API.
Jakarta Commons Beanutils 1.6 Apache License 2.0  
Jakarta Commons Codec 1.3 Apache License 2.0  
Jakarta Commons Collections 2.1.1 Apache License 2.0  
Jakarta Commons Logging 1.0.4 Apache License 2.0  
Java Servlet API 2.5 Oracle Binary Code License Agreement
Linux repositories
Also distributed as bundle of Jetty under Apache License Version 2.0
Java Transaction API 1.1 "Sun" ENTITLEMENT for SOFTWARE Also distributed as bundle of:
• Java EE under Oracle Binary Code License Agreement license
• Hibernate under LGPL license
• Jetty under Apache License Version 2.0
Jetty 9.1.2 Apache License 2.0
Linux repositories (6.1.24)
The distribution license also covers other libraries among which: Java Servlet API and Java Transaction API
NCurses 5.7 BSD-like
Linux repositories (5.9-4)
PL/Java 1.1 BSD License  
PostgreSQL 9.2 PostgreSQL license
Linux repositories (9.1.5)

Building the 3rd Party Code

Here follows the instructions for how to build the 3rd party binaries that must be patched in order to work with FWD.


All common Linux distributions have support for and include NCURSES by default.

The important step here is to patch NCURSES. The FWD support of a terminal client (Character User Interface or ChUI) requires NCURSES for terminal support. A customized version of NCURSES 5.5 is required. NCURSES 5.5 is the minimum starting point since a bug has been found in the NCURSES getch() that affects process launching (getch() improperly blanks the screen). This bug is fixed in NCURSES 5.5.

In addition, an NCURSES modification is required to provide enough thread safety to enable a dual-threaded approach to using NCURSES (NCURSES is not thread safe). The basic idea is that one thread may be dedicated to reading the keyboard via getch() while another thread is used for all output tasks.

The patches for NCURSES are included in the FWD project. For NCURSES v5.5 and v5.6, use:


For NCURSES v5.7 use:


The following is a simplified description of how to uses these patches to modify the Ubuntu NCURSES installation:

Obtain the source code

cd ~
apt-get source ncurses

Check that you have libncurses5-dev package installed (developer's libraries and docs for ncurses)

cd ~
aptitude search %p libncurses

If not:

cd ~
apt-get install libncurses-dev

Patch the source

Starting in Ubuntu Jaunty Jackalope (v9.04), ncurses 5.7 is the installed version. This example will use the version numbers and patch file names for v5.7.

cd ncurses-5.7
patch ncurses/base/lib_getch.c <path_to_p2j>/p2j/lib/ncurses_lib_getch_c_v5.7_20090512.patch
patch include/ <path_to_p2j>/p2j/lib/ncurses_curses_h_in_20060828.patch
./configure –with-shared
su root
make install
cd /lib
cp /usr/lib/ .
ln -s

WARNING: if the source version you are using is not customized to your distribution it is recommended that you DO NOT run make install or make (this would install a new terminfo database). It has been found that Linux distributions such as SuSE has a customized terminfo database which behaves better than the one (at least in the xterm case) which is included in NCURSES 5.5. If you do decide to install this, you really should backup /usr/share/terminfo first. However, if you use apt-get on Ubuntu, then you may safely use make install which installs everything.


Using the vt320 terminal type, this example will show the process by which the TERMINFO definitions can be updated.

Decompile the vt320 TERMINFO entry into a temporary file:

infocmp vt320 > vt320.tmp

Edit the vt320.tmp file. Notice the TERMINFO location mentioned in the first line. It is typically:


Apply the specific changes in the table below. Save the file. Recompile the TERMINFO entry using the following command:

sudo tic -o/usr/share/terminfo vt320.tmp

The following are the most common edits that are needed:

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 khom= 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, AND add or modify the cinorm= to be cnorm=\E[?25h n/a


A customized version of Hibernate v3.0.5 is included in the FWD project. At this time, there are significant dependencies upon this version of Hibernate, so it is a requirement to use this specific version.

Hibernate is used to provide object to relational database mapping, database caching and other data persistence support.

[CA]TODO: how to patch hibernate 4[/CA]


Download the Execute the following commands:

cd ~/projects
unzip hibernate-3.0.5
cd hibernate-3.0/grammar
patch hql-sql.g $P2J/lib/hibernate_3.0.5_hql-sql.g.20060906_patch
patch hql-sql.g $P2J/lib/hibernate_3.0.5_hql-sql.g.20061018_patch
patch sql-gen.g $P2J/lib/hibernate_3.0.5_sql-gen.g.20060906_patch
patch sql-gen.g $P2J/lib/hibernate_3.0.5_sql-gen.g.20061018_patch
patch sql-gen.g $P2J/lib/hibernate_3.0.5_sql-gen.g.20061101_patch
cd ..
patch src/org/hibernate/hql/ast/ \


To build the modified Hibernate:

cd ~/projects/hibernate-3.0/
java -cp "lib/ant-launcher-1.6.3.jar" -lib lib


The rebuilt Hibernate jar file must be copied to $P2J/lib/.

cp ../hibernate/hibernate3.jar $P2J/lib/

It is a good practice to completely rebuild FWD once the new version of Hibernate is copied in.


PL/Java is used to provide user defined functions written in Java for use with the PostgreSQL database. This is used to improve performance by significantly reducing the number rows that are returned from the database, since the filtering of those rows can be implemented on the database server using custom Java logic.

At this time, the version of PL/Java that is used does include some fixes that were written by Golden Code. Since those fixes have been accepted into the main source tree, there are custom FWD patches for PL/Java.

However, due to the need to support different versions of PostgreSQL over time, it may be necessary to checkout the latest version of PL/Java and rebuild it on the platform on which it will run. The current production version of PL/Java does not support the latest PostgreSQL versions. Another reason to build PL/Java is the case where a 64-bit platform is being used, since the production builds of PL/Java are only 32-bit.

[CA]TODO: pljava for Java 7[/CA]


In order to build PL/Java from sources you will need the following software to be installed:

  • PostgreSQL >= 8.0.3 (no PostgreSQL source is needed). You also need to install postgresql-server-dev-X.Y for building a server-side extension (or libpq-dev for building a client-side application). The PostgreSQL 9.1 fails to compile. The 8.4 will complain that the version is obsolete.
  • A Java runtime 1.4.x, 1.5.x or 1.6.x. However if you have PostgreSQL => 8.4.x, only Java 1.6.x and higher is supported for builds of PL/Java. Also make sure that JAVA_HOME environment variable is set.
  • Make sure that the pg_config utility is installed and is available in your search path. If you have installed PostgreSQL using a software package manager (rpm, deb etc.), then pg_config most likely will have been installed as part of the PostgreSQL server development package.

Obtaining the Source Code

You can download the latest source code from the download area of the PL/Java project: The source name is expected to be pljava-src-x.x.x.tar.gz, where x.x.x is the PL/Java version. Extract the source code using the following command:

tar xzvf pljava-src-x.x.x.tar.gz

However at the time this manual was written the latest version of PL/Java (1.4.3) could not be compiled with Java 1.6. In order to solve this problem, the source code with the tag java6 should be extracted from the project CVS. Use these commands to do this:

cvs -d login

(when prompted for a password, press Enter)

cvs -d checkout -r java6 org.postgresql.pljava


Before compiling, a small patch should be done:

org.postgresql.pljava/src/java/pljava/org/postgresql/pljava/jdbc/ getHoldability() should not throw java.sql.SQLException because of super class's overrided method: org.postgresql.pljava.jdbc.SingleRowResultSet.

org.postgresql.pljava/src/java/pljava/org/postgresql/pljava/ s_getSession = spc.getMethod("getSession", (java.lang.Class[])null);

org.postgresql.pljava/src/java/pljava/org/postgresql/pljava/ return (Session)s_getSession.invoke(null, (java.lang.Object[])null);

Remove -Werror=format-security flag of gcc or a few “format not a string literal and no format arguments” errors will occur in org.postgresql.pljava/src/C/pljava/Backend.c, at lines: 216, 279, 286, 912.

In order to compile sources, just go to the root directory of the sources (where main Makefile resides) and run make command. The make script should automatically detect your JVM and build a 64-bit or 32-bit native library accordingly.

After that you should be able to pick build/pljava.jar and build/objs/ See “PL/Java installation” chapter on how to use them during installation.

© 2004-2017 Golden Code Development Corporation. ALL RIGHTS RESERVED.