這是模塊化應用程序的兩個很好的理由。 理想情況下,我們應該針對具有高內聚力和低耦合的組件。
Java語言已經證明自己很適合完成此類任務。 它提供了通過接口,抽象類等強制使用定義良好的API的通用方法。
Play框架開發人員認為,這對于開發通用庫是完全合適的,但是在Web應用程序的情況下,可通過其他方式最好地實現可重用性和模塊化。 看一下摘自play框架的FAQ的摘錄:
Java本身是一種非常通用的編程語言,最初并不是為Web應用程序開發而設計的。 編寫通用且可重用的Java庫并創建Web應用程序是完全不同的事情。 Web應用程序本身不必設計為可重用。 您需要更少的抽象,更少的配置。 Web應用程序確實存在可重用性,但是可通過Web服務API而不是語言級集成來實現。
因此,在可重用性方面,play為我們提供了更適合Web應用程序的解決方案。
播放模塊
模塊只是另一個Play框架應用程序。 唯一的區別是,模塊并非要自己運行,而必須包含在包含應用程序中。
但是,模塊和常規應用程序之間存在一些區別,主要是模塊沒有conf文件(必須由主應用程序提供),并且模塊中的所有內容都是可選的。
這樣做總比說好,所以像往常一樣,我們將尋找一個很好的機會來制作一個簡單的模塊來演示其工作原理。
創建一個新的播放框架應用程序并將其部署到云中
眾所周知,我們正在研究play framework site的西班牙語翻譯 。 我們想向其中添加網絡分析,以便我們可以看到人們如何使用它。
因此,為了遵循此示例,我們需要在Internet上某個位置部署一個play framework應用。 如今,有許多免費的Java托管選項。 在這里,您有一些教程可以在openshift , google application engine和heroku上進行部署。 首先讓我們創建一個Play框架應用程序,然后在?/ devel / apps / module-test中創建該應用程序,您可以選擇任意位置,只需確保適當地更新命令即可。 要創建應用,請在os提示符下運行以下命令:
sas@ubuntu:~/devel/apps/module-test$ play new analytics-app~ _ _ ~ _ __ | | __ _ _ _| |~ | '_ \| |/ _' | || |_|~ | __/|_|\____|\__ (_)~ |_| |__/ ~~ play! 1.2.4, http://www.playframework.org~~ The new application will be created in /home/sas/Dropbox/Public/devel/play/apps/module-test/analytics-app~ What is the application name? [analytics-app] ~~ OK, the application is created.~ Start it with : play run analytics-app~ Have fun!
現在是將它部署到某個地方的好時機。 對于本教程,我們將在openshift上進行部署,您可以使用所需的任何主機(有關為openshift部署設置環境的更多信息,請遵循本教程 )
在?/ devel / apps / module-test / openshift中創建一個新目錄,轉到該目錄并運行:
rhc-create-app -l mymail@mail.com -p mypassword -t jbossas-7.0 -a analyticsappAttempting to create remote application space: analyticsappNow your new domain name is being propagated worldwide (this might take a minute)...Pulling new repo down[...]Successfully created application: analyticsapp
接下來,我們將擺脫演示應用程序:
cd ~/devel/apps/module-test/openshift/analyticsapprm -fr pom.xml src
然后,我們會將新創建的應用程序編譯并打包為爆炸戰爭。 轉到?/ devel / apps / module-test文件夾并運行:
cd ~/devel/apps/module-testplay war analytics-app -o openshift/analyticsapp/deployments/ROOT.war~ _ _ ~ _ __ | | __ _ _ _| |~ | '_ \| |/ _' | || |_|~ | __/|_|\____|\__ (_)~ |_| |__/ ~~ play! 1.2.4, http://www.playframework.org~JPDA port 8000 is already used. Will try to use any free port for debuggingListening for transport dt_socket at address: 5397800:22:38,021 INFO ~ Starting /home/sas/Dropbox/Public/devel/play/apps/module-test/analytics-app00:22:39,891 INFO ~ Precompiling ...00:22:49,075 INFO ~ Done.~ Packaging current version of the framework and the application to /home/sas/Dropbox/Public/devel/play/apps/module-test/openshift/analyticsapp/deployments/ROOT.war ...~ Done !~~ You can now load /home/sas/Dropbox/Public/devel/play/apps/module-test/openshift/analyticsapp/deployments/ROOT.war as a standard WAR into your servlet container~ You can't use play standard commands to run/stop/debug the WAR application...~ ... just use your servlet container commands instead~~ Have fun!~
現在我們只需要提交應用程序并將其推送到openshift上的git repo中:
cd ~/devel/apps/module-test/openshift/analyticsapptouch deployments/ROOT.war.dodeploygit add -Agit commit -m "deploy play framework app"git push origin
注意:由于播放框架庫的原因,第一次需要幾分鐘來推送應用程序。 以后的推送會更快,git足夠聰明,只發送更新的文件。
就是這樣,您剛剛將第一個應用程序部署到了紅帽的云中。 您可以在http://analyticsapp-opensas.rhcloud.com/上看到它正在運行(當然,您必須用自己的openshift用戶名替換“ opensas”)。
Google Web分析和播放框架
將Google Web分析添加到Play應用程序非常簡單。 您只需要一個gmail帳戶,然后轉到Google Analytics(分析)網站 ,單擊“注冊”,使用您的gmail帳戶登錄,并完成所有必需的數據。
在帳戶名中輸入“ analytics-app”,在網站的URL中輸入http://analyticsapp-opensas.rhcloud.com,同意條款和條件,然后單擊“創建帳戶”。
您將被帶到您的analytics-app帳戶頁面,在那里您可以看到跟蹤代碼。 您只需要將其粘貼到您的應用中即可。 因此,請在?/ devel / apps / module-test / analytics-app / app / views / main.html中打開文件,然后將跟蹤代碼粘貼到關閉的head標簽之前,如下所示:
[...]<script src="@{'/public/javascripts/jquery-1.6.4.min.js'}" type="text/javascript" charset="${_response_encoding}"></script>#{get 'moreScripts' /}<script type="text/javascript">var _gaq = _gaq || [];_gaq.push(['_setAccount', 'UA-XXXXXXXX-1']);_gaq.push(['_trackPageview']);(function() {var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);})();</script></head><body>[...]
注意:Google將為您提供自己的UA-XXXXXXXX-1帳戶代碼,因此只需從Google Analytics(分析)帳戶頁面(而不是此頁面)復制并粘貼代碼!
現在,您只需要生成war文件夾,提交并再次將其推送到openshift即可部署您的更改。 每次進行更改時,都必須遵循以下相同步驟將其部署到openshift。
cd ~/devel/apps/module-testplay war analytics-app/ -o openshift/analyticsapp/deployments/ROOT.warcd openshift/analyticsapp/git add -Agit commit -m "added tracking code"git push origin
在http://analyticsapp-opensas.rhcloud.com/上再次訪問您的頁面,并查看頁面源代碼以檢查是否已添加跟蹤代碼。 您還可以在Google的分析頁面上查看它的運行情況,單擊“主頁”,實時(BETA)和“概述”。 您應該有一位訪客(是的,是您!)。
到目前為止,我們已經創建了一個新的play應用程序并將其部署到openshift。 然后,我們創建了一個Google分析帳戶,并將跟蹤代碼添加到我們的游戲應用程序中。 一切正常,Google正在跟蹤我們的應用。 現在,我們將將該功能移至模塊,以便我們可以從其他應用程序中重復使用它。
創建一個模塊
要創建一個新模塊,您必須使用“ new-module”播放命令,如下所示:
cd /home/sas/devel/apps/module-test/play new-module analytics
現在,為了告訴我們的主要應用程序(在我們的分析應用程序中)包括此模塊,我們必須配置一個本地存儲庫 。
像這樣編輯?/ devel / apps / module-test / analytics-app / conf / dependencies.yml:
# Application dependenciesrequire:- play- analytics -> analyticsrepositories:- My local modules:type: localartifact: ${application.path}/../[module]contains:- analytics
然后運行以下命令,告訴play解決依賴關系。
cd ~/devel/apps/module-test/analytics-appplay dependencies~ _ _ ~ _ __ | | __ _ _ _| |~ | '_ \| |/ _' | || |_|~ | __/|_|\____|\__ (_)~ |_| |__/ ~~ play! 1.2.4, http://www.playframework.org~~ Resolving dependencies using /home/sas/devel/apps/module-test/analytics-app/conf/dependencies.yml,~~ analytics->analytics -> (from My local modules)~~ Installing resolved dependencies,~~ modules/analytics -> /home/sas/devel/apps/module-test/analytics/../analytics~~ Done!~
現在,您可以在工作站上啟動主應用程序:
cd ~/devel/apps/module-test/analytics-appplay run
您可以在http:// localhost:9000看到您的應用程序正在運行。
將跟蹤代碼移至可重復使用的標簽
現在,我們將跟蹤代碼移動到模塊中定義的標記中,因此我們將使用跟蹤代碼創建文件?/ devel / apps / module-test / analytics / app / views / analytics.html,如下所示:
<script type="text/javascript">var _gaq = _gaq || [];_gaq.push(['_setAccount', 'UA-XXXXXXXX-1']);_gaq.push(['_trackPageview']);(function() {var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);})();</script>
現在,用對代碼的調用替換main.html中的跟蹤代碼,如下所示:
[...]<script src="@{'/public/javascripts/jquery-1.6.4.min.js'}" type="text/javascript" charset="${_response_encoding}"></script>#{get 'moreScripts' /}#{analytics /}</head>[...]
從application.conf文件獲取模塊配置
我們的模塊幾乎準備就緒,只有一件事阻止了我們真正在其他應用程序上重用它:Google Analytics(分析)代碼硬編碼在我們的代碼中!
因此,我們將從application.conf文件中讀取它。 只需像這樣編輯analytics.html標記:
%{String code = play.Play.configuration.getProperty("analytics.code", "")}%#{if code!=""}<script type="text/javascript">var _gaq = _gaq || [];_gaq.push(['_setAccount', '${code}}']);_gaq.push(['_trackPageview']);(function() {var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);})();</script>#{/if}
并將以下內容添加到您的主應用程序配置文件中,該文件位于?/ devel / apps / module-test / analytics-app / conf / application.conf
analytics.code=UA-XXXXXXXX-1
防止在開發人員模式下進行跟蹤
每次渲染頁面時,即使我們在開發工作站上工作,此標記也將更新跟蹤器!
因此,我們將進行一些小的改進,以防止模塊在開發模式下工作時記錄頁面活動。
只需將以下條件添加到代碼中:
%{String code = play.Play.configuration.getProperty("analytics.code", "")}%#{if play.mode.isProd() && code!=""}<script type="text/javascript">var _gaq = _gaq || [];[...]
Openshift故障排除
Openshift無法解析相對于模塊位置的相對引用(實際上,任何部署在戰爭中的應用程序都會遇到相同的問題),因此您必須告訴play將模塊源復制到包含應用程序之前,戰爭文件夾。 只是發出:
cd ~/devel/apps/module-test/analytics-appplay dependencies --forceCopy
就是這樣,現在您可以按常規方式部署到openshift:
cd ~/devel/apps/module-testplay war analytics-app/ -o openshift/analyticsapp/deployments/ROOT.warcd openshift/analyticsapp/git add -Agit commit -m "added analytics module"git push origin
使用“ play run”在本地運行您的網站,還可以從http://analyticsapp-opensas.rhcloud.com/打開它,檢查兩個網站的源代碼,您應該看到在openshift上運行的應用包含跟蹤代碼,與您的本地申請相反。
結論
在這篇文章中,我們看到了如何將play框架應用程序部署到openshift,更重要的是,如何將功能從應用程序轉移到模塊,以便從其他應用程序重用它。
您可以在本文上了解有關模塊的更多信息,或閱讀play框架文檔 。
如果您說西班牙語,則可以幫助我們進行翻譯 ,也可以在這里查看我們的工作…您可以確保您獲得的每次點擊都將得到跟蹤!
參考: Play框架模塊:在“ 玩轉Play框架”中,與我們的JCG合作伙伴 Sebastian Scarano進行了分而治之 ! 博客
相關文章 :
- 玩! 框架:為什么我會愛上它
- 簡單的Twitter:Heroku上的Play框架,AJAX,CRUD
- RabbitMQ播放模塊! 構架
- Google App Engine上的Spring MVC和REST
- Spring MVC開發–快速教程
- Spring MVC3 Hibernate CRUD示例應用程序
翻譯自: https://www.javacodegeeks.com/2012/01/play-framework-modules-divide-and.html