I'm developing a really simple client-server CRM system in Java, which I call Crème. The architecture is as follows:
The client will be a command-line program, and will be called
main idea is that it will have subcommands (like
git) which will let the user
manage the products and customers, in a REST-like fashion. For example:
$ creme products list
$ creme customers show 000001
There is a possibility that I may create a GUI client in the future, but that would be a nice-to-have after everything else is done.
My intention is to write three different servers, all in Java. These three servers will be fully compatible; this means that the client will be able to talk to any of them, and all of them will handle data storage in exactly the same way.
Classic Java EE server
The first server will be written in classic Java EE fashion: it will use EJBs to expose the functionality to the client, and will talk to the DB using JPA. This one will need to be deployed to a full application server, like Wildfly or Glassfish.
Spring Boot server
The second server will be written using Spring Boot, and will be launched as a standalone application. The intention here is to be able to use this second server in microservice deployments.
The third server will be written using the Eclipse Microprofile, either with a compatible framework (probably Thorntail), or by using something really similar, like Micronaut. The intention of this server is to be able to scale up really well in Kubernetes (et. al.) environments.
The CRM data will be saved in PostgreSQL, using well-normalized tables. At first glance, this system only needs three tables:
- Customer-product relationship
However, I can expect more tables as the project evolves
The project will use Maven as the build tool. I expect to create the following artifacts:
creme-common: the code that is shared between client and servers
creme-cli: the command-line interface client
creme-server-common: the shared code for all servers
creme-server-java-ee: the Java EE server
creme-server-spring-boot: the Spring Boot server
creme-server-microprofile: the Microprofile server