cesso estático ao gerente de entidades na primavera e arquitetura incom
pergunta rápida
Tenho aplicativo da web (wicket + spring + jpa) e estava pensando em um design de arquitetura bastante incomum. Por favor, verifique e dê seus comentário
Considera classe Wrapper:
@Service
public class Wrapper {
protected static EntityManager entityManager;
@PersistenceContext
private void injectEntityManager(EntityManager entityManager) {
Wrapper.entityManager = entityManager;
}
como você vê, agora o EntityManager foi injetado estaticamente.
gora, considere a entidade simples DogEntity
@Entity
public class DogEntity {
String name;
}
E para essa entidade criamos o wrapper Dog
public class Dog extends Wrapper {
private DogEntity entity;
private Dog(DogEntity entity) {
this.entity = entity;
}
public static Dog create(String name) {
entity = new DogEntity();
entity.name = name;
entityManager.persist(entity); // for a moment forget that this code is not in transaction
return new Dog(entity);
}
}
gora, no meu aplicativo da Web (no meu controlador), posso fazer algo assim:
saveButton = new Button("save") {
public void onSubmit() {
Dog dog = Dog.create(name);
// other code
}
o ponto de vista do código, essa arquitetura parece perfeita. Temos wrappers representando objetos de negócios. Todos eles têm estado persistente, não há serviços estúpidos no aplicativo chamado DogSaver com o método save (DogEntity) que apenas chama persistir no gerenciador de entidades. O código realmente tem muita legibilidade e existem outras vantagens, mas não vou entrar em detalhe
O que realmente é minha preocupação é este EntityManager estático. Não tenho conhecimento suficiente sobre os internos da Spring para saber se essa abordagem é adequada e segura. Existem situações em que as coisas podem ficar feias? Eu sei que o EntityManare é sem estado (de acordo com as especificações da JPA), sempre leva o contexto de persistência da transação, tornando-o estático não parece uma má idéia. Mas temo que possa estar mexendo em alguma cois
Alguma ideia