<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    shinewang

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      53 隨筆 :: 0 文章 :: 200 評論 :: 0 Trackbacks

    Grails 1.1 Beta 2發布了,Groovy 1.6 finalGrails 1.1 final也越來越近,不過已經不是很感興趣了。雖然對于Java開發者來說,相比RailsGrails更容易上手,但它并不成熟的。在論證 Grails的成熟度時,Graema說:你會把SpringHibernate看作風險嗎?” SpringHibernate確實不是風險,但GrailsSpringHibernate的包裝卻是一個極大風險,在種種危險中,最主要的一點是我們已經對底層框架的抽象太成功了,以至于有時會出現問題。具體可以看看這個例子。使用Grails,不如使用JRuby On Rails或者Play!

    ?

    不管怎么樣下面介紹一下1.1版本的新特性:

    ?

    GORM

    更好的GORM事件

    之前, GORM 只支持 beforeInsert, beforeUpdate beforeDelete 事件, 現增加了afterInsert, afterUpdate afterDelete 來完成圖片操作

    ?

    基本類型集的持久化

    GORM 現在支持基本類型比如String, Integer 等使用一個連接表的持久化。

    class ?Person?{?? ?

    static ?hasMany?=?[nicknames:String]?

    }??

    ?

    class Person {

    ?

    ?? static hasMany = [nicknames:String]

    ?

    }

    ?

    對象的只讀訪問

    現在,持久化實例對象可以使用read 方法以只讀狀態被加載:

    def book = Book.read(1)

    ???????????????????????

    默認的排列順序

    現在,關聯可以使用一個類級別聲明的默認的排列順序來排序:

    class Book {

    ? String title

    ? static mapping = {

    ???? sort "title"

    ? }

    }

    或在關聯級別上:

    class Author {

    ??? static hasMany = [books:Book]

    ??? static mapping = {

    ????????????? books sort:"title"

    ??? }

    }

    ?

    批處理

    現在GORM 支持使用ORM DSL 在類級別上配置批處理batch fetching ( 延遲加載的優化):

    class Book {

    ? String title

    ? static mapping = {

    ???? batchSize 15

    ? }

    }

    或在關聯級別上:

    class Author {

    ??? static hasMany = [books:Book]

    ??? static mapping = {

    ????????????? books batchSize:15

    ??? }

    }

    ?

    動態Finders的改進

    動態查詢器的新后綴InList 可用:

    def groovyBooks = Book.findByAuthorInList(['Dierk Koenig', 'Graeme Rocher'])

    現在,Dynamic finders 也能查詢緩存:

    def books = Book.findByTitle("Groovy in Action", [cache:true] )

    可以使用悲觀鎖:

    def books = Book.findByTitle("Groovy in Action", [lock:true] )

    ?

    單項的One-to-many遺留映射

    單項的One-to-many關聯關系可以使用joinTable 參數改變它們對底層數據庫的映射:

    class Book {

    ? String title

    ? static belongsTo = Author

    ? static hasMany = [authors:Author]

    ? static mapping = {

    ???? authors joinTable :[name:"mm_author_books", key:'mm_book_id' ]

    ? }

    }

    class Author {

    ? String name

    ? static hasMany = [books:Book]

    ? static mapping = {

    ???? books joinTable:[name:"mm_author_books", key:'mm_author_id']

    ? }

    }

    ?

    增強枚舉類型的支持

    現在,枚舉類型使用GORM 調用的getId ()方法來持久化枚舉狀態。

    enum Country {

    ?? AUSTRIA('at'),

    ?? UNITED_STATES('us'),

    ?? GERMANY('de');

    ?? final String id

    ??? Country(String id) { this.id = id }

    }

    ?

    插件

    全局插件

    現在,安裝插件可以給所有的應用程序共享:

    grails install-plugin webtest -global

    ?

    多插件倉庫

    現在,Grails 支持通過提供多插件倉庫配置的能力

    使用USER_HOME/.grails/settings.groovy 文件或包含配置好的倉庫詳情的grails-app/conf/BuildConfig.groovy 文件。

    grails.plugin.repos.discovery.myRepository="http://svn.codehaus.org/grails/trunk/grails-test-plugin-repo"

    grails.plugin.repos.distribution.myRepository="https://svn.codehaus.org/grails/trunk/grails-test-plugin-repo"

    Grails的插件命令如list-plugininstall-plugin會自動使用所有設置的插件倉庫,發布一個插件到一個插件倉庫可以是用下面的命令:

    grails release-plugin -repository=myRepository

    ?

    自動安裝插件方案

    插件不再需要到SVN 檢出,當應用程序第一次加載時,通過插件元數據會自動安裝。另外,插件的依賴關系問題已經解決了。

    ?

    插件的作用范圍和環境

    現在,插件可以作用于環境或預置的構建范圍內:

    def environments = ['dev', 'test']

    def scopes = [excludes:'war']

    僅在那些環境中加載使用,而不打包到WAR 文件中。這使得產品使用時 "development-only" 的插件不會被打包

    ?

    測試

    測試框架

    現在,作為1.0.x 系列可用插件的新測試框架已集成到 Grails 1.1.

    該測試框架增加了模擬所以普通類型包擴控制器,領域類,標簽庫和url 映射簡寫的行為,快速運行單元測試。

    class SongTests extends grails.test.GrailsUnitTestCase {

    ??? void testMinimumDuration() {

    ??????? mockDomain(Song)

    ??????? def song = new Song(duration: 0)

    ??????? assertFalse 'validation should have failed', song.validate()

    ??????? assertEquals "min", song.errors.duration

    ??? }

    }

    ?

    數據綁定

    屬性子集的數據綁定

    現在更容易對屬性的自己和進行數據綁定。在之前的版本中你也許會使用:

    person.properties?=?params??

    ?

    這將會將request中的所有變量綁定到person中。如果你不想綁定所有的數據的話,你可以使用 bindData 方法。現在你可以通過使用subscript operator來綁定部分的變量:

    ?

    person.properties["firstName","lastName"]?=?params??

    person.properties["firstName","lastName"] = params

    ?

    要取得domain中的所有屬性的一個子集也可以通過這樣的方式:

    person.properties["firstName","lastName"].each?{?println?it?}?

    ?

    集合類型的數據綁定

    Grails已經支持集合類型的數據綁定,例如listsetmap

    <g:textField name="books[0].title" value="the Stand" />

    <g:textField name="books[1].title" value="the Shining" />

    <g:textField name="books[2].title" value="Red Madder" />

    ?

    腳手架

    模板和動態腳手架

    現在,動態腳手架使用通過install-templates 命令安裝的模板

    ?

    支持更多關聯類型

    現在,Scaffolding 支持 many-to-many 和單項的 one-to-many 關聯。



    Groovy Server Pages

    JSP中支持JSP標簽庫

    現在,GSP 已經支持JSP 標簽庫復用的能力:

    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

    <fmt:formatNumber value="${10}" pattern=".00"/>

    JSP 標簽也可以像正常的GSP 標簽一樣調用:

    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

    ${fmt.formatNumber(value:10, pattern:".00")}

    ?

    工程基本結構

    Maven 集成?

    Grails 1.1 緣自和 Maven plugin archetype 的關聯,允許你使用Maven 更容易的構建Grails 工程。根據操作指南here或使用原型來創建一個新的Grails 工程, 或運行:

    mvn grails:create-pom

    來為已有工程創建一個Maven POM.

    ?

    環境及元數據API??

    使用新 API 來訪問當前環境:

    import grails.util.Environment

    ...

    switch(Environment.current) {

    ??????? case Environment.DEVELOPMENT:

    ??????? ?? configureForDevelopment()

    ??????? break

    ??????? case Environment.PRODUCTION:

    ??????? ?? configureForProduction()

    ??????? break

    }

    當然也有一個易于訪問應用程序元數據的新類:

    def metadata = grails.util.Metadata.current

    println metadata.applicationName

    println metadata.applicationVersion

    ?

    Log4j DSL??

    新的 Log4j DSL 用于替換以前Log4j 配置的方式:

    log4j = {

    ??? error? 'org.codehaus.groovy.grails.web.servlet',? //? controllers

    ??????? ?????? 'org.codehaus.groovy.grails.web.pages' //? GSP

    ??? warn?? 'org.mortbay.log'

    }

    詳見user guide Log4j DSL 全部文檔。

    ?

    靈活的構建配置

    新的 grails-app/conf/BuildConfig.groovy 文件可用,它允許你配置不同層面的Grails 構建輸出路徑和服務器使用插件的解決方案:

    grails.work.dir="/tmp/work"

    grails.plugins.dir="/usr/local/grails/plugins"

    grails.project.test.reports.dir="/usr/local/grails/test-reports"

    ?

    非交互模式?

    現在,Grails 支持一種--non-interactive flag ,須鍵入到命令行,目的是關閉用戶提示:

    grails run-app --non-interactive

    這對服務器持續集成是有幫助的。

    ?

    加密數據源?

    現在,數據源密碼可以使用已提供的編碼類來加密:

    dataSource {

    ?????? username = "foo"

    ?????? password = "438uodf9s872398783r"

    ?????? passwordEncryptionCodec="my.company.encryption.BlowfishCodec"

    }

    支持的編碼使用 Grails' 現存的編碼機制。

    ?

    升級備注

    Grails 1.1 有很多改變,但大多是向后兼容1.0.x 系列的。如果有問題請報告。升級時,以下是已知需要注意的問題列表:

    Plugins 不保存在你的 USER_HOME 路徑下. 你需要重寫安裝插件或運行:

    ????? grails -Dgrails.plugins.dir=./plugins run-app

    現在枚舉類型已經被映射到數據庫,使用字符串值而不是原始默認的。

    jsession id 默認已無效. 詳見GRAILS-3364

    GSP 空白符處理已經變好很多了,比以前有更多空白符. 詳見GRAILS-3277

    grails.testing.reports.destDir 配置選項已被替代為grails.project.test.reports.dir

    現在,PreInit.groovy 改為BuildConfig.groovy

    控制器中的allowedMethod 屬性被標識為static 。非 static 版本不推薦使用,盡管它仍然起作用并在控制臺產生信息。

    ?

    Grails1.0這篇文章也可以作為參考。


    posted on 2008-12-26 16:47 shinewang 閱讀(1821) 評論(4)  編輯  收藏 所屬分類: Groovy & Grails

    評論

    # re: Grails 1.1 Beta 2發布 2008-12-26 19:33 山風小子
    任何事物都有兩面性 :)  回復  更多評論
      

    # re: Grails 1.1 Beta 2發布[未登錄] 2008-12-26 22:32 daniel
    在風險上,play!< spring+hibernate+groovy ??  回復  更多評論
      

    # re: Grails 1.1 Beta 2發布 2008-12-26 23:01 shinewang
    @daniel
    很難說play!和grails究竟哪個風險高。play!雖然還不成熟,但核心代碼很少,幾百K的Java代碼很容易搞清楚和自己擴展。play!的風險主要是它不是建立在spring+hibernate的基礎上,也不能或者說不方便部署在tomcat這類常見的Java服務器上。而grails的風險其實也是不成熟產生的,一方面我們都知道封裝帶來易用性的同時也要付出靈活性的代價,另一方面grails對spring+hibernate的包裝沒有到位,所以導致用spring+hibernate很容易做的,用grails反而難做了。如果play!能夠建立在spring+hibernate的基礎上就完美了。  回復  更多評論
      

    # re: Grails 1.1 Beta 2發布 2008-12-26 23:44 ci
    good.  回復  更多評論
      

    主站蜘蛛池模板: 另类免费视频一区二区在线观看 | 国产亚洲福利精品一区二区| 精品久久洲久久久久护士免费 | 亚洲综合小说另类图片动图| 国产一区二区视频免费| 成全视成人免费观看在线看| 久久亚洲私人国产精品| 日本一道高清不卡免费| 中文字幕在线免费播放| 久久精品国产亚洲av麻豆图片| 免费一级毛片正在播放| 三年片在线观看免费观看大全一| wwwxxx亚洲| 国产亚洲一区二区三区在线| 四虎成人免费观看在线网址| 中文字幕免费不卡二区| 亚洲经典千人经典日产| 久久久无码精品亚洲日韩按摩| 国产极品粉嫩泬免费观看| 99精品视频在线观看免费播放 | 国产精品视频免费观看| 国产免费A∨在线播放| 日本亚洲色大成网站www久久| 国产亚洲精品自在线观看| 免费鲁丝片一级在线观看| 无码午夜成人1000部免费视频| 午夜在线亚洲男人午在线| 亚洲一卡二卡三卡四卡无卡麻豆 | 亚洲黄页网在线观看| 国产专区一va亚洲v天堂| 成年女人色毛片免费看| 高清一区二区三区免费视频| 少妇亚洲免费精品| 精品国产日韩久久亚洲| 久久久亚洲欧洲日产国码是AV| 亚洲综合图色40p| 又粗又大又长又爽免费视频| 国产桃色在线成免费视频| 一级成人a毛片免费播放| 一出一进一爽一粗一大视频免费的| 亚洲高清有码中文字|