那時,無論我想試用哪種云服務,都需要我提供我的信用卡詳細信息,甚至還可以試用試用應用程序。 我不太想提供我的信用卡詳細信息,只是為了嘗試我的一些應用程序。 因此,盡管我一直在閱讀有關其他開發人員在將其應用程序部署到云上的工作,但我還是有點放棄在云上試用我的應用程序的想法。
大約在同一時間,我遇到了一篇詳盡的文章,內容涉及一位開發人員如何在Google App Engine – Part1 , Part2上設置涉及Weld和JSF的應用程序。 該博客寫得很好,并解釋了在云服務上啟動并運行Java EE應用程序所需的條件。 但是這些文章中的重要信息是,擁有按Java EE標準(可移植)實現的應用程序的用戶必須更改許多應用程序部分才能使其在云上運行。 這是因為云服務提供商不支持許多Java EE技術。 這看起來對我沒有吸引力。 畢竟,這樣做會給我帶來什么好處。 因此,在那時,作為Java EE開發人員,我對在云上部署應用程序的實驗不太感興趣。
輸入OpenShift!
但是,本月,關于能夠將JBoss AS7 Java EE應用程序部署到云的OpenShift公告引起了我的注意。 順便說一句,我確實在RedHat工作,并且是JBoss AS7團隊的一員,但是我沒有一直在關注OpenShift團隊的工作,所以這一宣布令人驚喜! 因此,我決定嘗試一下。 閱讀項目站點上的一些文檔之后,我發現OpenShift提供了兩種不同的服務。 一個是“ OpenShift Express”,另一個是“ OpenShift Flex”。 OpenShift Express是免費使用的(對我來說是個好消息),而OpenShift Flex需要您的Amazon EC2憑證,您需要為EC2的使用付費(但是目前正在進行免費試用)。 我決定嘗試一下OpenShift Express,因為它是免費的,并且適合我目前的需要,只需嘗試快速簡單的Java EE應用程序部署以及對該應用程序的訪問即可。
因此,這就是我能夠將Java EE應用程序部署到OpenShift Express的過程,該應用程序使用Java EE6 Web配置文件中可用的技術,并且可以在本地AS7實例上很好地部署。 您可能已經猜到我不是OpenShift(或一般的云服務)專家,因此本文沒有任何高級技術細節,但包含更多有關將Java EE應用程序部署到OpenShift Express的方法。 。
因此,讓我們開始吧。
注冊
第一步是在這里注冊,為自己創建一個帳戶。 注冊僅需要一個有效的電子郵件地址,您的帳戶詳細信息將被發送到該電子郵件地址。 注冊后,您會收到一封郵件,其中包含用于激活您的帳戶的鏈接,并將帶您進入登錄屏幕。 使用您以前注冊的電子郵件ID和密碼登錄。
獲得對OpenShift Express的訪問權限
因此,讓我們進入OpenShift Express頁面 。 在該頁面上,您會注意到左側的“快速訪問訪問權限”按鈕。 單擊它可以訪問“快速”。 我們會通過郵件通知您(立即)您注冊的電子郵件ID。 檢查包含快速入門指南鏈接的郵件,以幫助您開始使用OpenShift Express。
安裝客戶端工具
快速入門包含指導您開始安裝過程的說明。 第一步包括在系統上安裝一些客戶端工具,以幫助您與OpenShift進行交互。 請按照這些說明來安裝客戶端工具(由于在該指南中已對此進行了很好的說明,因此在此不再贅述)。
建立網域
現在有了客戶端工具后,就可以在OpenShift云上設置“域”了。 設置域將創建可用于您的應用程序的唯一域名。 域名將是URL的一部分,您將使用該域名來訪問該應用程序,并將其發布給用戶以進行訪問。 創建域的命令很簡單:
rhc-create-domain -l <email-id-you-registered-with> -n <domain-name-of-your-choice>
運行該命令將詢問您用于注冊的密碼。 輸入該密碼,然后完成命令(幾秒鐘)。
“ rhc-create-domain”是您先前安裝的客戶端工具的一部分。 如果尚未安裝這些工具,那么您將無法使用這些命令,因此請不要錯過這一步! “ rhc-create-domain”接受更多可選參數。 要查看可接受的參數列表,可以運行以下命令:
rhc-create-domain --help
創建一個jbossas-7.0應用程序
成功創建域后,下一步就是創建“應用程序”。 當前,OpenShift Express支持不同的“類型”的應用程序,每個應用程序都由Git (版本控制系統)支持。 在撰寫本文時,支持的應用程序類型為jbossas-7.0,perl-5.10,rack-1.1,wsgi-3.2和php-5.3。 我對部署Java EE應用程序感興趣,因此我將創建一個“ jbossas-7.0”應用程序。 這種類型的應用程序在OpenShift云中為您提供了JBoss AS 7.0.0實例,您可以在其中部署應用程序。 現在讓我們創建一個類型為jbossas-7.0的應用程序。
請注意,術語“應用程序”可能有點令人困惑(至少我發現它有點令人困惑),因為此時您要做的只是設置JBoss AS7服務器。
創建應用程序的命令是rhc-create-app。 rhc-create-app接受多個選項。 有關選項的完整列表,請運行:
rhc-create-app --help
要創建jbossas-7.0應用程序,我們將運行以下命令:
rhc-create-app -a <application-name> -l <email-id-you-used-to-register> -t jbossas-7.0 -r <path-on-local-filesystem-for-the-repository>
運行該命令將詢問您用于注冊的密碼。 輸入該密碼,然后完成命令(幾秒鐘)。
-a選項可讓您指定應用程序的名稱。 該名稱將成為您用來訪問應用程序的URL的一部分。 如果您的應用程序名稱為“ foo”,(先前創建的)域名為“ bar”,則用于訪問您的應用程序的URL為http://foo-bar.rhcloud.com/。
該命令中的-t選項指定應用程序類型。 在我們的案例中,我們對jbossas-7.0感興趣
另一個重要的選項是-r選項,您將使用它來指向本地文件系統上的文件夾,OpenShift將在其中存儲與應用程序相關的所有數據。 該數據的一部分將是git repo(版本控制系統)的本地副本。 我們稍后將在此博客中更詳細地介紹這一點。
訪問您的服務器URL
因此,一旦您運行命令并成功完成命令,它將打印出該應用程序可用的URL。 您可以(立即)使用該URL訪問該應用程序。 訪問該URL時,您會注意到一個歡迎頁面,這表明該應用程序已成功安裝并且可以訪問。 對我來說,新創建的應用程序的URL是http://jaikiran-jbossas.rhcloud.com/ 。
因此,在這一點上,我們先創建了一個域,然后創建了一個應用程序,并確保世界可以訪問該域。 簡而言之,您的云服務器已啟動并正在運行,現在您可以將Java EE應用程序部署到該服務器上。
創建和部署Java EE應用程序
現在,讓我們轉到創建和部署Java EE應用程序的步驟。 我沒有任何特定的應用程序,但是想部署一個涉及訪問數據庫的應用程序。 我決定使用JBoss AS7隨附的一種快速入門應用程序,而不是創建一個全新的應用程序。 JBoss AS7的快速入門應用程序可在此處下載。 下載快速入門檔案后,將其解壓縮到您選擇的位置。 構建快速入門示例將需要在系統上安裝Maven構建工具。 有關快速啟動應用程序以及如何構建它們的詳細信息,請參見此處 。 那些有興趣親自嘗試的人可能會想看看該指南。
從這些快速入門中,我選擇了“ kitchensink”應用程序。 kitchensink應用程序使用Java持久性API(JPA)來實現持久性,并且默認情況下使用JBoss AS7默認提供的java:jboss / datasources / ExampleDS。 ExampleDS使用H2作為數據庫,這是persistence.xml的樣子:
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="primary"> <!-- If you are running in a production environment, add a managed data source, the example data source is just for proofs of concept! --> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source> <properties> <!-- Properties for Hibernate --> <property name="hibernate.hbm2ddl.auto" value="create-drop" /> <property name="hibernate.show_sql" value="false" /> </properties> </persistence-unit> </persistence>
現在,這足以說明我如何部署應用程序以及OpenShift Express中可用的數據庫支持。
構建應用程序后 ,可部署的戰爭名為jboss-as-kitchensink.war,可在我的本地文件系統上使用。 下一步是將其部署到我們已在OpenShift Express云中設置的JBoss AS7服務器上。 讓我們看看如何完成。
將應用程序部署到OpenShift Express
記住,在使用rhc-create-app命令創建“應用程序”時,我們使用-r選項指向本地文件系統上的文件夾來創建應用程序存儲庫的本地副本。 那就是現在將用于部署我們的應用程序的地方。 就我而言,我使用/ home / jpai / OpenShift / myapps / demo作為存儲庫位置。 該文件夾的外觀如下:
demo | |--- deployments | |--- pom.xml | |--- README | |--- src
將應用程序部署到OpenShift Express的方法不止一種。 一種方法是編寫代碼,然后在本地存儲庫的src文件夾中提交源代碼,然后將更改推送到遠程git存儲庫。 然后,這將觸發您的項目在遠程存儲庫上的Maven構建。 有關此方法的更多詳細信息, 請參見此博客 。
在我們的案例中,我們將重點介紹如何將已構建的Java EE應用程序部署到您的OpenShift Express云服務器。 在上一步中,我們構建了jboss-as-kitchensink.war。 現在,將該戰爭文件復制到本地git存儲庫的“ deployments”子文件夾中。 在這種情況下,它是/ home / jpai / OpenShift / myapps / demo / deployments:
cp /home/jpai/jboss-as-quickstarts-7.0.0.Final/kitchensink/target/jboss-as-kitchensink.war /home/jpai/OpenShift/myapps/demo/deployments
將其復制到此處后,下一步是使用git commit命令“提交”此更改:
jpai@jpai-laptop:demo$ git add deployments/jboss-as-kitchensink.war jpai@jpai-laptop:demo$ git commit -m "Deploy kitchensink application" deployments/jboss-as-kitchensink.war [master 1637c21] Deploy kitchensink application 1 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 deployments/jboss-as-kitchensink.war
因此,此時您的廚房應用程序已提交到本地git repo。 接下來,我們應該將此提交“推送”到遠程git repo:
jpai@jpai-laptop:openshift$ git push origin master Counting objects: 6, done. Delta compression using up to 2 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 393.71 KiB, done. Total 4 (delta 1), reused 0 (delta 0) remote: Stopping application... remote: done remote: Found .openshift/config/standalone.xml... copying to ... .... .... .... remote: Starting application...done To ssh://6a7ff43a6c2246999de28219a5aaa4ae@jaikiran-jbossas.rhcloud.com/~/git/jaikiran.git/ 6e57976..1637c21 master -> master
(從上面的輸出中整理了一些日志)。
因此,通過“推送”,我們現在將我們的應用程序部署到了遠程OpenShift Express JBoss AS7服務器。 jboss-as-kitchensink.war將部署在“ jboss-as-kitchensink” Web應用程序上下文中。 因此,用于訪問該應用程序的URL為http://jaikiran-jbossas.rhcloud.com/jboss-as-kitchensink 。 繼續并訪問該URL。 該應用程序沒有任何花哨的功能–它允許您添加用戶名,電子郵件和電話號碼,然后將其存儲在數據庫中。

就像我之前提到的,kitchensink應用程序使用ExampleDS數據源,該數據源由H2數據庫支持。 因此,所有數據都將遠程存儲在H2數據庫中。
使用OpenShift Express中可用的MySQL數據庫
創建jbossas-7.0應用程序類型時,OpenShift Express會為您設置MySQL數據源模板 。 數據庫的詳細信息可以在<path-to-local-repo> /。openshift / config / standalone.xml中找到:
<subsystem xmlns="urn:jboss:domain:datasources:1.0"> <datasources> <datasource jndi-name="java:jboss/datasources/ExampleDS" enabled="true" use-java-context="true" pool-name="H2DS"> <connection-url>jdbc:h2:${jboss.server.data.dir}/test;DB_CLOSE_DELAY=-1</connection-url> <driver>h2</driver> <pool></pool> <security> <user-name>sa</user-name> <password>sa</password> </security> <validation></validation> <timeout></timeout> <statement></statement> </datasource> <datasource jndi-name="java:jboss/datasources/MysqlDS" enabled="false" use-java-context="true" pool-name="MysqlDS"> <connection-url>jdbc:mysql://127.1.1.1:3306/mysql</connection-url> <driver>mysql</driver> <security> <user-name>admin</user-name> <password>changeme</password> </security> </datasource> <drivers> <driver name="h2" module="com.h2database.h2"> <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> </driver> <driver name="mysql" module="com.mysql.jdbc"> <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class> </driver> </drivers> </datasources> </subsystem>
您會注意到,除了AS7中默認提供的ExampleDS外,OpenShift Express還設置了一個MySQL數據源,該數據源可從java:jboss / datasources / MysqlDS獲得。 這里要注意的重要一點是默認情況下它是禁用的(即enabled = false)。 另請注意,密碼為“ changeme”。 基本上,standalone.xml中MysqlDS的此數據源配置作為模板存在。 為了啟用該數據源,我們首先必須為我們的應用程序創建一個MySQL數據庫。 可以通過使用以下命令來完成:
jpai@jpai-laptop:openshift$ rhc-ctl-app -a <application-name> -l <email-id-we-used-to-register> -e add-mysql-5.1
rhc-ctl-app傳遞了應用程序名稱(這是我們在rhc-create-app期間使用的名稱)以及我們的帳戶ID。 此外,我們使用-e選項來指定我們要執行的操作。 在這種情況下,我們發出“ add-mysql-5.1”命令。 運行該命令將要求您輸入帳戶密碼,成功完成后將顯示類似以下內容的輸出:
RESULT: Mysql 5.1 database added. Please make note of these credentials: Root User: admin Root Password: as43n34023n Connection URL: mysql://127.1.1.1:3306/
記下用戶名,密碼和連接URL。 現在,在文本編輯器中打開<repo-home> /。openshift / config / standalone.xml,并更新MysqlDS配置以使用連接URL,用戶名和新密碼。 還將啟用標志設置為“ true”,以便啟用數據源。 最終,數據源配置將如下所示:
<datasource jndi-name="java:jboss/datasources/MysqlDS" enabled="true" use-java-context="true" pool-name="MysqlDS"> <connection-url>jdbc:mysql://127.1.1.1:3306/mysql</connection-url> <driver>mysql</driver> <security> <user-name>admin</user-name> <password>as43n34023n</password> </security> </datasource>
注意連接URL。 它的格式必須為jdbc:mysql:// <ip:port> / dbname。 通常,您根本不需要觸摸該連接URL,因為rhc-ctl-app add-mysql-5.1和數據源模板與IP /端口同步。 要更改的重要部分是密碼和啟用標志。
更新此文件后,保存更改并將其提交到本地git repo:
jpai@jpai-laptop:demo$ git commit -m "Enable the MysqlDS and fix the password" ./ [master dd7b58a] Fix the datasource password 1 files changed, 1 insertions(+), 1 deletions(-) Push these changes to remote repo: jpai@jpai-laptop:openshift$ git push origin master Counting objects: 9, done. Delta compression using up to 2 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (5/5), 494 bytes, done. Total 5 (delta 2), reused 0 (delta 0) remote: Stopping application... remote: done .... ..... remote: Starting application...done To ssh://6a7ff43a6c2246999de28219a5aaa4ae@jaikiran-jbossas.rhcloud.com/~/git/jaikiran.git/ 2d38fa8..dd7b58a master -> master
因此,我們現在添加了MySQL DB并啟用了MysqlDS數據源,該數據源可從服務器上的java:jboss / datasources / MysqlDS jndi名稱獲得。 因此,如果kitchensink應用程序必須使用MySQL作為數據庫而不是H2,那么它所要做的就是使用java:jboss / datasources / MysqlDS。 現在,讓我們編輯前面看到的persistence.xml文件,并使用MysqlDS代替:
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="primary"> <!-- Changed to use MysqlDS --> <jta-data-source>java:jboss/datasources/MysqlDS</jta-data-source> <properties> <!-- Properties for Hibernate --> <property name="hibernate.hbm2ddl.auto" value="create-drop" /> <property name="hibernate.show_sql" value="false" /> </properties> </persistence-unit> </persistence>
另外,為了“表明”該新應用程序已被更新為使用MySQL數據庫,我還編輯了kitchensink應用程序的index.xhtml頁面,以在該頁面上添加一條有關正在使用的MySQL數據庫的消息:
<h3> <span style="color: red;"> This application uses MySQL database as its persistence store </span> </h3>
接下來,我將使用Maven在本地構建kitchensink應用程序,以反映這些更改并生成新的jboss-as-kitchensink.war。 構建完成后,現在讓我們再次將其復制到本地git repo,然后提交更改并將其推送到遠程git repo:
jpai@jpai-laptop:kitchensink$ cp target/jboss-as-kitchensink.war /home/jpai/OpenShift/myapps/demo/deployments
jpai@jpai-laptop:demo$ git commit -m "Use MySQL database for kitchensink application" ./ [master ded2445] Use MySQL database for kitchensink application 1 files changed, 0 insertions(+), 0 deletions(-)
jpai@jpai-laptop:openshift$ git push origin master Counting objects: 7, done. Delta compression using up to 2 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 1.35 KiB, done. Total 4 (delta 2), reused 0 (delta 0) remote: Stopping application... remote: done remote: Found .openshift/config/standalone.xml... copying to... ... ... ... remote: Starting application...done To ssh://6a7ff43a6c2246999de28219a5aaa4ae@jaikiran-jbossas.rhcloud.com/~/git/jaikiran.git/ 1637c21..ded2445 master -> master jpai@jpai-laptop:demo$
(從輸出中整理了一些日志)
因此,在這一點上,我們現在已更改了廚房應用程序以使用MySQL數據庫,并將其部署到我們的OpenShift Express AS7服務器。 因此,讓我們再次訪問應用程序URL http://jaikiran-jbossas.rhcloud.com/jboss-as-kitchensink 。 如您所見,該頁面現在突出顯示了有關正在使用的MySQL DB的消息。 繼續并通過添加一些虛擬用戶信息來試用該應用程序。

而已! 我們已將應用程序成功部署到OpenShift Express服務器,并且該應用程序可供使用。
摘要
到目前為止,使用OpenShift一直是令人愉快的體驗。 我計劃在未來的幾天中使用OpenShift嘗試其他一些事情,并在博客中發布任何有趣的細節。
有用的資源
在部署此應用程序時,我不得不使用一些文檔和OpenShift社區的幫助來了解如何進行全部設置。 以下是與OpenShift相關的有用資源的列表:
OpenShift Express用戶指南
OpenShift論壇
irc.freenode.net上的OpenShift IRC #openshift。 這里的人非常有幫助! 斯科特·斯塔克(Scott Stark)的博客。 Scott的博客通常包含有關OpenShift和OpenShift上AS7的許多有用信息。 斯科特的博客絕對是必讀!
在哪里尋求幫助
通常,OpenShift問題可在OpenShift論壇中得到解答。 對于OpenShift上有關AS7的問題,最好的提問場所是JBoss Cloud Group。
參考: OpenShift Express:在Jaikiran My Wiki博客上從JCG合作伙伴 Jaikiran Pai 部署Java EE應用程序(支持AS7) 。
相關文章 :
- 紅帽Openshift:入門–云中的Java EE6
- Oracle WebLogic Java云服務–幕后花絮。
- Java EE過去,現在和云7
- 在云中開發和測試
- 從Spring到Java EE 6
翻譯自: https://www.javacodegeeks.com/2012/01/openshift-express-deploy-java-ee.html