Caucho Resin is Officially Certified Against the Java EE 6 Web Profile
Caucho Resin has recently been certified a compliant implementation of the EE 6 Web Profile, starting with version 4.0.17. The company had already revealed their intention to become certified, and the implementation details are now described in a free PDF whitepaper.
The general philosophy is to develop custom implementations for core APIs, while re-using already certified modules for the rest of the required technologies. So Resin has developed its own CDI implementation (called CanDI), which is at the core of the server. They also have their own custom Servlet 3.0 and EJB 3.1 Lite implementations. Other components (JSF2/Facelets, JPA and Bean Validation) are taken from Oracle's GlassFish reference implementation.
CanDI is an integral part of the server since it is used by Resin itself. Caucho was an active participant in the respective specification (JSR-299 Contexts and Dependency Injection) so it is no surprise that they offer their own implementation in the form of CanDI. This is the third implementation of JSR-299 after the one from Apache (OpenWebBeans) and the reference one (Weld) from RedHat's JBoss Division, on which Seam 3 is built.
Caucho has decided to add some additional features that are not part of the Web Profile to both CanDI and EJB Lite:
Note Profiles do not stop a vendor from adding APIs and features as they see fit. As we will discuss shortly, we have chosen to add a very small number of Java EE APIs and features on top of the Web Profile. Specifically, we see value in adding support for scheduling, asynchronous processing, messaging, message driven beans and Hessian based remoting.
Therefore CanDI provides some extra extensions such as @TransactionScoped/@ThreadScoped in addition to the standard @ApplicationScoped, @SessionScoped, @RequestScoped and @ConversationScoped. Explicit support is offered for Spring and Seam 3 web applications.
The implementation of EJB 3.1 Lite also comes with extra features apart from those required by the Web Profile. Resin includes support for EJB scheduling (@Schedule, @Timeout), asynchronous processing (@Asynchronous), message driven beans (@MessageDriven) and Hessian based remoting (@Remote). Hessian is a custom binary communication protocol (based on HTTP) focused on network performance, developed by Caucho as well.
Caucho will continue to support the EE 6 Web Profile since they can for the first time offer a lightweight Application Server that is also standards compliant. This was not possible in the previous versions of Java EE, Caucho have argued, since a lightweight server and full compliance often contradicted each other:
The choices were really split between either creating a lightweight Java application server or aiming for full standards compliance. Resin has historically chosen the lightweight implementation route along the same lines as Tomcat and Jetty.