通常情况是您开始开发应用程序并继续满足要求。 当您的应用程序变得更大时,您开始意识到将其分为不同组件的便利。 而且,当您开发第二个或第三个应用程序时,您开始认识到可以在不同应用程序之间重用的某些功能。

这是模块化应用程序的两个很好的理由。 理想情况下,我们应该针对具有高内聚力和低耦合的组件。

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

播放框架模块:分而治之相关推荐

  1. 分而治之_播放框架模块:分而治之

    分而治之 通常情况是您开始开发应用程序并继续满足需求. 当您的应用程序变得更大时,您开始意识到将其分为不同组件的便利. 而且,当您开发第二个或第三个应用程序时,您开始认识到可以在不同应用程序之间重用的 ...

  2. openshift_云上的播放框架变得简单:Openshift模块

    openshift 仅仅几年前,找到一个负担得起的Java Web应用程序托管解决方案是一项艰巨的任务,而寻找免费的托管解决方案是一项不可能的任务. 更不用说考虑自动缩放,单命令部署,持续集成等问题了 ...

  3. 云上的播放框架变得简单:Openshift模块

    仅仅几年前,找到一个负担得起的Java Web应用程序托管解决方案是一项艰巨的任务,而寻找免费的托管解决方案是一项不可能的任务. 更不用说甚至考虑自动缩放,单命令部署,持续集成等事情,这都是科幻小说. ...

  4. 【Qt 开源音视频框架模块QtAV】03:QTAV主要接口展示以及播放器源码分享

    介绍 QtAV 是一个基于 Qt 和 FFmpeg 的跨平台.高性能多媒体播放框架,能够帮助你轻而易举地编写出一个播放器. [Qt 开源音视频框架模块QtAV]01:介绍.编译以及简单使用 因为网上使 ...

  5. 【Qt 开源音视频框架模块QtAV】02:QTAV多功能播放器

    前言 在[Qt 开源音视频框架模块QtAV]01:介绍.编译以及简单使用中我们已经完成了QTAV的项目部署和简单案例的测试,下面我再分享下QTAV提供的播放器例程. 程序功能效果展示 演示的项目在QT ...

  6. 【Android 逆向】Frida 框架 ( Frida 框架使用环境 | Frida 框架作用 | Frida 框架模块 )

    文章目录 一.Frida 框架使用环境 二.Frida 框架作用 三.Frida 框架模块 一.Frida 框架使用环境 Frida 官网 : https://frida.re/ Frida 源码 : ...

  7. 组件 模块 插件_播放2 –模块,插件有什么区别?

    组件 模块 插件 关于Play 2模块和插件似乎有些困惑. 我想这是因为两者经常是同义词. 在Play(两个版本-1和2)中,存在明显的差异. 在本文中,我将研究什么是插件,如何在Java和Scala ...

  8. 播放2 –模块,插件有什么区别?

    关于Play 2模块和插件似乎有些混乱. 我想这是因为两者经常是同义词. 在Play(两个版本-1和2)中,存在明显的差异. 在本文中,我将介绍什么是插件,如何在Java和Scala中实现插件,以及如 ...

  9. php 跳转qq群代码_邪少xml论坛qqxml代码—QQ音乐可播放框架QQ群任意跳转个人网站链接引流...

    邪少XML论坛xml代码-QQ音乐可播放框架 效果图: 代码如下: <?xml version='1.0' encoding='UTF-8' standalone='yes' ?>< ...

最新文章

  1. 美国卡尔顿学院计算机专业怎么样,美国卡尔顿学院排名
  2. keycloak mysql_Keycloak换mysql存储详细步骤
  3. mysql 类型解释_MySQL 数据类型说明解释
  4. 【算法导论】学习笔记——第16章 贪心算法
  5. MySQL的常见存储引擎介绍与参数设置调优(转载)
  6. windows驱动开发学习
  7. 如何基于MindSpore实现万亿级参数模型算法?
  8. MySQL 左右两表比较问题
  9. matlab多径瑞利衰落信道,Matlab仿真多径信道瑞利衰落
  10. iPadOS、iOS13降级iOS12.3.1方法
  11. FatFs- 通用FAT文件系统模块
  12. lumion鸟瞰图---制作心得
  13. 全国高中数学联赛——数论
  14. 星际争霸2神族全兵种介绍
  15. 2021-05-03Wireshark流量包分析
  16. python eel vue_张莽子—
  17. 腾讯手游助手吃鸡一直服务器繁忙,腾讯手游助手吃鸡手游常见问题解决办法介绍...
  18. xilinx fpga学习笔记5:Xst综合属性
  19. armadillo库安装教程
  20. Python VLC+PyQt5 读取视频音频流

热门文章

  1. 如何用css3实现简单旋转的风车
  2. 文档 修订 非修订区别_修订和不变性
  3. jboss fuse 教程_IDC关于使用JBoss Fuse的商业价值的报告(与Apache Camel一起使用)
  4. 使用自动伸缩组在AWS中运行安全数据库集群
  5. 通过READ-BEHIND CACHE来控制缓慢的生产者
  6. 使用Open Liberty的开发模式最大程度地缩短周转时间
  7. JDBC –模拟序列
  8. 新的DMN编辑器预览
  9. q7goodies事例_Java 8 Friday Goodies:Lambda和XML
  10. java创建类的三个步骤_3个简单步骤即可测试Java 8