Удаленные ссылки сеансового объекта без сохранения состояния могут кэшироваться в EJB3?

Запись скота создается при вызове save (и нет ошибки проверки). Таким образом, одним из вариантов является создание истории внутри этого условия if:

if @livestock.save

Другой вариант - использовать обратный вызов after_create в модели livestock, который создаст объект history сразу после создания livestock. Вы должны быть осторожны, потому что обратный вызов может быть вызван, когда он вам не нужен (т.е. при импорте данных).

Последний вариант - создать отдельный сервисный объект, который создаст livestock и все другие необходимые объекты. Это, вероятно, лучший подход, но он потребует более индивидуального кода.

Обновление

Также убедитесь, что вы переместили блок if / else за пределы блока respond_to:

if @livestock.save
  # create history object here

  respond_to do |format|
    format.html { redirect_to @livestock }
    flash[:success] = "Livestock was successfully created"
    format.json { render :show, status: :created, location: @livestock}
  end
else
  respond_to do |format|
    format.html { render :new }
    format.json { render json: @livestock.errors, status: :unprocessable_entity }
  end
end
5
задан Ken Liu 8 April 2009 в 13:41
поделиться

2 ответа

Да, они могут кэшироваться. Но я не знаю, определяется ли поведение, что произойдет, должен, Вы иметь кэшируемую ссылку и сервер перезагружаетесь под ним. Можно протестировать тот сценарий, но поведение может меняться в зависимости от контейнера.

2
ответ дан 15 December 2019 в 06:35
поделиться

Если сервер уходит, ваши ссылки становятся недействительными.

Что касается кэширования в течение нормального жизненного цикла, это должно быть хорошо. Я делал это годами, как в EJB2, так и в EJB3, и у меня никогда не было проблем. Обычно у меня просто есть статический класс LookupServices, который просто ищет дом или возвращает существующий, если он уже есть, и сохраняет его на карте.

1
ответ дан 15 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: