分而治之

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

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

Java语言已经证明自己很适合完成此类任务。 它提供了通过接口,抽象类等强制使用定义良好的API的通用方法。
Play框架开发人员认为,这对于开发通用库是完全合适的,但是在Web应用程序的情况下,可以通过其他方式最好地实现可重用性和模块化。 看一下摘自play框架的FAQ的摘录:

Java本身是一种非常通用的编程语言,最初并不是为Web应用程序开发而设计的。 编写通用且可重用的Java库并创建Web应用程序是非常不同的事情。 Web应用程序本身不必设计为可重用。 您需要更少的抽象,更少的配置。 Web应用程序确实存在可重用性,但是可通过Web服务API而不是语言级集成来实现。

因此,在可重用性方面,play为我们提供了更适合Web应用程序的解决方案。

播放模块

模块只是另一个Play框架应用程序。 唯一的区别是,模块并非要自己运行,而必须包含在包含应用程序中。
但是,模块和常规应用程序之间存在一些差异,主要是模块没有conf文件(必须由主应用程序提供),并且模块中的所有内容都是可选的。
这样做总比说好,所以像往常一样,我们将寻找一个很好的机会来制作一个简单的模块来演示其工作原理。

创建一个新的播放框架应用程序并将其部署到云中

众所周知,我们正在研究play framework site的西班牙语翻译 。 我们想向其中添加网络分析,以便我们可以看到人们如何使用它。
因此,为了遵循此示例,我们需要在Internet上某个位置部署一个play框架应用。 如今,有许多免费的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足够聪明,只能发送更新的文件。
就是这样,您刚刚将第一个应用程序部署到了Red Hat的云中。 您可以在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中打开文件,然后将跟踪代码粘贴到结束标签的前面,如下所示:

[...]<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. 组件 模块 插件_播放2 –模块,插件有什么区别?

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

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

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

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

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

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

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

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

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

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

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

  8. 魔坊APP项目-27-直播、客户端中调整窗口大小、能播放rtmp格式直播流的播放器模块

    直播 客户端中直播的界面调整和当前窗口一致 live_list.html <!DOCTYPE html> <html lang="en"> <head ...

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

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

最新文章

  1. 2018年人工智能13大预测
  2. kaldi语音识别实战pdf_语音识别相关工具和资料分享
  3. shell 拷贝 一个目录下的所有文件 到 另个目录下_几例实用的Shell脚本
  4. 运营系统的前世今生(1)
  5. java中的字符串相关知识整理
  6. HTML期末作业-宠物网
  7. php文章管理系统_PHP-小程序:(1)开发环境搭建
  8. 第二个冲刺周期第五天
  9. android 播放3gp音频,Android的Media(录音,播放音乐,播放视频等)
  10. java新建json 数组_Java创建JSON对象
  11. 学会数据可视化,轻松做出企业级可视化报表
  12. 在Windows服务器安装禅道
  13. vs2013配置qt5.7.0
  14. mysql 1114错误_mysql出现错误编码1114怎么办
  15. 正确区分标识(zhi)符、关键字与保留字
  16. html图片加载不出来,图片相对路径问题
  17. codewars练习(javascript)-2021/2/17
  18. 全球与中国婴儿零食市场深度研究分析报告
  19. VMware虚拟机复制文件卡死的解决
  20. 高效办公小妙招(三)——15个鲜为人知的的小众网站

热门文章

  1. 将数组前n个和后m-n个整体逆置的实现
  2. 求从 1 到 100 之间所有奇数的平方和
  3. 当当网头部和尾部——CSS源码
  4. 看了通信领域中信息的处理的三种方式我终于知道电报能发送信息的原理了
  5. p2p linux 开源项目,权威开源项目(linux系统、sip、live555)
  6. docker 买了腾讯服务器后的学习
  7. springmvc新建拦截器
  8. centos8启动docker-mysql8容器
  9. java国际化——消息格式化+文本文件和字符集
  10. dmn是大脑中哪个区域_DMN中的函数式编程:感觉就像再次重读我的大学课程一样...