====== Technical Features ====== SavaPage is a modern [[https://en.wikipedia.org/wiki/Single-page_application|Single-Page Application]] (SPA). === Here is a list of its main features: === * Business and Persistence logic is implemented in a [[https://en.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition|Java EE]] server process. * Persistence logic is implemented with [[https://en.wikipedia.org/wiki/Java_Persistence_API|JPA]] (Hibernate). * [[https://db.apache.org/derby/|Apache Derby]] (embedded) is the default database, [[https://www.postgresql.org/|PostgreSQL]] is supported via JDBC. * HTTP communication is handled by [[https://www.eclipse.org/jetty/|Jetty]] Web Server (embedded). Push notification is implemented with [[https://cometd.org/|CometD]]. * [[https://wicket.apache.org/|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. * [[https://jquerymobile.com/|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. * [[http://itextpdf.com/|iText]] is used for PDF manipulation. * [[https://maven.apache.org/|Apache Maven]] is used as Java project management tool. See the Maven generated list of [[http://savapage.org/docs/licenses/|Third Party Software Components]]. === Components programmed in C/C++ are: === * [[https://gitlab.com/savapage/savapage-cups-notifier|savapage-cups-notifier]] * [[https://gitlab.com/savapage/savapage-nss|savapage-nss]] * [[https://gitlab.com/savapage/savapage-pam|savapage-pam]] * [[https://gitlab.com/savapage/savapage-nfc-reader|savapage-nfc-reader]] === Components programmed in PHP are: === * [[https://moodle.org/plugins/block_savapage|moodle-block_savapage]] Software technology is progressing at a rapid pace and sometimes it is hard to tell hype from sustainable value. Moreover, with the [[wp>KISS_principle|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 [[wp>Code_refactoring|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 [[http://backbonejs.org/|Backbone.js]] and [[https://vuejs.org/|Vue.js]] solutions seem good candidates and will be investigated in due time.