- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在我的应用程序中解析 xml 文件,我正在为如何设计它而苦苦挣扎。
我允许上传我们的 xml 模式的“不完整”树,这意味着只要树的结构正确,它就可以是根节点的任何子子节点。大多数节点都有仅包含一些文本(属性)的子节点,但我没有在我的小型 xml 结构示例中包含任何这些内容。
<root>
<childFoo>
<childBar>
</childBar>
</childFoo>
</root>
这些节点中的任何一个都是允许的。现在,我设计了一个 XmlInputService,它具有解析各种节点的方法。而我只是在 Controller 中检测它是什么类型的节点,并相应地将其交给服务方法。
因此,为了让我的代码保持干爽和美观,我在更高级别重复使用了我的方法。如果我将 Root 类型的文档传递给服务,它将解析 root 中直接属于 root 的任何字段,并将子节点(代表我的域类结构中的子节点)传递给适当的解析方法服务。
现在,如果用户上传包含违反约束的 xml,即具有非唯一名称等的元素,我显然想回滚。
假设我调用 parseRoot() 并向下调用 parseChildFoo()。
在那里我为那里的每个 Bar child 调用 parseChildBar()。如果 Bar 子项之一由于约束或其他原因无法验证,我显然希望将事务回滚一直级联到 parseFoo()。
我将如何实现这一目标?
最佳答案
如果您的 grails 服务具有负责解析的方法,您应该抛出一个从您的服务扩展 java.lang.RuntimeException 的异常,以便可以通知用户他们需要修改他们的 xml。因此,您的 Controller 将捕获该异常并向用户提供有意义的错误消息
只要服务方法抛出运行时异常,Grails/Spring 就会自动回滚任何数据库修改。
与 Victor 的回答相比,我所描述的方法的优点是您不必编写任何代码来让事务在失败时回滚。 Grails 会为你做这件事。 IMO,在服务方法中使用 withTransaction
闭包是没有意义的。
关于database - 具有链式调用的 Grails 服务类的事务行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4992452/
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
我们正在尝试使用 https://grails.org/plugin/jms用于 jms 集成。但我们无法解决它。 环顾四周,我能够验证它是否存在于这个 repo 中: http://repo.gra
我有许多集成测试在grails 3中失败(而在grails 2中通过),因为它无法解析导入: grails.test.MockUtils grails.test.Grails模拟 我找不到有关应如何迁
有没有办法在 Grails 站点上发生 Grails 错误时向自己发送详细信息? 设置它的最佳方法是什么?在一个地方? (试图保持干燥) 我想包括产生错误的 URL。 最佳答案 . 如果您打算捕获项目
我有一个 grails 应用程序,其中包含一些被序列化为 JSON 的域对象。在另一个 java/groovy 项目中,我想使用这些域对象。如果我发布一个插件,看起来只有其他 grails 应用程序可
我正在尝试为 Grails 编写一个插件,该插件将根据我们在遗留数据库中设计的特殊 View 自动生成我的域类。我基本上只是想节省一些时间手动编写使域类工作所需的所有映射内容。 我是否可以从自定义 A
我正在尝试编写一个可以在多个 Grails 应用程序中重用的插件。该插件基本上应该是 spring security core 的包装器和 ldap 插件。 这意味着它应该包含: 用户/角色的域类 S
我有一个应用程序,我在其中使用 Spring Security 和 grails 旋律。我计划在生产环境中运行 grails melody,但不希望访问者访问它。我应该如何做到这一点?我尝试在 gra
我只是继承了一个现有的应用程序,而我注意到的第一件事是我必须在每个“grails run-app”之前进行“grails clean”操作,否则会出错。创建该项目的人说,他们还有其他几个具有类似设置的
我有一个自定义 toString我的枚举中的方法: enum TaxRate implements Serializable { RATE23(23.0), ... priva
我正在创建一个 Grails 插件作为复杂产品的包装器。该产品对其他产品(如 hibernate)有很多依赖性。问题是,grails 有一些相同的依赖项,但版本不同。 例如。 Grails -> 休眠
当我掉进 grails 服务的兔子洞时,我目前正在将业务逻辑从 Controller 方法转移到服务。我的服务中有以下方法: Job closeJobOpportunity(Job op, Emplo
我只收到默认验证器消息。我究竟做错了什么? class Questao { static hasMany = [alternativas:Alternativa] static constraints
Closed. This question needs to be more focused 。它目前不接受答案。 想改善这个问题吗?更新问题,使其仅通过 editing this post 关注一个
特定版本的 Grails 支持多长时间?一般的 VMWare 支持策略似乎是支持当前版本和一个版本。我无法找到任何关于支持多长时间版本的 Grails 特定信息,通用 VMWare 策略是否适用? 最
我有一个通过 grails 交互模式运行的 grails 应用程序。此应用程序包含服务、tagLibs、gsps 等,但最重要的是它包含 src/groovy 文件夹中的 groovy 文件。 这些
LinkedIn 的人们一直在以一种有趣的方式使用 Play 来处理需要由许多不同组件组成的页面:http://engineering.linkedin.com/play/composable-and
我在 Grails 应用程序中使用 Servlet 3.0 异步渲染。我收到以下错误。 | Error 2014-04-29 11:10:24,125 [Actor Thread 28] ERROR
我看了Controller.groovy源代码,看起来 CRUD 操作不是事务性的(至少是明确的)。 如果我是对的,这是否意味着不应该在生产中按原样使用动态脚手架?有没有办法使它具有事务性(即我可以修
我如何基本上对字符串数据类型字段执行唯一约束。 class User{ String username String Email static hasMany = [roles:Roles
我是一名优秀的程序员,十分优秀!