Olá.
Não estou tendo problemas com isso, mas tenho uma dúvida sobre como organizar o ambiente de desenvolvimento de uma aplicação web feita em Java, seja lá qual for o framework utilizado.
Há anos faço de um modo que funciona muito bem, mas não o considero produtivo. Gostaria de saber como vocês lidam com a situação e se há melhores práticas a serem seguidas. Espero que outros desenvolvedores possam aproveitar o debate.
Peço desculpas antecipadas caso seja um assunto “batido” e já discutido aqui no fórum, pois fiz uma pesquisa rápida no portal e não encontrei nada semelhante. Minha participação por aqui é muito tímida.
Como exemplo, vamos considerar uma aplicação web baseada em Servlets e JSP para não complicar muito.
Neste cenário, a estrutura seria composta por partes FIXAS e VARIÁVEIS. Aquilo que chamo de “partes fixas”, são os itens que tem pouca manutenção, podendo ser estáticos ou dinâmicos. Já as “partes variáveis”, são itens manipulados em um painel de administração (administradores do sistema) ou publicados pelos próprios usuários (envio de fotos, vídeos, etc).
Para deixar mais claro, segue um esquema do diretório da tal aplicação e uma breve explicação de cada item.
(a) $app_home/ {root da aplicação - contém htmls e jsps}
(b) $app_home/WEB-INF {Não necessita de explicações. Tudo por aqui compõe a parte dinâmica [jars, jsps, descritores etc] }
© $app_home/js {scripts js - só para exemplificar}
(d) $app_home/css {folhas de estilo - só para exemplificar}
(e) $app_home/imagens {imagens que compõem o template web da aplicação}
(f) $app_home/publicado {imagens, vídeos e demais recursos publicados por administradores e usuários [vários subdiretórios] }
Com isso dá para começar a detalhar a minha dúvida.
De acordo com as minhas considerações e modo de trabalho:
-
Os itens (a), (b), ©, (d) e (e); compõem a “parte fixa” da aplicação. Todos eles são armazenados em um controlador de versões. Sei que muitos vão criticar, pois já vi várias discussões sobre a incoerência de se armazenar binários (imagens e jars) em um controlador de versões, mas é o que faço atualmente, pois no meu caso, os fins justificam os meios (a parte fixa é pequena).
-
Apenas o item (f) é considerado “parte variável” da aplicação. É o diretório mais volumoso. Não é controlado, apenas tem-se o cuidado de realizar o backup a cada 06 horas (via rsync).
Aqui é que começa a discussão:
(Ambiente de Produção)
- Por se tratar de “conteúdo estático”, os itens ©, (d), (e) e (f) são disponibilizados em um diretório virtual do servidor web (Apache HTTP Server).
- Os itens (a) e (b) são empacotados em um war e implantados no servidor de aplicações (JBoss AS, WebLogic, Apache Tomcat etc).
(Ambiente de Desenvolvimento - Máquina do desenvolvedor)
- No meu caso, os itens (a), (b), ©, (d) e (e) são mantidos no projeto do Eclipse, e o conteúdo é fornecido pelo container web do servidor de aplicações. Não são tratados pelo Apache HTTP Server local.
- Já para o item (f), como preciso testar várias situações utilizando esse conteúdo, utilizo um servidor Apache HTTP local para prover tal conteúdo, e faço um ProxyPass / ProxyPassReverse para que o conteúdo dinâmico seja atendido pelo container web do servidor de aplicações.
O fato é que dá um pouco de trabalho fazer dessa forma. Mas fico me questionando: Será que é o normal?
Ao iniciar o trabalho, preciso levantar uma instância do servidor Apache (pelo menos é uma vez só). Daí em diante, faço apenas a manipulação do servidor de aplicações via Eclipse.
Como vocês procedem nesses casos onde a quantidade de itens do conteúdo estático é muito grande, mas é necessário ter acesso imediato a esses itens para vários testes no ambiente de desenvolvimento?
Muito obrigado.