Getting started

This brief tutorial is meant to help developers quickly set up a working FinTP environment using CentOS 6.4. operating system. It will guide you from building and installing required binaries to configure and running already prepared scenarios

Content

  1. Solution Scope and Features
  2. Logical Architecture
  3. Install Required Libraries
  4. Setup Central Repository
  5. Install FinTP
  6. Install and Run Scenario Samples

Solution Scope and Features

FinTP is a solution that ensures processing of banks payment instructions (messages) corresponding to the Business Flows, in relation with Electronic Payments System infrastructures (e.g.  CSM, SWIFT ).

The base functionality of FinTP provides:

  • Technical integration with back-office applications
  • Duplicate detection for outgoing transactions
  • Conversion into/from SWIFT FIN and XML ISO20022 format
  • Embedded message routing mechanism, with two routing modes: based on rules and on content
  • Advanced capabilities for transaction searching and reporting
  • Transactions tracing and logging into history database
  • Persistent end-to-end transactions
  • Communication breaks detection along with connection restoring
  • Security module, including the management of groups and users, profiles, functions etc.
  • Transactions archiving
  • Facilities to view and manage transactions (processing, monitoring, authorization, exceptions investigation, reporting)
  • Administration: users/groups settings, message routing and formatting rules, lists management, audit logs inquiring, data archiving
  • Search Reports

Logical Architecture

FinTP-Arch

  • FinTP Connectors: Application component responsable to fetch/publish message from/to external applications. Connectors can use local installed clients ( activemq-cpp-library, odbc, Oracle Instant Client, WMQ Client ) to locally or remotely connect to App n defined interfaces.
  • Repository: Connector like component whose main purpose is to feed FinTP repository with all messages collected by connectors. Every success stored message will trigger Routing Engine message proccesing.
  • Routing Engine: Main processing component whose purpose is to route messages according to routing actions defined in active routing schemas. Routing Engine also reconcile processed messages with internal/external confirmations specific to business flow protocol and drive message archiving.
  • Events Monitoring: Application component  responsable to collect  process generated events by each component. Events Monitoring drop collected events to FinTP storage database so they can be audited through Web Application user interface.
  • Web Application: web based user interface allowing authorized users to access and operate on business messages, configure message processing and manage users privileges.

From this point on, you can find step by step instructions that will show how all required pieces fit together  in a shape of working FinTP solution …but, if you feel that none of following instructions relates in any way with you, don’t worry, there are a lot of other ways you can contribute to the FinTP project as you can see on our how to contribute guide.

Install Required Libraries

First of all, in order to build any binary related to FinTP solution, we must install the development tools:


yum groupinstall 'Development Tools'

Next install all the libraries required by FinTP. For most libraries we simply need to use yum command:

yum install xerces-c xerces-c-devel unixODBC unixODBC-devel openssl openssl-devel libtiff libtiff-devel apr apr-devel libcurl libcurl-devel

The following sections will show us how to build the rest of the FinTP required libraries from source. If you don’t want to build all these libraries, you can use any packages to install them, except for Xalan-C++. Xalan-C++ must be built from source because as of the latest version (1.11) we need to make a slight modification to one file to ensure proper FinTP functionality. The latest versions should always work; if that’s not the case then feel free to contact us or open a bug report on GitHub.

After extracting Xalan-C++ we must set the XALANCROOT variable. If for example Xalan-C++ was extracted in /home/fintp/xalan-c-1.11 we must run

export XALANCROOT=/home/fintp/xalan-c-1.11/c

Now it’s time to edit $XALANCROOT/src/xalanc/XMLSupport/FormatterToXML.cpp like this:

@@ -910,7 +910,7 @@
             {
                 if(ch < 0x20 )
                 {
-                    if(m_isXML1_1)
+                    if(ch == 0x9 || ch == 0xA || ch == 0xD || m_isXML1_1)
                     {
                         writeNumberedEntityReference(ch);
                     }

We must apply this patch to avoid the following error: SAX Exception received while serializing node. Message : ‘A’ is an invalid Unicode scalar value. U+0009, U+000A, U+000D Unicode code points are valid in XML 1.0 so we consider this error to be unwarranted.

To finally build Xalan-C++:

./runConfigure -p linux -c gcc -x g++
make
make install

Edit _projects/Linux/Makefile as following:

@@ -10,9 +10,9 @@
#otherwise, the system's bzip2 library will be used
#INTERNAL_BZIP2 = 1

-CC=g++
+CC=g++ -fPIC

-CCC=cc
+CCC=cc -fPIC
#CCC=gcc

We must add the -fPIC flag to avoid errors when linking ZipArchive static library with our shared library.

cp _projects/Linux/Makefile ZipArchive/
cd ZipArchive
make
make install

Uncomment the following line in boost/regex/user.hpp:

//#define BOOST_REGEX_MATCH_EXTRA

To build and install all Boost libraries run:

./bootstrap.sh
./b2 install
./configure
./make
./make install

Setup Central Repository

To store messages and other processing and configutation data, FinTP use RDBMS as a central repository. For the purpose of this installation use PostgreSQL 9.1 database server or upper versions

wget http://yum.postgresql.org/9.1/redhat/rhel-6-x86_64/pgdg-centos91-9.1-4.noarch.rpm 
rpm -ivh pgdg-centos91-9.1-4.noarch.rpm 
yum install postgresql91-server.x86_64 
yum install postgresql-odbc
chkconfig postgresql-9.1 on 
service postgresql-9.1 initdb 

Refer to FinTP/fintp_db GitHub repo Readme.md to create the foundation database objects required to run FinTP solution on PostgreSQL database.

Edit /etc/odbc.ini file to define Data Sources used by FinTP components.

[fintpce]
Description = fintp_samples test flows
Driver = PostgreSQL
Trace = Yes
TraceFile = sql.log
Database = fintpce
Servername = 127.0.0.1
UserName = 
Password =
Port = 5432
Protocol = 6.4
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ShowOidColumn = No
FakeOidIndex = No
ConnSettings =

Edit /etc/odbcinst.ini to specify previously defined driver name

[PostgreSQL]
 Description = ODBC for PostgreSQL
 Driver = /usr/lib/psqlodbc.so
 Setup = /usr/lib/libodbcpsqlS.so
 Driver64 = /usr/lib64/psqlodbc.so
 Setup64 = /usr/lib64/libodbcpsqlS.so
 FileUsage = 1

Install FinTP

To reliable transfer message between FinTP components, use a Message Queuing Middleware. For the purpose of this installation use Apache Active MQ. You can find detailed instructions at Instalation Procedure for Unix.

Next, Download FinTP binaries from Release section of this site.

In order to have them effectively working you must follow instructions in Install and Run Scenario Sample section of this guide.

Alternatively one can use source code hosted in GitHub to build FinTP binaries from scratch. Clone each repository (in the same directory) as following:

git clone https://github.com/FinTP/fintp_utils.git
git clone https://github.com/FinTP/fintp_log.git
git clone https://github.com/FinTP/fintp_transport.git
git clone https://github.com/FinTP/fintp_udal.git
git clone https://github.com/FinTP/fintp_ws.git
git clone https://github.com/FinTP/fintp_base.git
git clone https://github.com/FinTP/fintp_connectors.git
git clone https://github.com/FinTP/fintp_eventswatcher.git
git clone https://github.com/FinTP/fintp_routingengine.git
git clone https://github.com/FinTP/fintp_payloadevaluators.git

As FinTP uses the GNU build system you will have to run

autoreconf -fi

for every project to generate the necessary files as we don’t store them in our repositories. To build a FinTP project just run:

./configure
make

Make sure you’re building the projects in the same order we cloned them above to avoid dependency issues. After a successful build, you can either run

make install

for a project to install its headers and binaries or you can use the binaries in the .libs directory to Install and Run Scenario Sample.

FinTP also has support for proprietary software (IBM Websphere MQ and Oracle Call Interface library). If you want to use these products you will have to add some arguments when calling the configure script because by default FinTP only uses free software. For more options regarding the configure script you can consult ./configure –help.

For example:

fintp_transport/configure --with-activemqcpp=no --with-wmq

will add support WebsphereMQ and removes support for ActiveMQ and

fintp_udal/configure --with-oracle

will add support for Oracle Call Interface and keeps UnixODBC support (can be removed using –without-unixodbc).

Install and Run Scenario Samples

To give a glimpse of what FinTP can do for you we prepare two ready to run scenarios (and will be more in the near future). The scenarios are categorized by Business Flows.

A Business Flow basically mean processing of specific message formats following a specific message-responses protocol required by Electronic Payments System we want to interface with

A Business Flow scenario consist of:

  • specific named Connectors with configuration files (.config, .xslt, .dad…) characteristic to the message types they handle. (provided as ready to use by scenario configuration)
  • database objects for handled message types. (provided by  FinTP/fintp_db scripts).
  • database configurations data (Routing Queues, Routing Schemas, Routing Exitpoints, Users, Privileges), provided by scenario database scripts

Before running fintp_samples you need to install messages types database objects mentioned above. Please go to Business flow to message types mapping an run Scripts listed for the scenario you choose.

The scenarios are hosted on FinTP/fintp_samples GitHub repo. Here you ca find detailed instructions on how to configure each scenario. The wiki pages contains step by step instructions on how to test scenarios