編者注:我們發現了有趣的系列文章 《30天學習30種新技術》
,正在翻譯,一天一篇更新,年終禮包。下面是第 17 天的内容。
今天的
“30天學習30種新技術” 挑戰,我決定學習一下 JBoss Forge 。JBoss Forge是一個建立基于Maven的Java應用的開發工具,它可以幫助Java開發者快速地開發web應用。本文中,我們将使用JBoss Forge開發一個簡單的待辦應用,可以為基于 Angularjs 的前端提供服務。這一切都可以使用JBoss Forge完成。讓我們開始吧。
預備
- 注冊一個 OpenShift賬号 。注冊是完全免費的,Red Hat給每個使用者三枚免費的Gear,可以用Gear運作你的應用。在寫作此文的時候,每個使用者能免費使用總共 1.5 GB 記憶體和 3 GB 硬碟空間。
- 基本Java知識。
- 基本的Git知識。
- 在你的系統上安裝最新版的JDK。你可以安裝 OpenJDK 7 和 Oracle JDK 7 。OpenShift支援 OpenJDK6 和 7。
- 從 官網 下載下傳最新的 Eclipse 包。 在撰寫本文的時候,最新的Eclipse包叫作Kepler。
安裝eclipse很容易,解壓縮即可。
tar -xzvf eclipse-jee-kepler-R-*.tar.gz
第一步 安裝OpenShfit和JBoss Forge的Eclipse插件
打開Eclipse,進入你的項目工作空間。打開 Help > Eclipse Marketplace,你會看到如下螢幕。
在搜尋框中搜尋“jboss tools”。第一個結果就是“JBoss Tools(Kepler)”。
點選“安裝”,會出現選擇安裝插件的清單。由于本文的目的是示範,我們隻選上JBoss OpenShift Tools。選中之後點選“确認”。
現在我們需要接受許可協定。選擇接受後點選完成。
Eclipse會警告該插件未簽名。點選“确認”然後Eclipse會要求重新開機,點選“是”,重新開機一下。
第二步 使用 JBoss Forge 1.4.1
JBoss Forge使用JBoss Forge 1.3.1,然而本文中将使用1.4.1, 因為JBoss Forge Angularjs插件在1.3.1下不工作。是以要從
http://forge.jboss.org/下載下傳JBoss Forge。下載下傳之後解壓縮,然後進入Eclipse的設定界面。
在設定界面,進入 Forge > Installed Forge Runtimes,添加一個新的運作時環境。
現在點選“添加”按鈕。填寫詳情後點選“确認”。
将其設為預設安裝:
第四步 開啟JBoss Forge
通過 Window > Show View > Other > Forge > Forge Console 開啟 Forge 控制台。
輕按兩下“Forge Console”會新開一個标簽頁。
點選綠色按鈕啟動forge。
第五步 建立 Maven 項目
啟動 Forge 1.4.1之後, 在forge控制台輸入如下指令建立Forge Maven項目。
[no project] forge $ new-project --named todoapp --topLevelPackage com.todoapp --finalName todoapp
以上指令告訴forge建立一個名為todoapp的項目,使用
com.todoapp
包。
輸入上述指令後,forge會詢問你項目的目錄,按回車選擇預設選項。
你可以告訴Forge為每個指令自動使用預設選項,隻需設定
ACCEPT_DEFAULTS
。在Forge shell中輸入如下指令:
set ACCEPT_DEFAULTS true;
第六步 添加JPA
添加JPA很友善。隻需在Forge shell中輸入如下指令:
[todoapp] todoapp $ persistence setup --provider HIBERNATE --container JBOSS_AS7
這會建立
persistence.xml
并綁定到
java:jboss/datasources/ExampleDS
。
第七步 建立Todo實體
現在建立一個Todo的JPA實體,然後添加以下四個字段:
[todoapp] todoapp $ entity --named Todo
[todoapp] Todo.java $ field string --named task
[todoapp] Todo.java $ field string --named description
[todoapp] Todo.java $ field temporal --type DATE --named createdOn
[todoapp] Todo.java $ field boolean --named completed
你可以使用
ls
指令檢視任何Java類的内容。
[todoapp] Todo.java $ ls
[fields]
private::Date::createdOn; private::Long::id;
private::String::description; private::String::task;
private::boolean::completed; private::int::version;
[methods]
public::equals(Object that)::boolean
public::getCompleted()::boolean
public::getCreatedOn()::Date
public::getDescription()::String
public::getId()::Long
public::getTask()::String
public::getVersion()::int
public::hashCode()::int
public::setCompleted(final boolean completed)::void
public::setCreatedOn(final Date createdOn)::void
public::setDescription(final String description)::void
public::setId(final Long id)::void
public::setTask(final String task)::void
public::setVersion(final int version)::void
public::toString()::String
第八步 RESTful web 服務
現在我們要使用JBOSS Forge為Todo實體生成REST。是以我們需要設定JBoss Forge REST插件。
[todoapp] Todo.java $ rest setup --activatorType APP_CLASS
***SUCCESS*** Installed [forge.maven.WebResourceFacet] successfully.
***SUCCESS*** Installed [forge.spec.servlet] successfully.
***SUCCESS*** Installed [forge.spec.jaxrs.applicationclass] successfully.
***SUCCESS*** Installed [forge.spec.jaxrs] successfully.
***SUCCESS*** Rest Web Services (JAX-RS) is installed.
Wrote /Users/shekhargulati/dev/workspaces/forge/todoapp/src/main/webapp
Wrote /Users/shekhargulati/dev/workspaces/forge/todoapp/pom.xml
Wrote /Users/shekhargulati/dev/workspaces/forge/todoapp/src/main/java/com/todoapp/rest/RestApplication.java
[todoapp] Todo.java $
上述指令中,我們使用應用類激活JAX-RS,這樣就不用在
web.xml
中定義。我們建立了一個擴充了
javax.ws.rs.ApplicationPath
的RestApplication類。
現在我們可以用Forge來生成REST了。
[todoapp] todoapp $ rest endpoint-from-entity --contentType application/json com.todoapp.model.Todo.java
上述指令将為我們的Todo JPA實體建立一個标準的RESTful web服務。
第九步 Angular JS 前端
Forge預設支援JSF。但是你也可以選擇其他技術,例如Angularjs。為了使用Angularjs,我們需要安裝相應插件。
在Forge控制台輸入如下指令安裝Forge Angularjs插件。
[todoapp] todoapp $ forge install-plugin angularjs
安裝之後配置一下。
[todoapp] todoapp $ scaffold-x setup --scaffoldType angularjs
這會在我們的待辦應用中設定Angularjs。現在我們可以為Todo實體生成視圖了。
[todoapp] model $ scaffold-x from Todo.java
第十步 部署到OpenShift
萬事具備,隻欠部署。 OpenShift的JBoss工具使從Eclipse部署Java應用非常友善。
在eclipse中點選 File > New > Other > OpenShift Application,在下圖所示頁面中點選“下一步”:
需要填寫OpenShift賬号資訊,如果你還沒有注冊,你可以點選“現在注冊”,會有一個向導界面引導你注冊。
接下來要建立一個OpenShift域名。每一個賬号有且僅有一個獨特的域名。域名構成了OpenShift配置設定給應用的URL的一部分。例如,如果你的應用的名字是“awesomeapp”,你的域名是“onopenshiftcloud”,那麼應用的URL就是
http://awesomeapp-onopenshiftcloud.rhcloud.com建立域名之後,會出現一個建立應用的引導界面。你需要填寫相應的資訊。我們将建立一個名為todoapp的應用,該應用使用 jbosseap-6 。
然後會要求我們設定應用,配置适配伺服器。保留預設選項,點選“下一步”即可。
接着會詢問關于git倉庫的一些資訊。保留預設選項即可。
最後,點選“完成”按鈕。這将為我們建立一個應用容器(gear),自動配置SELinux和cgroup。OpenShift同時将建立一個私有的git倉庫并克隆到本地。然後會配置DNS。最後,這個項目将被倒入你的esclipse工作空間。
OpenShift Clipse會合并改動,并詢問是否将應用代碼推送到OpenShift。
你可以通過通路
http://todoapp-{domain-name}.rhcloud.com 檢視應用。将
{domain-name}
替換為你的OpenShift賬戶域名。
結語
本文介紹了如何使用JBoss Forge和OpenShift Eclipse內建來建立一個Java EE應用。OpenShift Eclipse插件很好用。是以說,如果你是個尋找部署環境的Java (EE) 開發者,那麼你可以嘗試下 OpenShift。