PITRE - Personal Income Tax Return Estimate

CSI3344 Distributed Systems

Edith Cowan University

Bachelor of Computer Science (Software Engineering)

Assessment 3: Remote Method Invocation (RMI) Three-Tiered Distributed System

Mark Jamsek mark@jamsek.dev 10502496


PITRE demonstrates a remote method invocation (RMI) implementation of a three-tiered distributed system. All components are written in Java with a MySQL database backend. Both the second- and third-tier servers are designed to run remotely to the client, and the database itself can be hosted anywhere provided it is reachable by the database server. The primary function of the system is to generate tax return estimates and persist income records to the database. This is accomplished by allowing users to enter gross annual income in the form of twenty-six biweekly net pay and tax withheld values on the client application. These data are then sent to the server, which performs two tasks:

  1. the data are packaged into a request that is sent to the database server to be converted into entities that can be persisted to the database; and
  2. the server runs the data through an equation to determine whether tax monies are outstanding or have been paid in excess such that a tax return is due.

The server crafts a response object, which is sent back to the client, and the result is displayed to the user.

The system is machine-independent, with Java the only runtime dependency of the client and servers, and the database is a MySQL server running in a Google Cloud instance; however, as mentioned, the database can be provisioned on any host reachable from the third-tier database server. The entire distributed system comprises three tiers:

  1. The first tier is a text-based user interface that provides the command driven client for end users to enter income records.
  2. The records are sent to the second tier, which is a server responsible for validating users, processing records, interfacing with the database server, evaluating data, and generating tax return estimates.
  3. Lastly, the database server functions as the third tier, which persists user data entered at the client application and received via requests from the second tier server to save, retrieve, and delete records.

PITRE is fast, portable, and robust with an intuitive user interface that provides a friendly user experience.

The following video briefly demonstrates its use.

PITRE demo



Run the pitre.sh script (or pitre.ps1 if on Windows) from the root of the work tree. This will build both the server and database server libraries, and the client application before setting up the environment, initialising both distributed services and launching the client. See pitre.sh -h for usage options.


See the pitre(1) manual page for pitre.sh usage, and see the report for complete PITRE documentation. Otherwise, PITRE is intuitive and simple to use; please follow the prompts and use the following credentials at startup: