Это две веские причины для модуляции приложения. В идеале мы должны стремиться к компонентам с высокой когезией и низким сцеплением .
Язык Java зарекомендовал себя как вполне подходящий для решения подобных задач. Он предоставляет общие средства для обеспечения использования четко определенных API через интерфейсы, абстрактные классы и т. Д.
Разработчики игровых фреймворков считают, что это прекрасно для разработки библиотеки общего назначения, но в случае повторного использования веб-приложения и модульности можно было бы лучше всего достичь другими способами. Взгляните на этот отрывок, взятый из FAQ по игровой платформе :
Сама Java — это очень общий язык программирования, изначально не предназначенный для разработки веб-приложений. Совсем другое дело — написать универсальную и многократно используемую библиотеку Java и создать веб-приложение. Само веб-приложение не должно быть разработано так, чтобы его можно было повторно использовать. Вам нужно меньше абстракции, меньше конфигурации. Возможность повторного использования существует для веб-приложений, но не через интеграцию на уровне языка, а через API веб-служб.
Таким образом, когда дело доходит до повторного использования, игра предоставляет нам решение, лучше подходящее для веб-приложений.
Игровые модули
Модуль — это просто еще одно приложение Play Framework. Единственное отличие состоит в том, что модуль не предназначен для самостоятельного запуска, его необходимо включить в содержащее приложение.
Тем не менее, существует несколько различий между модулем и обычным приложением, в основном в том, что модуль не имеет файла conf (он должен предоставляться основным приложением), и все в модуле является необязательным.
Делать лучше, чем говорить, поэтому, как обычно, мы будем искать прекрасную возможность сделать простой модуль, чтобы показать, как он работает.
Создание нового приложения Play Framework и его развертывание в облаке.
Как многие из вас уже знают, мы работаем над испанским переводом сайта Play Framework . Мы хотели добавить в него веб-аналитику, чтобы понять, как ее используют люди.
Таким образом, чтобы следовать этому примеру, нам понадобится приложение Play Framework, развернутое где-то в Интернете. В настоящее время есть много вариантов хостинга Java, доступных бесплатно. Здесь у вас есть пара руководств по развертыванию на openshift , движке приложений Google и heroku .
Сначала давайте создадим приложение Play Framework, я создам приложение в ~ / devel / apps / module-test, вы можете выбрать любое место, которое вам нравится, просто обязательно обновите команды соответствующим образом.
Чтобы создать приложение, введите в командной строке следующую команду:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
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, перейдите в этот каталог и запустите:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
rhc-create-app -l mymail @mail .com -p mypassword -t jbossas- 7.0 -a analyticsapp Attempting to create remote application space: analyticsapp Now your new domain name is being propagated worldwide ( this might take a minute)... Pulling new repo down [...] Successfully created application: analyticsapp |
Далее мы избавимся от демонстрационного приложения:
1
2
3
|
cd ~/devel/apps/module-test/openshift/analyticsapp rm -fr pom.xml src |
И мы скомпилируем и упакуем вновь созданное приложение как разорванную войну. Перейдите в папку ~ / devel / apps / module-test и запустите:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
cd ~/devel/apps/module-test play 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 debugging Listening for transport dt_socket at address: 53978 00 : 22 : 38 , 021 INFO ~ Starting /home/sas/Dropbox/Public/devel/play/apps/module-test/analytics-app 00 : 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! ~ |
Теперь нам просто нужно зафиксировать приложение и отправить его в наше git-репозиторий на openshift:
1
2
3
4
5
6
7
8
9
|
cd ~/devel/apps/module-test/openshift/analyticsapp touch deployments/ROOT.war.dodeploy git add -A git commit -m "deploy play framework app" git push origin |
Примечание. При первом запуске приложения потребуется несколько минут из-за библиотек инфраструктуры воспроизведения. Последующие изменения будут выполняться намного быстрее, git достаточно умен, чтобы отправлять только обновленные файлы.
И это все, вы только что развернули свое первое приложение в облаке Red Hat. Вы можете увидеть его на http://analyticsapp-opensas.rhcloud.com/ (конечно, вам придется заменить «opensas» своим собственным именем пользователя openshift).
Google Web Analytics & Play Framework
Добавить веб-аналитику Google в игровое приложение очень просто. Вам просто нужна учетная запись Gmail, затем перейдите на веб-сайт Google Analytics , нажмите «Зарегистрироваться», войдите в свою учетную запись Gmail и заполните все необходимые данные.
В имени учетной записи введите «analytics-app», в URL-адресе веб-сайта введите http://analyticsapp-opensas.rhcloud.com, согласитесь с условиями и нажмите «Создать учетную запись».
Вы попадете на страницу своего аккаунта аналитического приложения, где вы увидите код отслеживания. Вам просто нужно вставить его в свое приложение. Итак, откройте файл в ~ / devel / apps / module-test / analytics-app / app / views / main.html и вставьте код отслеживания перед тегом закрывающей головки, например так:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
[...] <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, а НЕ с этой страницы!
Теперь вам просто нужно сгенерировать военную папку, зафиксировать и еще раз нажать на нее, чтобы развернуть изменения. Каждый раз, когда вы вносите изменения, вы должны следовать этим же шагам, чтобы развернуть их в openshift.
01
02
03
04
05
06
07
08
09
10
11
|
cd ~/devel/apps/module-test play war analytics-app/ -o openshift/analyticsapp/deployments/ROOT.war cd openshift/analyticsapp/ git add -A git commit -m "added tracking code" git push origin |
Зайдите еще раз на свою страницу по адресу http://analyticsapp-opensas.rhcloud.com/ и просмотрите исходный код страницы, чтобы убедиться, что код отслеживания был добавлен. Вы также можете увидеть его в действии на аналитической странице Google, нажать «Домой», «В реальном времени» (BETA) и «Обзор». У вас должен быть один посетитель (да, это вы!).
Пока что мы создали новое игровое приложение и развернули его в openshift. Затем мы создали аналитическую учетную запись Google и добавили код отслеживания в наше игровое приложение. Все работает хорошо, и наше приложение отслеживается Google. Теперь мы собираемся перенести эту функциональность в модуль, чтобы мы могли использовать ее из других приложений.
Создание модуля
Для создания нового модуля вы должны использовать команду воспроизведения «new-module», например:
1
2
3
|
cd /home/sas/devel/apps/module-test/ play new -module analytics |
Теперь, чтобы указать нашему основному приложению (в нашем случае аналитическое приложение) включить этот модуль, нам нужно настроить локальный репозиторий .
Отредактируйте ~ / devel / apps / module-test / analytics-app / conf / dependencies.yml следующим образом:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# Application dependencies require: - play - analytics -> analytics repositories: - My local modules: type: local artifact: ${application.path}/../[module] contains: - analytics |
и после этого выполните следующую команду, чтобы указать play для разрешения зависимостей.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
cd ~/devel/apps/module-test/analytics-app play 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! ~ |
Теперь вы можете запустить основное приложение на своей рабочей станции:
1
2
3
|
cd ~/devel/apps/module-test/analytics-app play run |
Вы можете увидеть, что ваше приложение работает по адресу http: // localhost: 9000 .
Перемещение кода отслеживания в тег многократного использования
Теперь мы переместим код отслеживания в тег, определенный в модуле, поэтому создадим файл ~ / devel / apps / module-test / analytics / app / views / analytics.html с кодом отслеживания, например:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
<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 на вызов тега, например так:
01
02
03
04
05
06
07
08
09
10
11
12
13
|
[...] <script src= "@{'/public/javascripts/jquery-1.6.4.min.js'}" type= "text/javascript" charset= "${_response_encoding}" ></script> #{get 'moreScripts' /} #{analytics /} </head> [...] |
Получение конфигурации модуля из файла application.conf
Наш модуль почти готов, есть только одна вещь, которая мешает нам по-настоящему использовать его в другом приложении: код аналитики Google жестко закодирован в нашем теге!
Поэтому мы будем читать его из файла application.conf. Просто отредактируйте тег analytics.html следующим образом:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
%{ 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
1
|
analytics.code=UA-XXXXXXXX- 1 |
Запрет отслеживания в режиме разработки
Этот тег будет обновлять трекер каждый раз, когда страница отображается, даже когда мы работаем на нашей рабочей станции!
Поэтому мы добавим небольшое улучшение, чтобы модуль не регистрировал активность страницы во время работы в режиме разработки.
Просто добавьте следующее условие в код:
01
02
03
04
05
06
07
08
09
10
11
12
13
|
%{ String code = play.Play.configuration.getProperty( "analytics.code" , "" ) }% #{ if play.mode.isProd() && code!= "" } <script type= "text/javascript" > var _gaq = _gaq || []; [...] |
Устранение неполадок Openshift
Openshift не сможет разрешить относительную ссылку на местоположение модуля (и фактически любое развернутое приложение войны будет иметь такую же проблему), поэтому вам придется указать play, чтобы скопировать исходные коды модуля в содержащее приложение перед генерацией военная папка. Просто выпустите:
1
2
3
|
cd ~/devel/apps/module-test/analytics-app play dependencies --forceCopy |
И все, теперь вы можете развернуть в openshift обычным способом:
01
02
03
04
05
06
07
08
09
10
11
|
cd ~/devel/apps/module-test play war analytics-app/ -o openshift/analyticsapp/deployments/ROOT.war cd openshift/analyticsapp/ git add -A git commit -m "added analytics module" git push origin |
Запустите ваш сайт локально с помощью «play run», а также откройте его с http://analyticsapp-opensas.rhcloud.com/ , проверьте исходный код обоих сайтов, вы должны увидеть, что приложение, работающее на openshift, содержит код отслеживания, вопреки вашему местному заявлению.
Вывод
В этом посте мы увидели, как развернуть приложение play Framework в openshift и, что более важно, как переместить функции из вашего приложения в модуль, чтобы использовать его из других приложений.
Вы можете узнать больше о модулях в этой статье или прочитать документацию по игровым фреймворкам .
Если вы говорите по-испански, вы можете помочь нам с переводом , а также взглянуть на нашу работу прямо здесь … Вы можете быть уверены, что каждый сделанный вами щелчок будет отслеживаться!
Справка: Модули Play Framework: Разделяй и властвуй от нашего партнера по JCG Себастьяна Скарано на платформе «Веселись вместе с Play»! блог
Статьи по Теме :