播放框架模塊:分而治之

通常情況是您開始開發應用程序并繼續滿足要求。 當您的應用程序變得更大時,您開始意識到將其分為不同組件的便利。 而且,當您開發第二個或第三個應用程序時,您開始認識到可以在不同應用程序之間重用的某些功能。

這是模塊化應用程序的兩個很好的理由。 理想情況下,我們應該針對具有高內聚力和低耦合的組件。

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374493.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374493.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374493.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Alpha階段項目總結

1.我們的軟件要解決什么問題&#xff1f;是否定義得很清楚&#xff1f;是否對典型用戶和典型場景有清晰的描述&#xff1f; 我們的軟件是一款針對健康飲食而做的一款飲食健康軟件&#xff0c;對生活中我們經常遲到的很多事物組合都進行了詳細的注解&#xff0c;用戶可以清楚地看…

實用的it知識學習_怎樣能更快更好的學習好書法?分享一些比較實用的理論知識...

如何能更快更高效的學習書法&#xff1f;首先了解一些書法理論知識是很有必要的&#xff01;它能讓你在學習書法的過程中不至于迷茫 &#xff01;能助你更快學好書法&#xff01;一、書論在實踐中產生我們大部分人都覺得學習書法可以沒有理論&#xff0c;但不可無技法。但理論和…

九度oj-1001-Java

題目描述&#xff1a; This time, you are supposed to find AB where A and B are two matrices, and then count the number of zero rows and columns. 輸入&#xff1a; The input consists of several test cases, each starts with a pair of positive integers M and N …

字節流與字符流的區別

最近在項目中遇到一個encoding的問題&#xff0c;記錄一下。 具體而言就是&#xff0c;項目中有A/B兩個部分&#xff0c;A部分由我們負責&#xff0c;Java實現&#xff1b;B部分是UK負責的&#xff0c;使用Delphi&#xff0c;A、B在交互時發送一個http請求&#xff0c; 請求匯總…

通過MOXy實現使JAXB更加清潔

編組和解組XML時使用JAXB的主要優點是編程模型。 只需注釋幾個POJO并使用JAXB API&#xff0c;您就可以很容易地序列化為XML和從XML反序列化。 您無需擔心有關XML如何編組/解組的細節。 一切都比DOM和SAX等替代方案簡單得多。 現在&#xff0c;XML文件中的數據本質上趨于分層。…

android 上下滾動文字_計算機畢設項目004之Android系統在線小說閱讀器

計算機畢設項目004之Android系統在線小說閱讀器一. 項目名稱基于Android系統的在線小說閱讀器二. 項目簡介項目中的角色功能&#xff1a;支持翻頁動畫:仿真翻頁、覆蓋翻頁、上下滾動翻頁等翻頁效果。支持頁面定制:亮度調節、背景調節、字體大小調節支持全屏模式(含有虛擬按鍵的…

697. 數組的度

給定一個非空且只包含非負數的整數數組 nums&#xff0c;數組的 度 的定義是指數組里任一元素出現頻數的最大值。 你的任務是在 nums 中找到與 nums 擁有相同大小的度的最短連續子數組&#xff0c;返回其長度。 來源&#xff1a;力扣&#xff08;LeetCode&#xff09; 鏈接&a…

python math模塊

1.math簡介 >>> import math >>>dir(math) #這句可查看所有函數名列表 [__doc__, __name__, __package__, acos, acosh, asin, asinh, atan, atan2, atanh, ceil, copysign, cos, cosh, degrees, e, erf, erfc, exp, expm1, fabs, factorial, flo…

Visual Studio找不到adb.exe錯誤解決

Visual Studio找不到adb.exe錯誤解決 錯誤信息&#xff1a;Cannot find adb.exe in specified SDK path。出現這種情況&#xff0c;是因為沒有安裝Android SDK Platform-tools。解決辦法&#xff1a;在SDK Manager中&#xff0c;安裝該組件即可。 轉載于:https://www.cnblogs.c…

Vaadin應用程序中的EJB查找

自從我實現上一個服務定位器以來已經有很長時間了。 我認為不再需要考慮Java EE CDI &#xff08;上下文和依賴注入&#xff09;的成熟度。 我的第一個實現是在基于Struts的Web應用程序中使用EJB。 之后&#xff0c;我開始使用JSF&#xff0c;它只需要帶有EJB或Resource的帶注釋…

基線檢查工具_最新版CAD燕秀工具箱2.87(支持20042021)

好課推薦&#xff1a;零基礎CAD&#xff1a;點我CAD家裝&#xff1a;點我 周站長CAD&#xff1a;點我CAD機械&#xff1a;點我revit教程&#xff1a;點我CAD建筑&#xff1a;點我CAD三維&#xff1a;點我全屋定制&#xff1a;點我 ps教程&#xff1a;點我蘋果版CAD:點我 3dmax教…

團隊項目記錄2

遇到的問題&#xff1a;在對Trigger機關進行測試時發現&#xff0c;畫出的軌道也會將機關觸發。 問題描述&#xff1a;Trigger機關的作用是在發生碰撞時運行腳本中指定的特定物體的特定函數&#xff0c;在這個例子當中特定的物體是一塊地板&#xff0c;特定的函數的功能是刪除這…

關于java.lang.ArithmeticException

java.lang.ArithmeticException “數學運算異常”&#xff0c;可能是自己的數學運算公式出現了錯誤、違反了數學運算規則。錯誤記錄&#xff1a; 出錯原因&#xff1a; a % b 中b不能為0

1103. Integer Factorization (30)

題目如下&#xff1a; The K-P factorization of a positive integer N is to write N as the sum of the P-th power of K positive integers. You are supposed to write a program to find the K-P factorization of N for any positive integers N, K and P. Input Specifi…

Java EE 6與Spring Framework:技術決策過程

在過去的幾個月中&#xff0c;我們經歷了這個決策過程&#xff1a;為Java平臺上的企業開發選擇哪種技術堆棧&#xff1f; 有多種選擇。 但是&#xff0c;我們深入討論的是&#xff1a;純Java EE 6堆棧與帶有Java EE的Spring。 以下博客文章總結了當您考慮這些技術堆棧選項之一時…

DOM 基礎 HTML標簽 元素 屬性

什么是HTML標簽 HTML標簽標記了HTML文檔和HTML元素 HTML標簽由開始標簽和結束標簽組成.開始標簽為尖括號包圍的元素名,結束標簽為尖括號包圍的斜杠和元素名 例如:<h2> My First Heading</h2> HTML基本標簽 標題(Heading)是通過h1 - h6等標簽進行定義的.段落 是通過…

允許服務與桌面交互_vivo 正式推出 Origin OS,融合自然設計與全新交互

點擊右上角關注我們&#xff0c;每天給您帶來最新最潮的科技資訊&#xff0c;讓您足不出戶也知道科技圈大事&#xff01;今天下午&#xff0c;vivo 推出了全新 Origin OS 手機系統。它采用了源于自然界的設計理念&#xff0c;同時加入了全新并且允許用戶進行深度自定義的交互方…

Error - Found cycle in the ListNode

Error - Found cycle in the ListNode 刷力扣時遇到這個錯誤&#xff0c;節點成環 自己摸索了一下發現確實形成循環&#xff0c;原題是206反轉鏈表&#xff0c;我用的是棧&#xff0c;先將鏈表節點依次進棧&#xff0c;然后依次出棧鏈接&#xff0c;構成反轉。但是我忽略了第一…

JUnit 4.9(測試版3)中的規則

不久前&#xff0c; David Saff宣布了JUnit 4.9的beta版 。 因此&#xff0c;我認為現在是研究該版本中的新增功能的好時機。 JUnit領域中最有用的創新之一是Rule。 我在這里寫了有關規則的文章 。 我在這里寫了有關JUnit規則的用例 。 規則很棒。 借助JUnit 4.9&#xff0c;它…

計算機網絡-終端

我們常用的電腦來說&#xff0c;外圍設備就是終端。 外圍設備包括顯示器、鼠標、鍵盤等等。 負責向主機輸入數據的就叫輸入終端&#xff0c;比如鼠標、鍵盤、麥克風、攝像頭&#xff1b; 負責接收主機輸出數據的設備就被稱作輸出終端&#xff0c;比如顯示器、耳機。 注意一點…