Расширения Firefox находятся на:
%USERPROFILE%\AppData\Roaming\Mozilla\Firefox\Profiles\{profile}.default\extensions
Каждое расширение будет иметь свой идентификатор в качестве имени файла вместе с расширением .xpi
.
Чтобы узнать, какой идентификатор принадлежит установленному добавочному имени, посетите about:support
и сверьтесь с таблицей под названием Extensions
.
Помните, что изменение расширения приведет к отключению Firefox при следующем запуске, поскольку оно больше не будет соответствовать его сигнатуре подлинности . Специальное издание Firefox, такое как Nightly, Developers или ESR, требуется, чтобы изменить это поведение .
Вам также необходимо убедиться, что внутри службы генерируется исключение RuntimeException для автоматического отката транзакции.
Итак, я бы сделал следующее:
def addParent(pName) {
println "add parent: ${pName}"
def theParent = new Parent(name:pName)
if(!theParent.save()){
throw new RuntimeException('unable to save parent')
}
return theParent
}
def addChild(cName,Parent theParent) {
println "add child: ${cName}"
def theChild = new Child(name:cName,parent:theParent)
theChild.save()
if(!child.save()){
throw new RuntimeException('unable to save child')
}
return theChild
}
, а затем поймал исключения в контроллере и отображать ошибки.
Другой способ - отключить автоматические транзакции и использовать Parent.withTransaction и вручную пометить транзакцию для отката, если есть ошибка проверки.
Я считаю, что это должно быть:
class AddRecordsService {
static transactional = true;// note *static* not boolean
}
В качестве альтернативы вы можете использовать свойство failOnError при сохранении объектов домена - если сохранение завершится неудачно из-за ошибки проверки, тогда будет сгенерировано исключение.
def addChild(cName,Parent theParent) {
println "add child: ${cName}"
def theChild = new Child(name:cName,parent:theParent)
theChild.save(failOnError:true)
return theChild
}
Это поведение также можно включить глобально с помощью установив для свойства grails.gorm.failOnError в grails-app / conf / Config.groovy значение true
. Дополнительные сведения см. в документации руководства пользователя для 'save': http://grails.org/doc /latest/ref/Domain%20Classes/save.html