Tales from the crypt of developers of the platform for ERP. Introduction

Good day!

In this series of articles we want to talk about Ultima Businessware - our platform for building ERP systems.
This is the first introductory article in which we will talk about the evolution (i.e. the environment and interaction with it) of the platform and list the main and most interesting features of the platform.
In future posts, we plan to talk about the details of the device and the implementation of these same features. In addition, along the way, we will share with the organization of the development process with us.


Now it’s fashionable to put a link to Wikipedia after such a title, but we non-conformists will not do this. Actually, here we will talk about the environment in which the platform arose and developed.

So about the environment - it began in 2004 on a server with 4GB of memory and 4 cores. And around the crowd circled 150 users who really needed to sell goods. And to buy. And store, and deliver, and much more. And, I must say, these users thrashed into buttons, without being distracted by lunch. Smoked in general in the workplace. In sum, we had thousands of transactions per hour. And it was not as scary as blocking - these crowds of users and even customers through the site were chasing goods.

But, besides this, the company managed to grow rapidly, which was accompanied by an incredibly fast change in business processes and, as a result, the application itself.

It was in such an environment that the first version of our platform appeared - a lot of users, a high transaction load, a race for resources, business processes that do not allow annihilating locks, constant changes and you can’t be mistaken. And the only way is to increase productivity, reduce blocking time, optimize the user interface, simplify development to keep up with the changes.

For the historical truth, it must be said that the first version of the platform exists and is still in operation in many companies and is likely to continue to be operated, due to the fact that the release of the platform, which happened in 2013, is incompatible with the previous one. We will not talk about the previous release, because it will live out its life with existing customers. For the sake of statistics, just give a couple of numbers:
  • It employs about 4,000 users;
  • About 200,000 customers visit the site daily.


The three-tier application, the application server is completely developed from scratch, uses the Zyan Project for communication . The lead developer of the platform is one of its contributors. The general scheme of the application is shown in the following scheme:

application diagram

As you can see, Oracle Database is used as a DBMS. For the time being, we retain 11gR2 support, however, with the release of the new version of ODA and ExaData, we plan to refuse and go to 12c. For lightly loaded solutions, the system can be run on EnterpriseDB with Oracle Compatibility.

Such a rigid binding, uncharacteristic for other automation solutions, is due to the need to optimize performance. Using the capabilities of Oracle Database, we were able to implement queues inside the database (we will talk a little about them in the article about the print server), and to optimize many internal processes.

Application server and client application - fully managed applications are written in C # 5.0, i.e. use LINQ and async / await (we will try to share our experience of using the latter in the following articles). Actually, all business logic is implemented in the form of handlers for various events of various business objects. If you are familiar with 1C, then you will recognize them - these are directories, documents and a certain analogue of the register, which we call the result.

Actually, there can be many client applications, but the platform includes one in which the development and administration environment is built. This is a GUI for describing the structure and relationships of business objects and a code editor for scripts. Scripts in C #, an analogue of IntelliSense in the editor is present.

The application server is respectively entrusted with the execution of business logic, the conversion of relational data into system objects and vice versa, event management, and more.

For illustration, the following diagram should be given:

Ultima Businessware interaction diagram

And finally, the print server, already mentioned three times, our pride in a sense, is responsible for sending the appropriate printing forms to printers. Allows you to “virtualize” access to printers, organize guaranteed delivery, remove waiting for access to the printer (and usually reduce the blocking time), and much more. We will tell you more in a separate article about his device.

Well and further about what we are going to tell:
  • Transaction management. How it was and how it became. Multi-threaded transaction management problems.
  • Change management. How we have version control. Why is it needed, and what allows.
  • REST / SOAP support. How we have their support organized.
  • Big brother and data change history. Why Oracle Flashback Archive cannot be used yet.

Instead of a conclusion

We tried to talk a little about our system and interest you. In the following articles, we will go a little deeper into the details, to do this in the first article is a direct way to overheating the brain.

In addition, we will try to talk about all the interesting emerging problems that do not constitute a know-how or trade secret in our blog.

Also popular now: