Página WEB em módulos

Estou montado uma aplicação WEB que vai rodar no Tomcat que vai ter um núcleo (core). Essa aplicação vai extensível na forma de componentes, plugins ou módulos (chame como quiser). Podendo esta parte extensível ser formada de arquivos jsp, html, xml, properties, class, etc. A dica que eu preciso é, como distribuir e vincular ao núcleo essa parte extensível. Sei que o núcleo é distribuido na forma de um WAR.

A idéia que eu tive incialmente era distribuir esses componentes na forma de um .jar que seria colocado no na pasta \lib do core (mas não sei se dá certo). O problema é como referenciar os arquivos JSP que estão dentro desse JAR? E talvez ainda alterar o XML de config. e mapeamento das servlets…

Qualquer ajuda ou dica é bem vinda!

Obrigado. :wink:

Filipi P. Silveira

Voce quer criar uma app que sirva de “base” para outras? Nao entendi muito bem.

Voce pode colocar os componentes comuns aos “modulos” na app ROOT do Tomcat e ele estara disponivel para qualquer aplicacao, utilizando o contexto “/” - exemplo: “/imagens_comuns”, “/scripts_comuns”, etc.

Nesse caso os “modulos” podem ser apps “normais”, empacotadas num WAR, por exemplo. Claro que nesse caso cada uma seria uma aplicacao diferente, com um contexto diferente e com um web.xml proprio.

Se nao for isso que voce deseja, explique melhor.

Marcio Kuchma

Acredito que tua idéia possa ser uma segunda alternativa. Mas vou tentar explicar melhor…

O núcleo dessa aplicação WEB (WAR) têm seus próprios JSPs e servlets, contendo também toda parte de persistência, adm. de usuários da app., configurações. Ou seja, tem vida própria, independente de haver ou não algum outro módulo instalado.

Já os componentes utilizariam a camada de persistência e outras funcionalidades disponíveis pelo núcleo, mas não tem vida própria, precisam estar instalados junto ao núcleo. Apesar de esse componente ter seus próprios JSPs e servlets também. Esses componentes podem estender as funcionalidades do núcleo, como por exemplo: apresentar uma tela de relatório de com um formato diferente, apresentar uma nova tela de pesquisa/filtro…

Núcleo e componente seriam combinados na apresentação mais ou menos da seguinte forma: um frame html de menu gerado pelo core e um frame html principal gerado por um componente qualquer apartir do menu (e.g. componente01.jsp).

Programo Java (J2SE) faz algum tempo, mas faz menos de dois meses que começei a estudar J2EE. De repente essa minha idéia pode estar errada e isso não seja possível :cry: .

Alguma idéia? :roll:

Filipi P. Silveira

Entao - eu trabalho num esquema semelhante: a empresa tem toda a infra pronta de sua intranet (menu, cabecalho, autenticacao, etc) e os desenvolvedores apenas criam as apps e solicitam a insercao no menu principal para a porta de entrada da nova aplicacao.

Tendo em mente os detalhes que voce mencionou deixo as seguintes sugestoes:

  • Crie a app base (menu, cabecalho, etc), que servira de “moldura” para os modulos (os frames funcionam bem aqui).

  • Crie as outras apps (modulos) normalmente visando roda-las dentro da area separada para isso (frame principal).

  • As funcionalidades comuns a todos (“core”, classes para autenticacao, acesso a banco de dados, etc), empacote-as em um JAR e coloque no classpath comum a todoas as aplicacoes, ou entao coloque individualmente no classpath de cada aplicacao, ou entao modularize os JARs (db.jar, auth.jar, etc) e coloque no classpath de cada uma apenas os que forem necessarios. Opcoes existem diversas. :smiley:

  • Para “interceptar” as requisicoes aos modulos, se isso for necessario, utilize servlet filters. Exemplo: garantir que todo acesso aos modulos seja realizado apenas por usuario autenticado na app “base”.

Um problema disso eh a questao dos contextos - cada app tem um contexto diferente e voce precisara verificar se isso nao eh um problema.

Outra ideia que me passou agora pela cabeca agora eh o uso de “decorators”, “decorando” os “modulos” com a “app base” - talvez nao tenha nada a ver, mas de uma olhada. Procure por Sitemesh e Tiles.

Marcio Kuchma

Cara, vou seguir tuas recomendações. A maneira que eu estava pensando em fazer teria muitas complicações desnecessárias. E pela tua dica eu deixo essa parte mais complicada do deploy dos módulos para o servidor de aplicação.

Valeu! :smiley:

Filipi P. Silveira