Apache Wicket, OpenJPA и Spring / Roo
-
29-09-2019 - |
Вопрос
Я настроил приложение Spring ROO, установить постоянство в OpenJPA и создал некоторые объекты. Затем я заменил весну MVC с Apache Wicket. Вещи, кажется, работают нормально, и я успешно продемонстрировал список объектов клиентов.
Рядом был представление редактирования для клиента. На данный момент я сделал форму калитки, которая использует объект OpenJPA непосредственно как модель формы, и поэтому мне пришлось сделать класс Entity Allse Serializable.
Теперь я не уверен, как правильно реализовать постоянство OpenJPA, что у меня сейчас есть:
@Override
protected void onSubmit() {
try {
if (customer.getId()!=null) {
customer.merge();
}
else {
customer.persist();
}
}
catch (Exception e) {
throw new Error(e);
}
super.onSubmit();
}
Это работает, но только один раз за объект клиента. Как-то. То есть я представляю свою форму один раз, и это работает как с новым клиентом (.Persist ()) и существующим клиентом (.merge ()). Тем не менее, я отправляю форму снова для одного и того же клиента, который я получаю эту ошибку (добавил несколько свободных разрядов здесь):
<openjpa-2.0.0-r422266:935683 nonfatal store error>
org.apache.openjpa.persistence.OptimisticLockException:
An optimistic lock violation was detected when flushing object instance "no.magge.iumb.domain.crm.PrivateCustomer-379" to the data store.
This indicates that the object was concurrently modified in another transaction.
Мой вопрос в том, какой правильный способ сохраняться с OpenJPA и почему я получаю эту ошибку?
WikeT-Wise: Должен ли я создать отдельный калитку Imodel с съемной моделью клиента и может это стать причиной того, что у меня есть эти проблемы?
Спасибо кучу за любой совет!
Решение
Сделайте сам одолжение и отделите свои слои приложений. Код с видом не должен получить доступ к базе данных.
Создайте сервисный слой и / или слой DAO, агрегат тестируйте код этих слоев, чтобы увидеть, что они работают, а затем вводят свой объект DAO или SERVICE в компонент Wicket. (Я бы порекомендовал вам использовать весну для этого, но вы также можете сделать это вручную)
С вашим сценарием настолько много разных вещей, которые могут потерпеть неудачу в одном месте, и почти невозможно отделить их.
Вот некоторые указатели:
- Дао (Узоры J2EE)
- Бизнес-логика (Википедия)
- Калитка / весна / гибернация конфигурация (Это очень похоже на JPA)
- JPA использует весну