blob: 54ba48e86837879658b394d2d238cd835c33c838 [file] [log] [blame] [view]
Title: OpenWebBeans Core
# OpenWebBeans Core
**Hint:** The actual jar is called openwebbeans-impl and is the implementation of OpenWebBeans core.
## What does 'core' mean?
OpenWebBeans follows the design principle loose coupling and high cohesion.
Everything needed to actually be a working CDI-container makes up
OpenWebBeans core.
All the logical parts in core have high cohesion with each other
and will age in approximately the same rate.
To conclude impl is the CDI-container as such and nothing more nothing less.
It does not contain any other JavaEE specific dependencies beside the bare minimum:
- atinject-api.jar
- cdi-api.jar
- interceptors-api jar
- openwebbeans-spi.jar, our SPI for pluggable extending the core.
- a bytecode engineering library (javassist for 1.0.x and 1.1.x, xbean-asm for 1.2.x and above)
- xbean-finder for classpath scanning
openwebbeans-core does **not** contain any JavaEE dependencies beyond that.
All additional features may portably be added via our SPI (Service Provider Interface).
This way core is completely unaffected by the release cycles of other
frameworks and Java specifications and the coupling is not only low,
it's virtually nonexistent.
## Why not a monolithic approach?
Imagine if the power outlets in your house was tightly coupled to your various devices.
The newest and coolest smartphone or what have you would probably not be as tempting
if it required you hiring an electrician to rewire your entire house.
To make it more ridiculous the new wiring would be non compatible with your TV
because it's two years old.
So if OpenWebBeans would have been built in a monolithic way with tight coupling and low cohesion,
the newest version would have to drop support for everything but the newest frameworks
or be a hot mess with version checks and endless if - else cases between all the framework
combinations. Naturally it would only get worse and worse over time.
Glad we avoided all that and have the exact opposite result, the latest
OpenWebBeans still support JSF 2.0, EL-1.0, JSP, Tomcat 7 and so on.
And you can just plug support for your own framework.
## Introduction to our plugin system
The end users has to combine the core with their own mix of plugins and can include
exactly what they want (including custom plugins) yet nothing they don't need.
The committers behind OpenWebBeans also have a much easier maintenance process
and can focus on features, speed and robustness of the dependency injection core
rather then the compatibility matrix.
This approach also eases the integration into various JavaEE Containers.