GWT трехуровневая архитектура
Я разрабатываю приложение на основе GWT, используя JPA в качестве слоя доступа к данным. Мое приложение должно поддерживать трехуровневую архитектуру. Основная идея заключается в том, чтобы иметь HTTP-сервер (Apache) со статическим содержимым (html/javascript и т. Д.), Сервер веб-приложений (Glassfish) с бизнес-логикой (сервлеты, бины и т. Д.) И сервер базы данных (PostgreSQL).
Есть ли простой способ разделить содержимое файла war, сгенерированного для простого приложения GWT, для достижения описанной архитектуры?
Возможно, есть плагин maven, который поможет в создании отдельных военных файлов со статическим контентом и бизнес-логикой.
Я также думал о создании прокси, который будет перехватывать вызовы GWT-RPC и вызывать бизнес-методы на удаленном сервере.
Я нашел очень интересную статью, описывающую такое решение ( полная статья), но она требует много работы для достижения моей цели. Надеемся, что есть библиотека или инструментарий, который упростит процесс генерации прокси.
Любые идеи будут с благодарностью.
1 ответ
У меня похожая установка, только Tomcat вместо Glassfish и maven для сборки всего. Вот как это работает. Apache httpd и Tomcat связаны с mod_jk. Apache перенаправляет все запросы в Tomcat, за исключением модуля GWT dir (давайте назовем его gwt_module), который содержит все скомпилированные GWT вещи - которые обслуживаются Apache и настроены для кэширования. Остальные - сервлеты, в основном, перенаправляются в Tomcat (RPC, RequestFactory, другие сервлеты). MongoDB в качестве сервера базы данных.
Вот соответствующий раздел httpd.conf:
JkMount /* webbalancer
JkUnMount /gwt_module/* webbalancer
Alias /gwt_module "/srv/web/app_servers/tomcat-1/webapps/ROOT/gwt_module/"
<Directory "/srv/web/app_servers/tomcat-1/webapps/ROOT/gwt_module/">
Order deny,allow
allow from all
Options -Indexes
<FilesMatch "\.cache\.*">
Header set Cache-control max-age=31536000
# Header unset ETag
# FileETag None
</FilesMatch>
# turning off ETags, to force browsers to rely only on Cache-Control and Expires headers.
# for some reason, FF wasn't using the cache for JS files if ETags are on.
Header unset ETag
FileETag None
</Directory>
# Tell clients to keep images in the cache
ExpiresActive On
ExpiresByType image/x-icon A2592000
ExpiresByType image/gif A2592000
ExpiresByType image/png A2592000
ExpiresByType image/jpg A2592000
ExpiresByType image/jpeg A2592000
#ExpiresByType application/x-javascript A2592000
ExpiresByType text/css A2592000
ExpiresByType application/xhtml+xml A2592000
# Compress output for text
AddOutputFilterByType DEFLATE text/html text/xml text/css application/x-javascript text/javascript application/javascript
Примечание: я не уверен, что обслуживать статические файлы с помощью Apache быстрее, чем обслуживать только с помощью tomcat, я использую apache для балансировки нагрузки в первую очередь.