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

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

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

    First they ignore you
    then they ridicule you
    then they fight you
    then you win
        -- Mahatma Gandhi
    Chinese => English     英文 => 中文             
    隨筆-221  評論-1047  文章-0  trackbacks-0

    了解如何在 Oracle 數(shù)據(jù)庫 XE 上快速構(gòu)建一個 Grails 應(yīng)用程序,然后將其部署到 Oracle 應(yīng)用服務(wù)器 10g

    2006 年 5 月發(fā)表

    您可能已經(jīng)注意到,Oracle 最近發(fā)表了一篇由 Richard Monson-Haefel 撰寫的有關(guān) Oracle 上的 Ruby on Rails 的文章。這篇文章介紹了 Ruby on Rails 框架以及如何使用它訪問 Oracle 數(shù)據(jù)庫(確切地說是 Oracle 數(shù)據(jù)庫 10g 快捷版 (XE))。

    如果您并不熟悉 Ruby on Rails,那么切記它與 Java 沒有任何關(guān)系,它是一個基于 Ruby 的框架。Ruby on Rails 確實很吸引人、功能強大以及……但作為 Java 開發(fā)人員,我希望使用 Java(或等效語言)執(zhí)行相同操作,從而利用我在 J2EE 中的投資。我還希望能夠部署和管理使用 Oracle Enterprise Manager Application Server Control 等工具以這種方式開發(fā)的應(yīng)用程序。

    一種新框架的開發(fā)中已經(jīng)利用了 Ruby on Rails 所遵循的“按照慣例進行編碼”范例:Grails。Grails 將 Groovy 用作基礎(chǔ)語言,因此它在 JVM 上運行并可以利用任何現(xiàn)有的 Java API。

    如果您是 Java 開發(fā)人員,便會發(fā)現(xiàn)使用此框架加快 Web 應(yīng)用程序的開發(fā)非常有意義。如果您不是 Java 開發(fā)人員但需要更快速地開發(fā)和部署 Web 應(yīng)用程序,那么 Grails 也是一個很棒的工具。

    在本文中,我將使用 Richard 在他撰寫文章時使用的同一應(yīng)用程序/數(shù)據(jù)庫模式來開發(fā)我的第一個 Grails 應(yīng)用程序。密切關(guān)注!

    什么是 Groovy?什么是 Grails?

    Groovy 是一種利用其他語言(如 Ruby、Jython 和 Smalltalk)中的特性的動態(tài)語言。Groovy 在 Java VM 上運行,并使任何現(xiàn)有的 Java 對象(以及所有 API)可用于 Groovy。Groovy 當(dāng)前遵循 JSR-241 中的標(biāo)準(zhǔn);您可以在 Groovy 網(wǎng)站及其項目主管 (Guillaume Laforge) 的網(wǎng)志中了解有關(guān)該語言的詳細(xì)信息。

    Grails 之于 Groovy 相當(dāng)于 Ruby on Rails 之于 Ruby。(該名稱最初為“Groovy On Rails”現(xiàn)在已改為“Grails”以避免混淆/競爭。)與 Ruby on Rails 一樣,Grails 用于創(chuàng)建 CRUD創(chuàng)建、讀取、更新、刪除)Web 應(yīng)用程序。您可以在 Grails 網(wǎng)站及其項目主管 (Graeme Rocher) 的網(wǎng)志中了解有關(guān) Grail 的詳細(xì)信息。

    下面,我們將深入了解一下該示例應(yīng)用程序。

    示例:產(chǎn)品目錄

    第 1 步:設(shè)置 Oracle 數(shù)據(jù)庫

    如果您尚未設(shè)置 Richard 文章中的模式和表,則只需創(chuàng)建下列對象:

    CREATE TABLE comics (
    id NUMBER(10) NOT NULL,
    title VARCHAR2(60),
    issue NUMBER(4),
    publisher VARCHAR2(60),
    PRIMARY KEY (id)
    );
    CREATE SEQUENCE comics_seq;

    我根據(jù)該文章在 ruby 模式中創(chuàng)建了該表。

    第 2 步:安裝 Grails

    Grails 安裝非常簡單,安裝指南中有述?;静襟E:

    • 下載二進制文件(我使用了 Grails 0.2
    • 設(shè)置不同的環(huán)境變量(GRAILS_HOME、JAVA_HOME、PATH),我使用了 Java 5。

    完成!

    第 3 步:創(chuàng)建 Web 應(yīng)用程序

    現(xiàn)在您已經(jīng)安裝了本產(chǎn)品,下一步是創(chuàng)建應(yīng)用程序本身。

    創(chuàng)建應(yīng)用程序。create-app 命令使用模板(利用占位府表示應(yīng)用程序的不同組件,如配置、MVC、庫等)創(chuàng)建了完整的項目。在命令行界面中輸入以下命令:

    > grails create-app
    ....
    .....
    create-app:
    [input] Enter application name:
    comics_catalog
    .....

    您將看到,Grails 頻繁使用 Ant。create-app 命令將請求您輸入應(yīng)用程序名稱;例如,輸入 comics_catalog。

    創(chuàng)建的應(yīng)用程序包含一個目錄列表,從而使您可以使用 Groovy、Grails 以及其他 Web 組件開始構(gòu)建該應(yīng)用程序。

    添加業(yè)務(wù)邏輯和模型:域類。Grails 和 Ruby on Rails 之間的最大差別之一是,使用前者,應(yīng)用程序開發(fā)的主要組件不是表,而是域類。域類是業(yè)務(wù)應(yīng)用程序的核心,它包含應(yīng)用程序的狀態(tài)和行為。

    因此,下一步是為 comics 創(chuàng)建一個域類。為此,您只需轉(zhuǎn)到項目的主目錄(例如,cd comics_catalog)并運行 create-domain-class。

    > cd comics_catalog
    > grails create-domain-class
    ....
    create-domain-class:
    [input] Enter domain class name:
    comics
    ....

    當(dāng)命令請求您輸入類名時,請輸入“comics”。Grails 使用的命名慣例與 Ruby on Rails 的不同,因此,您需要使用同一名稱來命名類和要在其上映射對象的表。持久性層使用 GROM(Grails 對象關(guān)系映射)創(chuàng)建,后者利用了 JBoss Hibernate。

    :在本示例中,我們利用了一個現(xiàn)有的數(shù)據(jù)庫對象并基于它來創(chuàng)建域類。Grails 通常使用另一種方法(即所有內(nèi)容由應(yīng)用程序驅(qū)動)— 您首先創(chuàng)建域類,然后 Grails 將創(chuàng)建其他數(shù)據(jù)庫對象。

    Comics 類不包含任何有關(guān)映射本身的信息,因此您必須在該域類中創(chuàng)建不同的屬性。您將在域類中開始使用 Groovy。域類位于以下位置:

    ./comics_catalog/grails-app/domain/Comics.groovy

    請注意,默認(rèn)情況下 Grails 使用兩個屬性創(chuàng)建該類:id 和 version。將它們保存到適當(dāng)?shù)奈恢?,并添加?biāo)題、期號和出版商。

    class Comics { 
    @Property Long id
    @Property Long version

    // new properties for the Comics class
    @Property String title
    @Property Long issue
    @Property String publisher

    String toString() { "${this.class.name} :$id" }
    }

    現(xiàn)在,您已經(jīng)設(shè)置了所有內(nèi)容并準(zhǔn)備運行 magic 命令,該命令將創(chuàng)建不同的屏幕和流。

    從 domain 類中創(chuàng)建不同的屏幕。您現(xiàn)在可以運行 generate-all 命令來創(chuàng)建所有不同的屏幕。

    > grails generate-all
    ....
    input-domain-class:
    [input] Enter domain class name:
    comics
    ....

    該命令將創(chuàng)建不同的視圖和控制器;您可以查看各個目錄:

    ./comics_catalog/grails-app/controllers
    ./comics_catalog/grails-app/views

    配置數(shù)據(jù)庫訪問。接下來,您必須將該應(yīng)用程序配置為使用 Oracle 數(shù)據(jù)庫和模式。Grails 對數(shù)據(jù)源使用一個配置文件:

    ./comics_catalog/grails-app/conf/ApplicationDataSource.groovy

    編輯該文件以連接到 Oracle 數(shù)據(jù)庫。

    class ApplicationDataSource {
    @Property boolean pooled = true
    @Property String dbCreate = "update" // one of 'create', 'create-drop','update'
    @Property String url = "jdbc:oracle:thin:@localhost:1521:XE"
    @Property String driverClassName = "oracle.jdbc.OracleDriver"
    @Property String username = "ruby"
    @Property String password = "ruby"
    }

    此處沒有任何特殊內(nèi)容,只有 URL、DriverClassName、username 和 password 等屬性。一個值得注意的屬性是 dbCreate,您可以使用它在模式上配置行為,以創(chuàng)建(或不創(chuàng)建)對象。本示例中存在表,因此需要重用對象 — 但首先您需要確認(rèn)已經(jīng)擁有所有必需對象(以及列),因此請選擇更新。

    下一個要執(zhí)行的操作是將 Oracle JDBC 驅(qū)動程序添加到該應(yīng)用程序以使其可用。為此,您只需將 JDBC 驅(qū)動程序復(fù)制到應(yīng)用程序的 lib 目錄中。在本示例中,我使用的是 Oracle 數(shù)據(jù)庫 XE,因此我將文件從以下位置:

    ORACLE_XE_HOME/app/oracle/product/10.2.0/server/jdbc/lib/ojdbc14.jar

    復(fù)制到

    ./comics_catalog/lib/

    第 4 步:運行應(yīng)用程序

    Grails 支持在獨立模式下運行應(yīng)用程序 (run-app)。該命令在部署應(yīng)用程序后啟動 Web 容器(基于 Jetty)。

    > grails run-app 

    :Jetty 將在端口 8080 上啟動;要在其他端口(如 9090)上啟動,請使用:

    grails -Dserver.port=9090 run-app

    您現(xiàn)在可以使用以下 URL 訪問該應(yīng)用程序:

    http://localhost:8080/comics_catalog/comics/

    您的瀏覽器將顯示 Comics 表中的 comics 列表。


    可以通過單擊 New Comics 選項卡創(chuàng)建一個新條目,并通過單擊 Show 鏈接查看/編輯/刪除現(xiàn)有記錄。


    如您所見,創(chuàng)建應(yīng)用程序其實非常簡單。下一步是將應(yīng)用程序部署到應(yīng)用服務(wù)器。

    第 5 步:部署應(yīng)用程序

    Grails 提供了一個用于將應(yīng)用程序打包為要準(zhǔn)備部署的 WAR 的命令,因此在項目的根目錄中,您可以運行以下命令:

    > grails war 

    運行該命令時,您使用位于項目根目錄中的應(yīng)用程序名稱(在本示例中為 comics_catalog.war)結(jié)束 WAR。

    如果查看此 WAR,則將看到它非常大(超過 10MB),這是因為所有庫均包含在該 Web 應(yīng)用程序的 Lib 目錄中。您可以在應(yīng)用程序的 ./tmp (./comics_catalog/tmp/war) 目錄中看到 WAR 的確切結(jié)構(gòu)。

    您可以將應(yīng)用程序按原樣部署到 Oracle 應(yīng)用服務(wù)器 10g,但要避免類加載程序出現(xiàn)問題,應(yīng)將該 Web 應(yīng)用程序配置為先加載本地類。您可以在部署過程中使用類加載程序配置屏幕執(zhí)行該操作:


    還可以將此配置保存在部署計劃中以方便稍后進行部署。

    完成部署后,您可以使用 Oracle 應(yīng)用服務(wù)器主機和端口(如下所示)訪問該應(yīng)用程序:

    http://localhost:8888/comics_catalog/comics/list

    您現(xiàn)在可以像管理和監(jiān)視任何其他部署到 Oracle 應(yīng)用程序 10g 的 J2EE 應(yīng)用程序那樣來管理和監(jiān)視該應(yīng)用程序。

    請注意,其中有一些其他部署選項:

    • 我本人不喜歡將所有 JAR 文件都包含在 WAR 文件中,因此您可以改用 Oracle 應(yīng)用服務(wù)器共享庫上載和配置所有 JAR 來創(chuàng)建 Grails 庫,而打包 WAR 時則將所有這些庫排除在外。
    • 您還可以將 Hibernate/Spring 配置為使用標(biāo)準(zhǔn)定義數(shù)據(jù)源并使用 JNDI 名稱查找連接。

    結(jié)論

    Grails 和 Ruby on Rails 確實都是很有吸引力的框架,它們使開發(fā)人員可以快速創(chuàng)建訪問關(guān)系數(shù)據(jù)庫(尤其是 Oracle 數(shù)據(jù)庫)的 Web 應(yīng)用程序。

    Grails 剛推出不久(版本 0.2),但文檔卻很詳細(xì)和完善。歡迎所有有興趣的開發(fā)人員使用該框架,并向開發(fā)小組提供反饋。


    Tug Grall 是 Oracle Application Server Containers for J2EE 小組的產(chǎn)品經(jīng)理。

    -------------------------------
    山風(fēng)小子注:
    1,定義類屬性時,@Property已經(jīng)被Groovy廢棄,請用關(guān)鍵字def代替;本例的@Property String title可寫為String title,為何不寫為def title,這是為了幫助Grails在利用Hibernate創(chuàng)建表時正確判斷字段類型,是用VARCHAR呢還是DATETIME呢還是。。。呢?就是通過判斷域類屬性類型來完成的。
    2,目前Grails的版本為0.4.2,1.0將于年中發(fā)布


    -------------------------------
    原文地址:http://www.oracle.com/technology/global/cn/pub/articles/grall-grails.html

    附:Groovy輕松入門--Grails實戰(zhàn)基礎(chǔ)篇
    posted on 2007-04-03 17:04 山風(fēng)小子 閱讀(1801) 評論(0)  編輯  收藏 所屬分類: Groovy & Grails
    主站蜘蛛池模板: 先锋影音资源片午夜在线观看视频免费播放 | 亚洲VA综合VA国产产VA中| 伊在人亚洲香蕉精品区麻豆| 国产成人A人亚洲精品无码| 亚洲成人一级电影| 国产免费一级高清淫曰本片| 91精品免费国产高清在线| 亚洲国产成人乱码精品女人久久久不卡 | 亚洲同性男gay网站在线观看| 黄色免费在线观看网址| 美女视频黄的免费视频网页| 国产在线观看免费完整版中文版| 亚洲一区精品无码| 亚洲av无码av在线播放| 麻豆视频免费播放| 久久久久久亚洲精品| eeuss影院ss奇兵免费com| 我想看一级毛片免费的| 亚洲国产精品va在线播放| 日本免费一区二区三区四区五六区| 亚洲黄黄黄网站在线观看| 亚洲乱亚洲乱妇24p| 真实国产乱子伦精品免费| 亚洲一区无码中文字幕 | 一级毛片免费在线观看网站| 在线成人a毛片免费播放| 亚洲av女电影网| 亚洲毛片在线免费观看| 亚洲精品人成在线观看| 热99RE久久精品这里都是精品免费 | 久久精品国产亚洲一区二区三区| 亚洲欧美熟妇综合久久久久| 国产小视频在线观看免费| 精品国产福利尤物免费| 亚洲福利秒拍一区二区| 一级毛片**不卡免费播| 亚洲性无码AV中文字幕| 国语成本人片免费av无码| 亚洲av无码片区一区二区三区| 日本人的色道免费网站| 边摸边吃奶边做爽免费视频99|