But what about the data?

In the Domino world we had a nice, easy to use, built in noSQL datastore in the NSF alongside your application, or you could easily code your application to use data from a different NSF if you wanted to separate the datastore from the frontend. Either way it was easy to use and easy to access.

So how do you go about deciding on a data store for a new development track? My first suggestion is to look at any other datastores that you are working with in your company. If you have a team of DBAs that all use Oracle DB then maybe that is a good choice for your relational data, if you have DBAs that talk Microsoft SQL then maybe your decision should be in that direction. Need an noSQL solution then options include Mongo, CouchDB etc.

One of the recommendations of the microservice approach is that each microservice has its own datastore and that the datastore is appropriate for that particular microservice. What this means in the real world is that you may end up with some of your microservices using relational SQL and some using noSQL document stores. It all depends on the microservice. Having said that you should still try to pick a standard so that when you know you need a SQL datastore you will use the same SQL datastore.

We have a MSSQL DBA on staff and a number of MSSQL servers, so we decided that our main SQL datastore we will use Azure MSSQL. For noSQL document stores we are looking at Azure DocumentDB and for file/blog storage we are looking at Azure FileStorage. Yes that is a lot of Azure and there are reasons behind that which I’ll discuss in later posts.

Tagged with: , ,
Posted in Domino To Spring, Uncategorized

Deciding on a frontend

Building web apps means that you need a front end that the users will interact with. With Domino the answer was XPages ( or for the hardcore old school developers you could use forms and views and pages with passthru html ) but when moving to a new development stack XPages is no longer an option so what can you use…

There are two schools of thought around fronted development. There is the client side rendering group and then there is the server-side rendering group. For client side rendering the application is mostly written in JavaScript which, when running in the browser client, will manage what is shown of screen and manage the data transfer from the front end to the backend via REST data calls. Server side rendering is very similar to how XPages worked with the server building the webpage from whatever templating system you are using and then sending that to the browser to display.

So before you decide on the front end technology you do need to decide on whether you want to do server-side rendering or client side rendering. Server side rendering can result in more security for your data as the backend rest calls are not exposed to the client in any way, the client only receives the data after it has been retrieved and processed by the server, however for a very busy application your server needs to be powerful enough to do all that processing so it can return the rendered ui to the user in a timely fashion.

For client side rendering all the processing is done by the client browser application. It just gets a raw stream of data from a REST endpoint and then renders that for display. The server no longer has to spend processor time on rendering of UI and data, however this does mean that the client needs to know about these REST endpoints so they have to be exposed to the outside world so there are security considerations to be made.

On the client rendering side you will find things like pure JavaScript, Angular, React, Polymer and a whole host of other different frameworks. One trap that you could fall in to is jumping from one framework to another because everybody else seems to be switching from React to Vue so you should be doing it also. This can cause delays in your project as your front end developers learn new technology so it is something to keep on your radar.

Server side rendering also has a number of frameworks to select from but they can be quickly narrowed down depending on what you selected as your main backend, if you are using .Net for the backend then you are probably going to select ASP.net for the UI. If you picked Java then you might use JSP or Apache Velocity, Apache FreeMarker, Thymeleaf, JTwig, to name just a small few. Other languages have their own templating engines that they use.

For our future development we decided on using Server Side Rendering with the Thymeleaf templating engine. As we are using Spring Boot for the backend Thymeleaf makes an excellent choice. There is a Thymeleaf starter project for Spring Boot which will pull in all the dependencies you need automatically and Thymeleaf itself has some specific Spring integrations also.

If you, however, are heading down the Spring Boot + Angular path then make sure you also check out JHipster. This is a code generator that can help you get up and running with very quickly by answering a few questions and then importing the generated code ( for frontend and backend ) in to your IDE.

Tagged with: , , , , , , , , ,
Posted in Domino To Spring, Uncategorized

What language should I move to?

I really thought that this would be a simple question. The answer is obviously Java. We have Java skills from using XPages so it just makes sense to answer this question with Java…

Except then you look at the java world and realize that there are different flavors of Java, you have standard plain Java, you have JavaEE and then there is the Spring ecosystem. You might even think about Scala, Kotlin or even Groovy with Grails as java based frameworks to pick from.

However, before you even answer the question another one will pop up and that is what sort of applications are you going to be building? Will you be building big monolithic applications where all the code for the entire application is in one big code-base or are you going to look at the much more popular microservice approach to building applications? This is where you have a bunch of small applications that each do a unique task or function.

The microservice approach seems to be the most recommended method of writing new applications and may also be a good solution if you are going to convert an old Domino application as you probably know the old application inside out and can easily break it down in to a set of microservices.

One big advantage of selecting the microservice approach is that you are no longer tied to any particular language for your backend code, sure you might write most of your services in Java but if you wanted to you could also write some in .Net, C++, GoLang, Python, Ruby etc. etc. Each microservice is an independent entity and they don’t care what language any other service it talks to has been written in as long as they can both speak to each other via REST. This opens up a lot more doors for your development team…

For our development we are going to be using the Spring Boot framework for the majority of our backend services. The Spring Boot framework makes it very easy to create REST services and can be packaged up in to self-contained jars.

Of course that is just the backend…

Tagged with: , ,
Posted in Domino To Spring, None

Replacing The Pillars Of Domino

As I mentioned in the previous post Domino provides many capabilities out of the box. When moving to a different development stack you need to think about the different things that Domino provides and then replace them with similar services. I’ve broken down the main capabilities in Domino to a number of areas…

Code Language, Authentication/Authorization, Build Systems, Deployment Servers, Data Storage.

Before you can start thinking of replacing Domino you will need to come up with replacements for each of these. Some may be simple and have an obvious answer that fits your particular environment, You may have a bunch of people who know Java so it makes more sense to look down the Java path, you may have a DBA team so your data store would be best using whatever technology they are used to, and you may hit some difficult decisions like where do you deploy your new code?

There are a lot of decisions and there are a lot of different answers to each. In subsequent blog posts I will share the answers that I came up with along with some of the answers I rejected.

Tagged with: ,
Posted in Domino To Spring, None
Archives