Gostaria de saber se estou certo no meu entendimento
@Dispose é executado quando o objeto é passivado e @PreDestroy quando é destruido ?
Gostaria de saber se estou certo no meu entendimento
@Dispose é executado quando o objeto é passivado e @PreDestroy quando é destruido ?
Opa fala aí Alexandre, blz?
Então o @Dispose é utilizado somente para (ensinar ao CDI como)  descartar objetos que foram produzidos com @Produces. 
Já o @PreDestroy é um callback do ciclo de vida de um bean gerenciado pelo CDI (ou seja todos os beans gerenciados por ele vão chamar esse callback).
Espero ter ajudado!
Eu não entendi qual a necessidade de utilizar ambos como foi ensinado no curso de CDI. Lá há uma classe com algo mais ou menos assim
public void doSomething(@Dispose EntityManager em){
em.close();
}
@PreDestroy
public void doAnotherthing(){
em.close()
}Por qual razão eu preciso de ambos? Não bastaria um ou outro ?
Fala aí Alexandre
Então no curso estamos usando da seguinte maneira:
@ApplicationScoped
public class JPAFactory {
    private EntityManagerFactory emf = Persistence
            .createEntityManagerFactory("algumaPU");
    @Produces
    @RequestScoped
    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }
    public void close(@Disposes EntityManager em) {
        if (em.isOpen()) {
            em.close();
        }
    }
    @PreDestroy
    public void preDestroy(){
        if (emf.isOpen()) {
            emf.close();
        }
    }
}Temos um atributo do tipo EntityManagerFactory (uma fabrica de conexões com o banco de dados) que estamos inicializando(abrindo) ela com alguma PersistenceUnit. 
Estamos produzindo o EntityManager (que representa uma conexão com o banco de dados) no método getEntityManager com a anotação @Produces.
Depois estamos fechando o EntityManager (conexão com banco) através do método close e usando o @Disposes
Por fim estamos fechando o EntityManagerFactory (a fabrica)  no @PreDestroy.
Exatamente como tinha mencionado anteriormente o @Dispose serve somente para descartar objetos que foram produzidos com @Produces.
Já a anotação @PreDestroy é um callback do ciclo de vida do seu objeto.
Neste exemplo estamos pedindo para o CDI criar nosso objeto JPAFactory com o escopo de aplicação e o CDI viu que sempre que alguém pedir injetado um EntityManager ele tem que invocar o método getEntityManager dessa classe JPAFactory. 
Quando algum objeto que pediu um EntityManager não precisar mais do EntityManger, o CDI irá invocar o método close da classe JPAFactory para fechar a conexão.
Por fim quando paramos nosso servidor, precisamos fechar a fabrica de conexões e aí entra o @PreDestroy da classe JPAFactory.
Muito obrigado Fernando.