Java EE Module System

In this blog post I will explain a little bit about the technology that I used to create a pure Java EE 7 module system based on a Wildfly 10 application server.

In the image above you can see the details.

Design Goals

What are the design goals of the system?

Java based

Standard based

Based on proven fast technologies

Hot deployment should be possible

Extendable (a lot of libraries are easily available via Maven)

Good tool support e.g. Maven, Eclipse,

Java EE

Java EE is the standard for enterprise applications. It is used for 9% of the web projects and Java is the number one language according to multiple indexes like TIOBE and on github on second place.

EJB

The main component of my module system are EJB that communicate via RMI with each other. This is a very old technique which is available since EJB 1.0 that is now over 20 years old. The funny thing is that EJB is called a heavy weight technology when exposing an RMI interface. In comparision to technologies like node.js is called lightweight when exposing a HTTP interface. In my opinion both interfaces are quite similair and the big difference between HTTP and RMI is, that the HTTP protocol is a lot more human readable than RMI.

Hot reload

Every application server has the possibility to load an unload web applications. This behavior is used in the module system. So it is quite easy to reload modules without extensions like DCEVM or JRebel.