Извините, что обновил вопрос, потому что его довольно тривиальный вопрос, и я должен был обратить внимание на актуальные проблемы здесь.Grails/Groovy: пользовательские транзакционные исключения
Думая об этом, единственном преимуществе будет в журналах или ради TRACIBILITY, имеющей такие пользовательских исключения было бы, вероятно, использование ..
Я поставил этот демонстрационный проект вместе Грааль: https://github.com/vahidhedayati/test-transactions который был перенесен из примера Java, найденного здесь: https://today.java.net/pub/a/today/2006/08/31/jotm-transactions-in-spring-and-hibernate.html
Мне все еще нужно работать над этим, но на данный момент я пытаюсь найти лучший подход/практику, так как я не думаю, что содержание исключительных исключений является таким же чистым, как и должен быть (немного больше, чем Java, выглядящий чем groovy)
package com.example.exception
class FlightNotFoundException extends TravelException {
public FlightNotFoundException(String message) {
super(message)
}
public FlightNotFoundException(Exception e) {
super(e.getMessage())
}
}
Это даже правильный способ сделать класс Exception в заводной?
class FlightManagerService {
@Transactional
def reserveFlight(BookingRequest bookingRequest) throws FlightNotFoundException {
...
}
привыкает в этой службе, и каждый из этих сервисов бросает пользовательские исключения, как я сказал, что я могу видеть, единственное преимущество будет позже, чтобы проследить, которые или что было исключение .. но все это действительно необходимо, я имею в виду, что простой журнал.info/error сообщает о том, какая услуга потерпела неудачу или выбрасывает исключение в любом случае.
так что, вместо того, чтобы все это попробовать, я думаю, что мне действительно нужно объезжать, но все равно стоит очистить найти лучшую практику. Вспоминая Grails trainsaction видео я действительно удалить все попробовать уловы и, возможно, заменить метательное действие служебного:
new domainClass(name: "something", value: 'another').save()
throw new RuntimeException("Issue saving domainClass")
Любого вклад оценил
Изменены добавить
После conversating с Джошуа
@Transactional
def someThing() {
domainInstance.save(failOnError: true, flush: true)
}
должно хватить без всякой причудливой работы .. (будет делать некоторые эксперименты, когда и обновить проект git)
Эй Джошуа, спасибо .. Его, вероятно, где я просто имитировал пример Java и отсюда вопрос наилучшей практики. Что касается услуги, выполняющей броски, то в порядке? возможно, я должен добавить к этому тоже[email protected] (Transactional (rollbackFor = FlightNotFoundException.class) – Vahid
По умолчанию любая транзакция, созданная службой в Grails, будет отмечать транзакцию для отката (при условии, что есть транзакция и метод службы вызывается через транзакционно завернутый прокси), поэтому вы –
Не верно - только исключенные исключения исключают транзакции по умолчанию. Вы можете добавить свойства в аннотацию @Transactional, чтобы указать, какие проверенные исключения должны запускать откат и/или непроверенные исключения, которые не должны. потому что Groovy играет трюки с проверенными исключениями, чтобы облегчить нашу жизнь, не означает, что не-Groovy фреймворки, такие как Spring, могут или будут играть вместе –