 ------
 Myfaces CODI
 ------

Description

  MyFaces CODI is your best friend for CDI based projects.

  The Apache MyFaces Extensions CDI project (aka CODI) hosts portable extensions for Contexts
  and Dependency Injection (CDI - JSR 299) for the Java-Platform (SE and EE). CODI is a toolbox
  for your CDI application (it provides advanced and convenient features e.g. for JSF and Bean-Validation).
  Like CDI itself CODI is focused on type-safety. It is a modularized and extensible framework.
  So it's easy to choose the needed parts to facilitate the daily work in your project.

  The main focus is to provide superior tools which will support you on solving your daily needs of software
  development with CDI, JSF, BV and JPA. However, you will also find modules which are independent of JSF as
  well as modules which improve the compatibility with other MyFaces frameworks like MyFaces ExtVal. Maybe
  the most important feature of MyFaces CODI is that it allows you to build a concise and efficient application-architecture.
