A Look into the Architecture
The openM2 business application framework is based on a multi-tier architecture with special layers for object-caching and request-routing processes between the main architectural layers.
Note that when development of openM2 started in 1992 there were no Application Servers available as there are today. Most of the functions today's java application server like JBoss or Glassfish offer were implemented within the framework itself.
Originally the platform was developed for Internet Explorer 6 and Netscape Navigator. Later on browser support was extended to modern browsers like Microsoft Edge, Google Chrome and Firefox.
Here is a deeper look into the architecture of openM2:
Presentation Layer
The Presentation Layer follows an MVC (Model-View-Controller) pattern and uses XML object templates and XSLT transformation on the server side to generate HTML code and inject form-related Javascript code.
The user interface can be fully customized towards your corporate design by overwriting CSS and some layout-specific JavaScript. The application was designed with frames for performance reasons - only required frames get reloaded and rendered.
Presentation Layer of openM2
Objects specify their representation either by themselves or with separate XSL-files or with predefined standard rules. With the XSL-Option a DOM-Tree can be sent along with the object via XSL. This way you can change the values of the objects with JavaScript without defining extra methods.
Using an I/O encapsulation between main Presentation and Business Logic layer makes it possible to even include external applications into the frontend.
I/O encapsulation to integrate external applications in openM2
Business Logic Layer
The Business Logic Layer is home of the main customization mechanism of openM2. The business object structures are generated by the Business Object Invocation.
Note that all objects get an unique OID which contains their type identification encoded within 4 bytes. This type identification is used to retrieve all required relationships, dependencies and values for the objects in the database.
Objects can be Containers meaning that they can contain other Objects and therefore get a different representation. Objects and Containers can be embedded into each other creating deep complex composed object types.
Of course each object type can use default java classes or have it's specific classes overwriting and extending their standard functionality.
Customizing in Business Logic Layer of openM2
Within this layer lies the workflow execution engine which ties objects to process steps and executes tasks.
The workflow engine uses a specific XML schema to define workflow steps, rules and related actions.
Workflow Engine within the Business Logic Layer of openM2
Application Layer
The heart of the application layer is a Java based Tomcat Servlet Container.
As central execution unit a special servlet called m2ApplicationServlet is used. It handles HTTP as well as HTTPS, get- and post requests and manages sessions. On request the URL will get interpreted and the right actions and parameters will get forwarded. For decoding a special dictionary is used (FormDataDictionary) and afterwards the control element (ApplicationControl) induces the actions and loads objects, if needed, out of the cache (ObjectPool). Furthermore, the management of the required data types is done on this layer.
the Application Layer of the openM2 Framework
Data Layer
Between the Business Object Invocation and data you will find a Data Abstration Layer (DAL). With this layer data is pulled from various sources like databases, textfiles, etc.
Mostly Microsoft SQL Server is used as a database but using other sources is possible as well. All tables will get generated automatically through the openM2 installation mechanism. The exact process and the data structure can be additionally structured via scripts. This layer also houses interfaces to other applications (like SAP). For external datasources, agents can be configured which then periodically import the data.
An important property on this layer is the possibility to change online data structures. If objects are being edited (e.g. an attribut gets added) a recreation of the relevant database tables can be controlled via translators (XSL-Files) and all old data will get transferred to the new object type.
The Data Layer of openM2