https://blogs.oracle.com/nishigaya/entry/javaee6_understanding_cdi_part_1