 ~~ Licensed to the Apache Software Foundation (ASF) under one
 ~~ or more contributor license agreements.  See the NOTICE file
 ~~ distributed with this work for additional information
 ~~ regarding copyright ownership.  The ASF licenses this file
 ~~ to you under the Apache License, Version 2.0 (the
 ~~ "License"); you may not use this file except in compliance
 ~~ with the License.  You may obtain a copy of the License at
 ~~
 ~~   http://www.apache.org/licenses/LICENSE-2.0
 ~~
 ~~ Unless required by applicable law or agreed to in writing,
 ~~ software distributed under the License is distributed on an
 ~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ~~ KIND, either express or implied.  See the License for the
 ~~ specific language governing permissions and limitations
 ~~ under the License.

 ------
 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.
