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

分而治之

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

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

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

分而治之

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql身份认证漏洞及利用(CVE-2012-2122)

当连接MariaDB/MySQL时&#xff0c;输入的密码会与期望的正确密码比较&#xff0c;由于不正确的处理&#xff0c;会导致即便是memcmp()返回一个非零值&#xff0c;也会使MySQL认为两个密码是相同的。 也就是说只要知道用户名&#xff0c;不断尝试就能够直接登入SQL数据库。按照…

【剑指offer】十九,数组中出现次数超过一半的数字

题目描述 数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次&#xff0c;超过数组长度的一半&#xff0c;因此输出2。分析&#xff1a;找数组中出现次数超过一半的数字&…

从WEB应用的角度,一个应用都需要维护一些不同作用范围的状态, 请问下面哪些状态作用域是WEB应用特有的:( )

从WEB应用的角度&#xff0c;一个应用都需要维护一些不同作用范围的状态&#xff0c; 请问下面哪些状态作用域是WEB应用特有的&#xff1a;( ADF )A.会话 B.全局 C.线程本地 D.请求 E.本地 F.应用 解析 Web程序对象作用域&#xff1a; 常用的有三个&#xff1a;请求…

Java EE 7中的WebSocket客户端API

在本文中&#xff0c;让我们探索谈论较少的Web Socket Client API&#xff0c;以及如何在Java EE 7容器本身中利用它。 Web套接字服务器API规则 JSR 356的服务器端API&#xff08;Java的Web套接字API&#xff09;最常用于构建Web套接字端点实现。 从客户端的角度来看&#xff…

mongo-express 远程代码执行漏洞(CVE-2019-10758)

前言 mongo-express是一款mongodb的第三方Web界面&#xff0c;使用node和express开发。如果攻击者可以成功登录&#xff0c;或者目标服务器没有修改默认的账号密码&#xff08;admin:pass&#xff09;&#xff0c;则可以执行任意node.js代码。 影响版本 mongo-express&#xff…

【转】深入浅出PageRank算法

原文链接 http://segmentfault.com/a/1190000000711128 PageRank算法 PageRank算法是谷歌曾经独步天下的“倚天剑”&#xff0c;该算法由Larry Page和Sergey Brin在斯坦福大学读研时发明的&#xff0c; 论文点击下载: The PageRank Citation Ranking: Bringing Order to the We…

下面的语言中哪些语言是动态语言( )

下面的语言中哪些语言是动态语言(B ) A.C B.JavaScript C.C D.CSS E.Java F.Objective-C 解析 静态语言&#xff08;强类型语言&#xff09; 静态语言是在编译时变量的数据类型即可确定的语言&#xff0c;多数静态类型语言要求在使用变量之前必须声明数据类型。 例…

https://blog.csdn.net/weixin_40412037/article/details/112235003

一、工具简介 说明&#xff1a; 这是一款基于主机的漏洞扫描工具&#xff0c;采用多线程确保可以快速的请求数据&#xff0c;采用线程锁可以在向sqlite数据库中写入数据避免database is locked的错误&#xff0c;采用md5哈希算法确保数据不重复插入。 本工具查找是否有公开e…

前端工程师能力评估测试题(2020最新版附答案及解析)

1.下列哪个样式定义后,内联(非块状)元素可以定义宽度和高度 (C) A.display:inline B.display:none C.display:block D.display:inherit 解析 2.css属性overflow属性定义溢出元素内容区的内容会如何处理。如果值为 scroll,不论是否需要,用户代理都会提供一种滚动机…

埃氏筛法的一般写法(区间筛法)

问题&#xff1a; 求 $[L, R]$ 之间的素数表 解法&#xff1a; 一个合数 $n$ 的最小素因子不超过 $\sqrt{n}$。 先用埃氏筛法求出 $[1,\lfloor \sqrt{R} \rfloor]$ 上的素数表 再在 $[L, R]$ 上用埃氏筛法求素数 const int N(1e5); bool isprime[N]; int prime[N]; void init()…

滥用static_沉思滥用:“强力使用,破坏滥用”

滥用static前英国首相本杰明迪斯雷利&#xff08;Benjamin Disraeli&#xff09;曾用过一句古话&#xff0c;说这是三种谎言&#xff1a;“谎言&#xff0c;该死的谎言和统计数据”。 这里的暗示是&#xff0c;统计数字很容易弥补&#xff0c;因此不可靠。 但是&#xff0c;统计…

Cobalt strike加载插件出现乱码

问题描述 插件 加载成功出现乱码 解决方法 在Cobalt strike目录下执行命令指定编码打开客户端解决。 java -Dfile.encodingutf-8 -XX:ParallelGCThreads4 -XX:AggressiveHeap -XX:UseParallelGC -Xms512M -Xmx1024M -jar cobaltstrike.jar1 成功解决

新网站链接提交入口攻略

很多网站没有被收录,也没有排名,经常有SEO站长向我抱怨。其实提升网站收录有方法和诀窍的。下面我详细的为大家分享,如何向百度提交链接,提升网站被的机率。 很多新手站长,网站上线后没有主动的向搜索引擎提交,spider在短期内无法第一时间发现新网站,这个时候我们 需要…

MariaDb数据库管理系统的学习(一)安装示意图

MariaDB数据库管理系统是MySQL的一个分支。主要由开源社区在维护&#xff0c;採用GPL授权许可。开发这个分支的原因之中的一个是&#xff1a;甲骨文公司收购了MySQL后&#xff0c;有将MySQL闭源的潜在风险&#xff0c;因此社区採用分支的方式来避开这个风险。 MariaDB的目的是全…

内置序列化技术

本文是我们名为“ 高级Java ”的学院课程的一部分。 本课程旨在帮助您最有效地使用Java。 它讨论了高级主题&#xff0c;包括对象创建&#xff0c;并发&#xff0c;序列化&#xff0c;反射等。 它将指导您完成Java掌握的过程&#xff01; 在这里查看 &#xff01; 目录 1.简…

初级前端工程师笔试技巧总结,祝你顺利拿高分

某大型外包公司安排新人去某大型保险公司驻场开发,简单粗暴的衡量一个工程师的水平就是笔试,这个环节是必不可少的,必须要过了笔试题才能算正式的驻场开发,不然只能是支持,消耗公司资源的废柴,一般笔试会有两次机会,我特殊情况考了三次,一套安全题(10题选择题共100分,…

HDU 5439 Aggregated Counting

题目大意&#xff1a; 由1开始不断往数组中添加数 就是按照当前所在位置所在的数表示的个数添加这个数目的数 1 2 2 3 3 后面因为要填4&#xff0c;而4号位置为3&#xff0c;说明之后要填3个4 问题就是给定一个n&#xff0c;找到n出现的最后位置p&#xff0c;再找p出现的最后位…

Ubuntu 安装msfconsole

Ubuntu 安装msfconsole 1.进入到opt目录下 cd /opt/1 2.下载安装文件 msfupdate.erb sudo wget https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb1 3.将文件msfupdate.erb重命名为msfinstal…

域名解析是否生效实时检测(阿里云DNS检测)

测试域名解析生效的方法有以下四类 域名解析生效测试本地域名解析生效测试测试命令dig或nslookup全国各地运营商解析生效测试域名解析生效测试 可帮助用户快速排查域名、DNS、网站问题,点击下方蓝色字体立即测试。 阿里云DNS检测 本地域名解析生效测试 此查询工具可以检测…

为什么需要多线程

对于这个问题可能很多朋友会说是为了高性能&#xff0c;个人觉得这是误解&#xff0c;多线程不等于高性能&#xff0c;从cpu&#xff08;单核&#xff09;的角度上看单线程才能带来最高性能。 对于单纯的运算任务来说一条线程依次执行到底肯定是最快速的&#xff08;因为线程间…