精通 Grails: 创建自定义插件
2009-10-26 00:00:00 来源:WEB开发网注意集成测试中的 def transactional = false 这一行。如果省略这一行,您将收到令人讨厌的错误消息,如清单 5 所示。
清单 5. 测试没有设置 def transactional = false 时收到的错误消息Error running integration tests: java.lang.RuntimeException:
There is no test TransactionManager defined
and integration test ${test.name} does not set transactional = false
Grails 试图在数据库事务中包含所有测试。在普通的 Grails 应用程序中,这不成问题。但是您在一个插件中而不是在应用程序中,因此您不能假定存在这样一个数据库。您可以安装 Hibernate 插件,或者按照错误消息的指示在集成测试中设置 def transactional = false。
输入 grails test-app 并验证您的测试是否通过。
我还要实现一个 URL 缩短服务,以便这个插件的用户可以选择其中一个服务。
创建 IsGd 类
这个 Is.Gd(读作 is good)服务号称能够提供比 TinyUrl.com 更短的域名和编码 URL。访问 http://is.gd 试验这个 Web 界面。
为了再次表示我这种长短反差的偏好,我将借此机会向您展示我在 TinyUrl.groovy 中使用过的那个两行方法(参见 清单 3)的更长实现。如果服务失败,这个实现将提供更多信息以便做出相应反应。在 src/groovy/org/grails/shortenurl 中创建 IsGd.groovy,如清单 6 所示。
清单 6. IsGd 实用程序类package org.grails.shortenurl
class IsGd{
static String shorten(String longUrl){
def addr = "http://is.gd/api.php?longurl=${longUrl}"
def url = addr.toURL()
def urlConnection = url.openConnection()
if(urlConnection.responseCode == 200){
return urlConnection.content.text
}else{
return "An error occurred: ${addr}\n" +
"${urlConnection.responseCode} : ${urlConnection.responseMessage}"
}
}
}
- ››创建SQL2005自动备份,定期删除的维护计划
- ››创建动态表单 javascript
- ››精通Photoshop之通道详解
- ››创建基于PPTP的站点到站点VPN连接:ISA2006系列之...
- ››创建基于L2TP的站点到站点的VPN连接:ISA2006系列...
- ››创建一个Twisted Reactor TCP服务器
- ››创建Windows Mobile上兼容性好的UI 程序
- ››创建android的Service
- ››创建远古部落环境与原住民角色
- ››创建并扩展Apache Wicket Web应用
- ››创建不在任务条中显示窗口按钮的应用
- ››创建 Android 文件系统(Root file system)
更多精彩
赞助商链接