Quando usar?

Olá amigos!!!.
Gostaria de saber quando usar

@PersistenceUnit( unitName="PU" )
  private EntityManagerFactory emf ;

ou quando usar

@PersistenceContext( unitName="PU" )
   private EntityManagerFactory emf ;

ou ainda

 private EntityManagerFactory emf = Persistence.createEntityManagerFactory( "PU" );

gostaria de saber a diferença , e quando usar uma ou outra?
Desde ja Agradeço