Crème
I'm developing a really simple client-server CRM system in Java, which I call Crème. The architecture is as follows:
Client
The client will be a command-line program, and will be called creme
. The
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
or
$ 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.
Server(s)
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.
Microprofile server
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.
Data storage
The CRM data will be saved in PostgreSQL, using well-normalized tables. At first glance, this system only needs three tables:
- Customers
- Products
- Customer-product relationship
However, I can expect more tables as the project evolves
Build
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 serverscreme-cli
: the command-line interface clientcreme-server-common
: the shared code for all serverscreme-server-java-ee
: the Java EE servercreme-server-spring-boot
: the Spring Boot servercreme-server-microprofile
: the Microprofile server