класс, в отличие от стандартного сеанса, который с состоянием.

ый вопрос:

У меня есть веб-приложение (wicket + spring + jpa) и я думал о довольно необычном архитектурном дизайне. Пожалуйста, проверьте это и дайте свои комментарии.

Рассмотрим класс Wrapper:

@Service
public class Wrapper {
    protected static EntityManager entityManager;

    @PersistenceContext
    private void injectEntityManager(EntityManager entityManager) {
        Wrapper.entityManager = entityManager;
    }

как вы видите, теперь EntityManager вводится статически.

Теперь рассмотрим простую сущность DogEntity

@Entity
public class DogEntity {
   String name;
}

И для этой сущности мы создаем упаковщик собак

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);
  }
}

Теперь в моем веб-приложении (в моем контроллере) я могу сделать что-то вроде этого:

saveButton = new Button("save") {

public void onSubmit() {
   Dog dog = Dog.create(name);
   // other code 
}

С точки зрения кода эта архитектура выглядит идеально. У нас есть обертки, представляющие бизнес-объекты. Все они имеют постоянное состояние, в приложении нет глупых сервисов, называемых DogSaver с методом save (DogEntity), которые вызывают только персистентность в диспетчере сущностей. Код действительно получает много читабельности и имеет некоторые другие преимущества, но я не буду вдаваться в подробности.

Что меня действительно беспокоит, так это статический EntityManager. У меня недостаточно знаний о внутренностях Spring, чтобы знать, является ли этот подход правильным и безопасным. Существуют ли ситуации, когда вещи становятся ужасными? Я знаю, что EntityManare не имеет состояния (в соответствии со спецификацией JPA), он всегда берет постоянный контекст из транзакции, поэтому его статичность не кажется плохой идеей. Но я боюсь, что могу что-то испортить.

есть идеи?

Ответы на вопрос(2)

Ваш ответ на вопрос