Persistence Context

Pessoal, estou estudando JPA e me surgiu uma dúvida: O que é exatamente o Persistence Context?

Ao criar um EntityManager, ele já cria seu próprio contexto para gerenciar os objetos persistentes (estados managed e removed)?

//Aqui eu carrego uma PU de um arquivo persistence.xml
EntityManagerFactory factory = Persistence.createEntityManagerFactory("nomeDaPU"); 

//Ao criar esse entity manager, o contexto só irá aceitar instâncias das classes mapeadas na respectiva PU?
EntityManager manager = factory.createEntityManager();

manager.persist(new ObjetoPersistente());                                          //Aqui o objeto faz parte do contexto e será adicionado no banco

ObjetoPersistente obj = manager.find(ObjetoPersistente.class,1L);        //Aqui o objeto faz parte do contexto 
manager.remove(obj)                                                                       //Aqui o objeto continua no contexto, mas será removido do banco

Os objetos serão adicionados/removidos no banco quando houver uma sincronização, mas eles continuarão no contexto depois que forem adicionados/removidos?

Não sei se estou no caminho certo, alguém poderia me ajudar ai nessas dúvidas

O objeto só realmente adicionado no banco quando a transação finaliza e o flush acontece, até lá ele permanece no seu contexto.

Um objeto também só vira detached quando ele sai do contexto ex:

[code]public class MinhaClasseNaoEJB{

public void find(){
    Car car = daoStateless.findCar(1);
    // apartir de agora, o car já está detached
    // aqui dará lazyExcaption caso a lista não seja Eager ou fosse utilziado JoinFetch na consulta.
    // vai dar erro pelo fato do car estar detached.
    car.getDonos();
}

}[/code]

O EntityManager irá gerenciar todos os objetos com estado MANAGED ou REMOVED. Isso é, aqueles que estão no Persistence Context. Minha dúvida é: após o commit() ou flush() esses objetos continuarão na memória? O Persistence Context funciona como um cache??

Após o flush e o commit os objetos irão continuar na memória se eles tiverem alguma referência no Java para isso.

Um objeto que acabou de ser removido, ele será dettached.

Se você acabou de inserir e ainda está na transação, ele está attached.

Caso você tente persistir um objeto que acabou de excluir, você terá erro.