Tangram Dynamic Extendable Web Applications
Tangram is a framework comprised of an assembly of proven Java library modules to form a basis for web applications which need the following core elements:
- Data driven through models expressed in Java
- Easy mapping of URLs to action implementations
- Dynamic extendability along the way (without deployments)
- Present reasonable defaults for any aspect
- Quick path to get something running
- Long path to keep it alive and let the application grow
A growing set of documentation items can be found in the wiki of this project:
It comes with limited CMS functionality by using Java Data Object (JDO), Java Persistence API (JPA) implementations, or even EBean as data sources and presenting a more or less generic editor for that situation. JDO can be used in conjunction with Google App Engine while JDO and JPA are tested with relational database systems and MongoDB stand alone or on the OpenShift plattform. Additionally the use of CoreMedia CMS repositories as data source is possible.
The emphasis of the latest work and releases is towards dynamic templating and continous enhancement of web applications. As a result Object Oriented Templating can not only be used with static JSP Files but also with Apache Velocity code placed in the repository. Additionally the base bean classes can be dynamically extended by Groovy codes in the repository.
Tangram not only allows for the convenient presentation of content but also the implementation of actions to be called via URLs like e.g. for AJAX or RESTful services by use of custom annotations in Java or again Groovy extensions.
Two german short articles about that can be found here:
The tangram components can be glued together with several dependency injection frameworks. Springframework, dinistiq, and Google Guice work out of the box.
Examples are presented for JDO with RDBMS (hsqldb is used for the example contents), JDO on Google App Engine, JPA, EBean (with h2), and CoreMedia CMS's most simple example application.
To make things easier for applications using this framework we provide a Gradle plugin now.
To make all this work you need
- Java 8
- Gradle 3.4 or later (gradle wrapper included)
For all the rest simply type
which again automatically expands to
gradle clean publishToMavenLocal
and then you can build and use your projects using tangram or the examples.
If you need to set a runtime library to e.g. compile with Java 8 for target systems with Java 7 you can provide a JDK pointer (e.g. for releases up to version 1.1):
gradle -Pjdk=/opt/jdk1.7.0_80 clean build publishToMavenLocal
Packaging source code and API documentation is triggered by the "release" switch.
gradle -Prelease clean build publishToMavenLocal
Test coverage is checked with the Jacoco plugin. To obtain a combined view of the test coverage of all modules, you need to call the jacocoCominbedReport task at the root level. The jacocoTestReport task only works for the individual modules.
gradle -Prelease clean build jacocoCombinedReport publishToMavenLocal
Optionally you might need Google App Engine but just if you want to use it for your target systems (Yes, you will want to install ths Java AND python version)
(output folders are set to .../build/classes/main not to .../bin)
(We don't recommend using eclipse anymore)