筆記

          way

          JBoss Forge 2入門教程

              《Continuous Enterprise Development in Java》引入了對(duì)Forge的使用,但是都是針對(duì)Forge 1版本編寫的。現(xiàn)在最新版的JBoss Developer Studio 9 beta自帶的都是2.15版本。使用JBoss Developer Studio內(nèi)嵌的Forge遇到很多問題,干脆直接下載了Forge 2.19使用命令行進(jìn)行試用。現(xiàn)在對(duì)Forge 2的介紹實(shí)在太少,結(jié)合這本書和官方文檔整理了一下入門教程。
              一、介紹
              如果你花費(fèi)了時(shí)間開發(fā)Jave EE基礎(chǔ)的項(xiàng)目 (或者任何大型點(diǎn)的項(xiàng)目), 你很可能花大量精力創(chuàng)建項(xiàng)目布局,定義依賴,告知在編譯和執(zhí)行過程中用到的相關(guān)類路徑。雖然使用Maven相比手動(dòng)創(chuàng)建項(xiàng)目會(huì)減少很多負(fù)擔(dān),但一般來說在pom.xml中還是有很多模板來定義需求。
              JBoss Forge 為Java EE項(xiàng)目提供增量項(xiàng)目加強(qiáng)。? 以命令shell和集成到一些IDE中的實(shí)現(xiàn), Forge使我們能改變項(xiàng)目文件和文件夾。一些可以使用Forge處理的具體任務(wù)有:
          • 增加JPA實(shí)體,描述他們的model
          • 配置Maven依賴
          • 項(xiàng)目支架搭建
          • 從域模型里面逆向工程產(chǎn)生視圖層布局
          • 部署到應(yīng)用服務(wù)器
          從頭開始建項(xiàng)目的話使用Forge來創(chuàng)建項(xiàng)目布局比較有意義。最終會(huì)給我們一個(gè)從數(shù)據(jù)庫到視圖層的功能性骨架,我們能用來作為學(xué)習(xí)工具或?qū)懻鎸?shí)代碼的快捷方式。Forge的用戶界面是一個(gè)shell,因此可以手工安裝并從終端使用(像其他命令行應(yīng)用一樣)。寫命令行過程中,支持Tab鍵提示
          【Forge和spring roo類似,不過沒有依賴于spring相關(guān),完全符合JEE的標(biāo)準(zhǔn)】
             二、下載安裝Forge
          在官網(wǎng)下載壓縮包,解壓配置環(huán)境變量。具體過程略。
             三、
          創(chuàng)建一個(gè)Maven為基礎(chǔ)的Java EE項(xiàng)目
          命令行運(yùn)行forge,切換到工作空間目錄下。創(chuàng)建
          叫feedback的簡(jiǎn)單應(yīng)用,它允許用戶添加評(píng)論。
           [jbdevstudio-workspace]$ project-new --named feedback --topLevelPackage org.cedj.feedback --targetLocation  feedback;
          --targetLocation /directory/path //在該文件夾下創(chuàng)建項(xiàng)目
          --topLevelPackage //groupId
          --finalName //build中的finalName
          --type //默認(rèn)是war, 可選"jar" "parent" "addon" "ear" "resource-jar" "from-archetype" 
          【使用man 命令可看到一些命令的說明】
          現(xiàn)在可看到生成了一個(gè)標(biāo)準(zhǔn)的maven項(xiàng)目。

              四、
          建立JPA和創(chuàng)建實(shí)體
          [feedback]$ jpa-new-entity --named FeedbackEntry
          這個(gè)命令有幾個(gè)作用,首先它在正確的地方創(chuàng)建persistence.xml(在META-INF文件夾下),默認(rèn)是Hibernate配置。 然后在子包model下創(chuàng)建實(shí)體。注意這個(gè)實(shí)體已經(jīng)有一個(gè)id和version以及他們的getters/setters. Forge的好處就是一個(gè)命令就全部創(chuàng)建好可以用了。
              如果你不愿意用Java EE容器的默認(rèn)數(shù)據(jù)源,你可以指定額外的連接選項(xiàng)比如JNDI data-source names, JDBC connection information, and data-source types. 注意, 這樣的話你可能配置你的應(yīng)用服務(wù)器來提供這個(gè)新的data-source and/or database connection.
          [feedback]$ jpa-setup --provider Eclipse Link --dbType POSTGRES --dataSourceName java:comp/DefaultDataSource
          如果執(zhí)行了jpa-setup命令,你會(huì)發(fā)現(xiàn)提示符變化了:從[feedback] 變到了[persistence.xml]. 在Forge中,提示符總是告訴你在什么地方。 你能輸入命令pwd或者ls。 現(xiàn)在我們回到feedback實(shí)體: 輸入cd ~~ 回到根目錄,再輸入cd src/main/java/org/cedj/model/FeedbackEntry.java.
              五、
          在實(shí)體上創(chuàng)建新的域
          FeedbackEntry實(shí)體應(yīng)該可以用Twitter ID記錄一些用戶的反饋。我們加字段(以及驗(yàn)證他們不為null):
          [FeedbackEntry.java]$ jpa-new-field --named twitterHandle --type String
          [FeedbackEntry.java]$ jpa-new-field --named feedback --type String
           Forge有許多選項(xiàng)快速創(chuàng)建屬性和定制它們的JPA映射。比如我們想指定反饋由什么語言寫成。我們能使用Forge快速創(chuàng)建一個(gè)Java枚舉類型,再把它用到實(shí)體中 :
          FeedbackEntry$ java-new-enum --named Language --targetPackage org.cedj.feedback.model
          [Language.java]$ java-new-enum-const ENGLISH
          [Language.java]$ java-new-enum-const FRENCH
          注意提示符,F(xiàn)orge有很多命令行在目錄、類或文件之間瀏覽。回到FeedbackEntry實(shí)體的命令:
          [Language.java]$ cd ..
          [model]$ cd FeedbackEntry.java
          [FeedbackEntry]$ 
          創(chuàng)建枚舉域:
          [FeedbackEntry]$ jpa-new-field --named language --type org.cedj.feedback.model.Language
          默認(rèn)JPA域是字符串類型。使用--type選項(xiàng),我們可選基本數(shù)據(jù)類型(int, byte, char), enum,或其他實(shí)體和實(shí)體關(guān)聯(lián) (One-to-One, One-to-Many, Many-to-One, Many-to-Many). 我們?cè)賱?chuàng)建一個(gè)新的Author實(shí)體,增加一個(gè)Many-to-One 關(guān)系到feedback:
          $ jpa-new-entity --named Author
          [Author.java]$ jpa-new-field --named firstName
          [Author.java]$ cd ../FeedbackEntry.java
          [FeedbackEntry]$ jpa-new-field --named author --type org.cedj.feedback.model.Author --relationshipType Many-to-One
              六、
          在實(shí)體上增加Bean驗(yàn)證限制
          Java EE6引入了Bean Validation規(guī)范,這個(gè)規(guī)范允許一個(gè)聲明來驗(yàn)證限制全部數(shù)據(jù)庫、應(yīng)用和視圖層。
          [FeedbackEntry.java]$ constraint-add --onProperty twitterHandle --constraint NotNull
          [FeedbackEntry.java]$ constraint-add --onProperty feedback  --constraint NotNull
          Forge在后臺(tái)創(chuàng)建validation.xml文件,增加Bean驗(yàn)證依賴和需要的限制。
              七、
          現(xiàn)在創(chuàng)建UI層來看我們的web應(yīng)用
          JSF是默認(rèn)的Java EE用戶界面框架,因此JBoss Forge對(duì)它有許多支持。事實(shí)上只需一個(gè)命令, Forge能輕易從JPA實(shí)體搭建整個(gè)CRUD web應(yīng)用。JSF生成的應(yīng)用遵循幾個(gè)模式和最佳實(shí)踐: usage of CDI conversation scope, the extended persistence context, JSF converters and so on.
          我們可以根據(jù)某一個(gè)實(shí)體來搭建,或使用通配符讓Forge為每一個(gè)實(shí)體搭建。
          [FeedbackEntry.java]$scaffold-generate --targets org.cedj.feedback.model.*;
              一個(gè)命令,F(xiàn)orge就為FeedbackEntry和Author生成了配置文件(web.xml, faces-config.xml, …), JSF頁面,為布局生成了圖片,CSS以及加入了Bootstrap.
              默認(rèn)Forge使用JSF 2.0搭建一個(gè)web應(yīng)用,當(dāng)你可執(zhí)行faces-setup命令來改變這個(gè)配置。事實(shí)上,大多數(shù)Forge命令可以被setup (e.g. jpa-setup, servlet-setup…)
           $ faces-setup --facesVersion 2.2
              八、 創(chuàng)建Arquillian 測(cè)試
          Arquillian是一個(gè)針對(duì)JVM的創(chuàng)新的、高擴(kuò)展測(cè)試平臺(tái),它能使開發(fā)人員輕易為Java中間件創(chuàng)建自動(dòng)化集成、功能性和驗(yàn)收測(cè)試。 接手單元測(cè)試留下的工作,Arquillian處理所有容器管理、部署和框架初始化,這樣你就能集中在手中的任務(wù),寫測(cè)試。 真正的測(cè)試(應(yīng)該指的是不用Mock的方式)。簡(jiǎn)而言之,Arquillian brings the test to the runtime so you don‘t have to manage the runtime from the test (or the build). Arquillian通過覆蓋測(cè)試執(zhí)行的所有方面來去掉了這個(gè)負(fù)擔(dān),測(cè)試執(zhí)行過程包括:
          • 管理容器的生命周期

          • Bundling the test case, dependent classes and resources into a ShrinkWrap archive (or archives)

          • Deploying the archive (or archives) to the container (or containers)

          • Enriching the test case by providing dependency injection and other declarative services

          • Executing the tests inside (or against) the container

          • Capturing the results and returning them to the test runner for reporting

            為了避免引入不必要的復(fù)雜性到開發(fā)人員的構(gòu)建環(huán)境, Arquillian 無縫集成了熟悉的測(cè)試框架(比如JUnit 4, TestNG 5), 運(yùn)行使用存在的IDE、Ant和Maven測(cè)試插件來啟動(dòng)測(cè)試(不用任何插件)。

          先看看怎么安裝
          Arquillian插件
          就像安裝wildfly插件一樣,在Forge中使用Arquillian能力只需要安裝一個(gè)插件。最簡(jiǎn)單的安裝方法是在Forge console中執(zhí)行命令直接從Git庫中安裝
          $addon-install-from-git --url https://github.com/forge/addon-arquillian.git --coordinate org.arquillian.forge:arquillian-addon 
           連接到插件庫,抓取請(qǐng)求插件的最新版本,構(gòu)建源代碼,把二進(jìn)制文件安裝到當(dāng)前運(yùn)行時(shí)。因?yàn)镕orge是在一個(gè)模塊化類加載架構(gòu)上構(gòu)建的,我們能在不重啟進(jìn)程,也不需要考慮沖突依賴的情況下加載插件。
              Arquillian安裝好之后,我們可以訪問arquillian命令了。安裝成功后輸入arq按TAB鍵就能看到arquillian-setup命令。Arquillian支持多個(gè)容器中的測(cè)試。這是通過為每一個(gè)容器使用一個(gè)Maven profile來實(shí)現(xiàn)的。這樣我們也能同時(shí)配置多個(gè)容器了。
              先讓Forge添加POM的依賴,這樣我們就能在wildfly容器上運(yùn)行Arquillianr測(cè)試了:
          $arquillian-setup  --containerType REMOTE --containerName JBOSS_AS_REMOTE_7.X --testframework //書上的命令,下面的是修改過的命令
          $ arquillian-setup --arquillianVersion 1.1.5.Final --testFramework junit --testFrameworkVersion 4.11 --containerAdapter wildfly-remote --containerAdapterVersion 8.1.0.Final,這個(gè)命令會(huì)在pom.xml中添加運(yùn)行Arquillian測(cè)試所有需要的依賴 (JUnit, Arquillian core, Arquillian extension for WildFly) 還有Maven Profile (上面的命令生成的是arquillian-wildfly-remote) 。This command has also created an arquillian.xml file where all the Arquillian configuration goes. As you can see, with a single command, JBoss Forge has dealt with all the plumbing configuration.
          需要選擇相應(yīng)配置
          POM配置會(huì)做相應(yīng)修改,創(chuàng)建寫測(cè)試的出發(fā)點(diǎn):
          $ arquillian-create-test --targets org.cedj.ch03.feedback.model.FeedbackEntry
          這個(gè)類沒有引用任何應(yīng)用服務(wù)器或目標(biāo)容器。因?yàn)?/span>Arquillian被設(shè)計(jì)來從目標(biāo)運(yùn)行時(shí)中解耦出測(cè)試的編程模型;任何能處理測(cè)試要求能力的容器都能工作。這能使Java EE的可移植性目標(biāo)不受到影響,把啟動(dòng)和部署的結(jié)構(gòu)移到配置元素中。 In this case, the Arquillian runner會(huì)發(fā)現(xiàn)wildfly容器adaptor在編譯路徑上(因?yàn)檫\(yùn)行
          Arquillian Forge插件的setup命令的時(shí)候,adapter被定義在POM)
          生成的FeedbackEntry類中可看到    @RunWith(Arquillian.class)
              @RunWith是一個(gè)標(biāo)準(zhǔn)的JUnit構(gòu)件用來把控制指向特定的test runner.這是Arquillian的入口;從這里Arquillian可以從JUnit收獲生命周期事件,然后自己處理。這樣設(shè)計(jì)的好處是,就用戶而言Arquillian不需要特殊的插件或配置。 任何能啟動(dòng)JUnit測(cè)試的—可以是Maven build, an Ant task, a manual command,or an IDE—都能利用 Arquillian 而無需額外的處理。For instance, you can use JBDS and Eclipse to launch a full-scale integration test with Arquillian by right-clicking on the class and selecting Run As → JUnit Test.
              public class FeedbackEntryTest {...}
          The important bit here is what’s not required. Because of the Arquillian JUnit Test Runner, you’re free to use whatever class hierarchy you’d like, and there’s no need to extend a base support class. This keeps Arquillian tests in line with the POJO programming model originally introduced in Java EE5.
          要讓測(cè)試類運(yùn)行,首先確保WildFly安裝、運(yùn)行。
          安裝JBoss AS Forge addon
          安裝Wildfly插件:
          $ addon-install-from-git --url https://github.com/jerr/as-addon  --coordinate org.jboss.forge.addon:as,2.0.0-SNAPSHOT
          $addon-install-from-git --url https://github.com/jerr/jboss-as-addon  --coordinate org.jboss.forge.addon:jboss-as-wf8,2.0.0-SNAPSHOT
          $ as-setup --server wildfly8
          需要下載一段時(shí)間,安裝成功后,可以看到as-的一些命令
          $ as-
          as-deploy  as-setup  as-shutdown  as-start  as-undeploy
          接著構(gòu)建應(yīng)用,使用as-start啟動(dòng)JBOSS,使用as-deploy部署應(yīng)用:
          $ build
          $ as-start
          (...)
          JBoss logs
          (...)
          $ as-deploy
          現(xiàn)在可在localhost:8080/feedback看見應(yīng)用了。
          也可以跑arquillian測(cè)試了:mvn install -Parquillian-wildfly-remote【這里我直接另外開了一個(gè)console,運(yùn)行maven命令,-P后面的參數(shù)是之前在pom.xml中生成的profile】
          注:在win 7 64位上使用Forge 2.19命令行時(shí)發(fā)現(xiàn)鍵盤上下鍵出現(xiàn)亂碼,還不清楚是不是環(huán)境原因。

          posted on 2015-09-23 21:14 yuxh 閱讀(4419) 評(píng)論(0)  編輯  收藏 所屬分類: j2ee

          導(dǎo)航

          <2015年9月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          收藏夾

          博客

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 凌源市| 河池市| 西城区| 平乐县| 鹤峰县| 从化市| 乐都县| 忻州市| 衡东县| 尖扎县| 文水县| 永仁县| 龙陵县| 德惠市| 响水县| 青州市| 嫩江县| 镶黄旗| 克山县| 鄂托克前旗| 天柱县| 襄城县| 繁昌县| 西青区| 海晏县| 济南市| 绥中县| 福泉市| 镇江市| 姚安县| 扎鲁特旗| 扎囊县| 浙江省| 海口市| 高清| 陈巴尔虎旗| 禹城市| 富蕴县| 唐海县| 隆回县| 海南省|