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 для балансировки нагрузки в первую очередь.

Другие вопросы по тегам