Technical Features
SavaPage is a modern Single-Page Application (SPA).
Here is a list of its main features:
- Business and Persistence logic is implemented in a Java EE server process.
- Persistence logic is implemented with JPA (Hibernate).
- Apache Derby (embedded) is the default database, PostgreSQL is supported via JDBC.
- Wicket is solely used to server-side generate localized HTML. All presentation logic is implemented in client-side JavaScript with Ajax calls to the server.
- jQuery Mobile is used to create an adaptive HTML5-based user interface that gives a consistent user experience on all smartphone, tablet and desktop devices.
- iText is used for PDF manipulation.
- Apache Maven is used as Java project management tool. See the Maven generated list of Third Party Software Components.
Components programmed in C/C++ are:
Components programmed in PHP are:
Software technology is progressing at a rapid pace and sometimes it is hard to tell hype from sustainable value. Moreover, with the KISS Principle in mind, even sustainable tools are often just too heavy for simple technological challenges. SavaPage Development favors simple tooling for simple challenges. If simple tools are available off-the-shelf that's fine, if not, they will be “invented here”. We are a strong believer in continuous code refactoring. When new requirements trigger challenges that supersede simple tooling, refactoring to the next simplest solution is the way to go. At that point sustainable technology of the present is of course within scope.
What about Spring?
SavaPage acts in a Web, Command-Line and Technical printing context. For now, the flexibility of our own framework outweighs the advantages of Spring, which are typical for large scale administrative applications.
Which JavaScript framework is used?
Currently a home brew jQuery Mobile “framework” is used to implement a “somewhat” model-view-controller (MVC) architecture. A third-party framework should be lightweight and easily integrate with jQuery Mobile. The Backbone.js and Vue.js solutions seem good candidates and will be investigated in due time.