Jobfilter is a simple Spring-based webapp for managing and filtering job vacancies and application. Vacancy information is obtained from an external data source - currently www.jobserve.com-mailed CSV files; however the implementation is designed to be extensible to other sources of vacancy information.
Vacancies are handled via a simple workflow: a vacancy begins life (having been loaded from the external data source) in a new state. An initial filtering is performed on all new vacancies whereby they are either accepted as being of potential interest or rejected. New vacancies which are accepted become pending . A pending vacancy can be edited repeatedly and, at each stage, have notes attached; it can also be rejected if, on closer inspection, it is deemed to be of no further interest. If a pending vacancy is of interest, an application can be made for the vacancy. Vacancy applications require a CV (Resume) and Jobfilter maintains a set of available CVs for this purpose. An application can be made by email (using an email address provided in the vacancy data) or via an external website (using a URL provided in the vacancy data). In the latter case, Jobfilter merely maintains a record of the vacancy application but leaves the application process to the external website.
Vacancies which are rejected (at either the new or pending stages) are maintained internally within the system for a period of time after the rejection. This allows the system to spot and remove duplicates of rejected vacancies which might appear in subsequent vacancy data loads. A timer within the Jobfilter application automatically removes rejected vacancies after a period of time (when it is assumed duplicates will no longer appear).
The data comprising a vacancy is divided into data specific to the vacancy itself, data pertaining to the agent who posted the vacancy and data about the agency to which that agent belongs. Jobfilter maintains a record of all agencies and their agents and provides the ability to edit this information. Additionally a record is maintained of CVs sent to each agency for reference in the event of a later application for a different vacancy posted by the same agency.
Jobfilter is implemented as a simple 3-tier web application. The web tier is implemented using Spring web MVC which communicates with a middle tier via a set of service interfaces whose implementations are dependency injected into the web tier using Spring. Spring is also used to provide transactional behaviour on the service interfaces. Service interface implementations communicate with the persistence tier via a set of Data Access Object (DAO) interfaces whose implementations are dependency injected into the middle tier using Spring. The following DAO implementations are provided:
The Jobfilter implementation is spread across a number of projects as follows:
The Jobfilter object model is given in the UML class diagram below:
The classes in the diagram correspond to those in package
An agency employing a number of agents and holding the registrations of a number of CVs.
An agent employed by an agency and who is handing a number of vacancies.
Abstract base class for a vacancy being handled by an agent.
A vacancy in the new state. New vacancies have not undergone the initial filtering process.
A vacancy in the pending state. Pending vacancies have successfully passed the initial vacancy filtering process and may or may not be associated with a vacancy application. A series of notes may be attached to a pending vacancy, recording events during its lifecycle.
A note associated with a pending vacancy. Vacancy notes are timestamped and contain a textual description of some event during the lifecycle of its associated vacancy - e.g. "Called agent to check on progress of application - still awaiting response from client."
A vacancy in the rejected state. Rejected vacancies are new or pending vacancies which have ultimately been determined to be of no further interest. Rejected vacancies do not appear in the user interface but are retained by the system for a short time to help prevent the uploading of future, duplicate vacancies.
(Resume) held by the system. The set of
available CVs is presented to the user upon making an application for
a vacancy. A CV object contains a binary image of the original CV file
uploaded from filestore and a reference to an entity reflecting the
type of the contents of the binary image (e.g. "Word document"). Any
given CV may be registered with any number of agencies - note that, in
The type of the content of a CV binary held by a CV object. CV content types are static data , having a fixed set of values (currently "PDF" and "Word"). These are created in the database when the application starts up for the first time.
The registration of a given CV with a given agency. A CV registration can be used as the basis of any number of vacancy applications - i.e. upon registering a CV with an agency, it is possible to use that CV to apply for any number of vacancies advertised by that agency.
An application for a (pending) vacancy using a given CV registered with a given agency (i.e. a CV registration entity).
The tables of the Jobfilter database model (into which the Object Model is persisted) are described below. Note that, for brevity, this description omits the majority of the value fields of the various tables and, instead, concentrates on the various primary and foreign key fields.