What is MyTISM?
MyTISM is a framework to develop database-supported applications in a fast and effective way. Based upon PostgreSQL and Java, it runs on almost all popular operating systems and platforms. Its low resource requirements, the decentralized structure and its robustness make it an ideal tool to develop distributed business applications which run on notebooks or huge servers, without bothering the developers with the complex topics of syncing databases.
MyTISM has been used in many applications for years already and has proven to be performant, robust and due to its simple structure easy to manage. The range of applications goes from industry data gathering and machine control up to ERP and DMS systems.
Contrary to the current trend we don´t rely on pure Web Interfaces but deliver a full fledged Java Swing client, started via WebStart, which sports the ususal comfort of a native application including integration into the operating system. We do have a plugin to support a widely supported Web Container, namely Grails, which warrants a fast and efficient way for developing Web applications.
What´s the advantage to the conventional approach?
You get all the infrastructure necessary for a database application out of the box, including many mandatory features, e.g.:
- creation of tables, indexes, basic queries
- backend protocol for 3-tier
- deployment and installation of the application
- Graphical User Interface
- Access Control
By now there are already quite some frameworks which provide some of these; on the Java platform almost all of them seem to concentrate upon a web-based approach, mostly 2-tier, namely database and web application server. MyTISM is different right from the start: the backend runs in its own JVM which shields the database from the client, whereas "client" can be either the Swing GUI or a Web Application Server or a specially designed application.
The Swing GUI "Solstice" is both client and a development and prototyping environment, with which you can quickly create an internal application. Changes to forms and reports can be made effortlessly and be tested right away, so the turn-around times are extremely short.
The same can be said about the Web Framework "Grails", which we connect to MyTISM using a self-written plugin. The turn-around times are equally short: normally a reload of the page in the browser shows the results of any changes right away. There are no typical "compile, redeploy" cycles as is usual in well-known J2EE containers.
How does MyTISM differ from other frameworks?
The 3-tier architecture mentioned above has quite some advantages because it can hide the database completely from the application. Thus it knows about every single update in the database. That helps implementing effective caches, writing event distribution mechanisms, observing objects and much more. We understood these possibilities very early and made them useable for you:
That´s code which runs in the server context. It can be classes but also scripts which scan for mail, export or import data, etc. One real-world example is the stock-recalculation process of our ERP, which continuously recalculates values so they are available instantly for common reporting tasks.
Every service can listen to events from the kernel. These can be e.g. changes to specific objects. Due to sophisticated filter-implementation this works on the client (Solstice, Grails) also; the API is the same.
This is a special functionality, with which every user that has the necessary permissions may define conditions for triggering an alarm. A triggered alarm can trigger notifications or scripts which can act appropriately. The way such an alarm is triggered depends on its kind, which may be one of:
- explicit alarms: They are triggered upon reaching a date and time given by an external entity.
- BO-based alarms: A defined set of Business Objects aka BOs (e.g. a marketing campaign) supplies the trigger date (e.g. notification of sales department).
- Conditional alarms: Based upon a set of BOs (e.g. production order), the alarm will be triggered if specific criteria of a data change (e.g. change of ready status to "true" or change of target date).
- follow-up alarms: Again a set of BOs (e.g. bills not yet paid which can not be debited directly), whose defined criteria of a data change did not occur within a given time frame (e.g. payment through the customer).
Every data change in the system issues log entries which are written into the database, too. That way we can ask for specific object changes in the past, to enable "time travel" of objects or just a thorough documentation of an object state at a given point in time.
Everyon knows the problem: If you do anything with "the net" or have multiple branch offices, the question how to keep the data in sync automatically arises. MyTISM features a built-in and for the programmer almost completely transparent synchronization, which reacts extremely robust against offline situations, which tailors it for operation during fairs, usage by sales representants at a customer´s site or similar scenarios.
Due to the extremely low resource requirements you can install such a server on a notebook or a small, portable server. As an alternative you can also set up a rented, small virtual server in the web together with Grails, which will continue to work even if there´s no connection to the company server, if, let´s say, the leased line broke down. Such a web-server can also be taken along to presentations or training events in a hotel or at a fair location, thus being independent of infrastructure on site.
Not to forget the advantages for backups, which are far more easy to do: a "node" as we call such a synchronizing server has always an up-to-date database as long as it is connected to the other nodes. In case any server fails you can easily replace it or switch over the clients manually, e.g. via DNS.
We developed a proprietary protocol for connecting the clients with the backend featuring:
- Secure connection via TLSv1, you can configure both key-lengths and algorithms
- Specialized serialization of the objects for compact streams
- Compression of all data streams with zlib, which can be configured, too
- Completely passive, the server will never try to connect to the client on its own which eases firewall setups a lot
- Binding and ports are completely configurable, operating multiple MyTISM instances running simultaneously on the same server is painless
We extended the well known Java concept of ResourceBundles, so that the complete user interface may be tailored for different languages and local particularities easily. The support of unicode built into Java allows for charsets out of the usual ASCII-compatible languages.
In distinction from the original, our own L10n system supports key- and bundle-changes during runtime; all bundles are kept in the database. Sophisticated caching and a fallback system warrants a high performance, easy management and extremely short turn-around cycles.
Here are some examples of custom applications which have been implemented using MyTISM:
- Document management system
- Web-based e-Learning-platform
- Point of Sale system
- Correspondence management system
- Enterprise resource planning system (ERP)
- Web-based hotel booking agency
- Web-based event management