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.
You can download this sample from SourceForge.
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:
Project whose sole purpose is for invoking a Maven build of the entire application. This project does not provide any code nor does it provide any resultant artifact.
Project documentation - README's, build and deployment instructions etc.
Provides domain classes, persistence layer and middle tier (business logic). Note that the jobfilter-common codebase includes the sources for all variants of the persistence layer (JDO, JPA, Hibernate3 etc.) - an appropriate implementation will be selected according to a property passed to the Maven build.
Web front-end - servlets, JSPs, Spring MVC form controllers, web-related decorator classes etc. Also provides top-level Spring configuration of application, linking together web tier, business logic and DAOs.
The Jobfilter object model is given in the UML class diagram below:
The classes in the diagram correspond to those in package com.plus.fcentre.jobfilter.domain (in project jobfilter-common). A description of the classes and their relationships follows:
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.