Skip to main content

When your Tool is a Hammer, Everything is a Nail, Transformation of Domino - Part 2

The recent announcement by IBM to continue the development and support for the IBM Domino platform indefinitely was great timing for part 2 of this series. This series is about the direction that we are taking Domino. This journey has taken more than five years with many different designs and experiments to get to where we are in our iPhora technology. You can find Part 1 of this series here

There are many tools and solutions out there from many vendors for "Modernizing" a Notes application. But what does that really mean?  In most cases, that means replacing the Notes application interface with a Web interface and making a better UI experience for the user.

But for us application modernization is not just about the front-end but also but how the data is collected, managed, stored and processed. How it integrates with outside third-party services. Most Domino application modernization leaves the data untouched in the same structure. XPages mimics the Notes application environment for a Web client versus a Notes client. This approach allows data to remain in place as it was defined.  But as we all know, it also leaves a lot of useless code, views and wasted resources. 

We wanted a defined framework, that allowed us to create applications more consistent with how the majority of modern Web applications are built but at the same time utilize the best parts of Domino. We are not just interested in "Modernizing a current Notes/Domino application" but building new enterprise applications that utilizes the key advantages that Domino uniquely has.  Before we go any further lets look at what a Web server environment normally consist of. It may include:
  • Web server
  • Identity/Authenication server
  • Load balancer
  • Cluster manager
  • Mail server ( for notifications )
  • API server
  • Integration server
  • Application server
  • Database server
One of the best things about IBM Domino is that all these different type of server components that you need is all bundled into one single server package. This is great for many, but it is also its Achilles heel. This tight integration also creates problems. Any changes to the design of one these server components require changes in the other server components. As a result, each of the server components may not be optimal. That means that IBM Domino is a jack of all trades but not the best of anything. For many that is more than enough. However, for scalability, extensibility and future competitiveness this is bad. If IBM Domino is to be competitive, you need to reevaluate the approach on how applications are built on Domino, but at the same time understand how to utilize the best features found in Domino but not in other platforms.  

Majority of Notes applications have a one to one database relationship with each having different views,  forms and etc. Over time they all have different design approaches. Some developers break out the application to multiple databases some not. The design varies from application to application. A typical Domino application has all the business logic and data wrapped into a single database regardless of whether you are using XPages, traditional Web application, Notes Application, and whether we are using REST API with JavaScript or generating the Web application using XPages. 

We wanted to separate out the different server components and depending on our need replace those components will newer components that may utilize different technologies not found currently in Domino. This would allow us to Dockerize Domino easier in the future. By breaking up the server components, we can now look into replacing these components with other technologies that have better performance. For example, Nginx as a Web server has much higher performance than what Domino could ever be, the API server could be replaced with a form of Node/Loopback.io.

So in a typical iPhora installation there is a fix number of designated Domino databases each serving as an individual server component that makes up the iPhora server.  A base installation includes:
  • Web Server (Generates the UI interface) 
  • API server ( generates all the RESTFul APIs)
  • Database server (JSON-based data store)
  • File Database Manager (Manages all the files stored on the installation)
  • Application server (contains all the business logic)
  • Identity Server ( contains all the profiles and users info and works with the Domino Directory)
So regardless of the type of application or how many applications you have, you have the same number of databases, unless you exceed the limits of a Domino database which we have not encountered yet. So an application is no longer represented as a single database, but a collection of business logic, UI components, and APIs. It may seem to be a waste initially, but as you build more and more applications, you do not need to allocate more and more databases.  The individual databases collectively provides the framework for your application to draw from. Our typical application is now a series of MVC views, JavaScript/CSS files, additional APIs, if needed, and business logic files.  All applications must follow a strict design pattern for both front-end and back-end which also allow us to have different developers working on the front-end and the back-end.

Security is our top priority not shear speed like other platforms. Regardless of who you are, users only have read access to the Web server database and the API database when access any application. All the rest of the databases, users have no access include administrators. CRUD is a definite NO NO. Users regardless whether they are only readers or administrators should NEVER have direct access to the data. Strict access control of data is done through a gateway with low level administration only done using our Notes-based client application.

One of our biggest challenges was transforming the Notes document database into a JSON-based data store similarity found in MongoDB or CouchDB. We used CouchDB as our design model, but discovered that we needed our own approach. We will discuss this is part 3.










Comments

Exauce said…
Hello,

I liked your article that demonstrates how IBM Domino can be a very powerful and flexible platform to build MODERN applications. We need more people like you to promote Domino as a GREAT solution.

Just a question about your article: to me, it seems odd to put every apps data in a single NSF, for various reasons:

1. Performance: we know that Domino views are slow, hence, having more documents in an NSF does seem to be a winning strategy => the performances will decrease proportionnally with the number of deployed apps and stored data. Domino is very good at handling multiple small NSF, and less good at managing huge NSF.

2. Maintenance: back-up & restore of 1 huge file is more difficult that managing multiple small files.

3. Reliability: in case of db corruption, every apps and every customers will be impacted at the same time. It also prevents from restoring the file of ONE customer if needed, without impacting everyone else.

4. Limitation: from what I'm aware of, the total amount of stored data can't exceed 64Gb. This can't scale well, and anyway, the NSF will become slow and inefficient much before this limit.


This is only my opinion according to what I used to experience as a Domino developer, but of course, I might be wrong.

By the way, great article! Thank you.

Best regards,
David.

Note: I tried to register for a demo on your Phora Group website, but the submit button just emptied the form and nothing happened. I've tried twice. Did it send my request?

Your iPhora menu also points to an error 500, you should have a look: http://www.phoragroup.com/iphora.html

Popular posts from this blog

The iPhora Journey - Part 8 - Flow-based Programming

After my last post in this series -- way back in September 2022, several things happened that prevented any further installments. First came CollabSphere 2022 and then CollabSphere 2023, and organizing international conferences can easily consume all of one's spare time. Throughout this same time period, our product development efforts continued at full speed and are just now coming to fruition, which means it is finally time to continue our blog series. So let's get started... As developers, most of us create applications through the conscious act of programming, either procedural, as many of us old-timers grew up with, or object-oriented, which we grudgingly had to admit was better. This is true whether we are using Java, LotusScript, C++ or Rust on Domino. (By the way, does anyone remember Pascal? When I was in school, I remember being told it was the language of the future, but for some reason it didn't seem to survive past the MTV era).  But in the last decade, there a...

Creating Twitter Bootstrap Widgets - Part II - Let's Assemble

Creating Twitter Bootstrap Widgets - Part I - Anatomy of a Widget Creating Twitter Bootstrap Widgets - Part II - Let's Assemble Creating Twitter Bootstrap Widgets - Part IIIA - Using Dojo To Bring It Together This is two part of my five part series "Creating Twitter Bootstrap Widgets".   As I mentioned in part one of this series, Twitter Bootstrap widgets are built from a collection standard HTML elements, styled, and programmed to function as a single unit. The goal of this series is to teach you how to create a Bootstrap widget that utilizes the Bootstrap CSS and Dojo. The use of Dojo with Bootstrap is very limited with the exception of Kevin Armstrong who did an incredible job with his Dojo Bootstrap, http://dojobootstrap.com. Our example is a combo box that we are building to replace the standard Bootstrap combo box. In part one, we built a widget that looks like a combo box but did not have a drop down menu associated with it to allow the user to make a select...

The iPhora Journey - Part 3 - Creating an Integrated UI Framework

The iPhora Journey - Part 1 - Reimagining Domino The iPhora Journey - Part 2 - Domino, the Little Engine that Could The iPhora Journey - Part 3 - Creating an Integrated UI Framework There are many ways to create the user interface (UI) for a web application. The HTML page could be created on the server and then pushed out. It could be static with the data generated on the page by the server with JavaScript, providing a more dynamic experience, or the server could generate new HTML content to update portions of the web page. XPages or PHP are good examples of this. Another method is to have the web page partially generated by the server and have JavaScript build the rest of the HTML by pulling data from the server via an API. This is the approach used in the Single Page Application (SPA) model. In all cases, it is still dependent on the web server technology being using.  As mentioned previously in this blog, XPages is dependent on complete integration between form and document, whi...