Estou fazendo um sistema onde os usuários podem, pela API publica, desenvolverem plugins para o sistema.
Este plugin pode conter DAOs, Actions (do VRaptor3), classes utilitárias e suas telas JSP (com jstl)
Qual a melhor arquitetura pra prover esta funcionalidade?
Para o caso das classes é fácil, uma vez que os bean são sempre registrados pelo Spring…
o problema são as telas… pois elas estariam dentro de um jar/zip em um classloader separado… e assim não consigo fazer forward/redirect para estas JSPs…
aproveito e pergunto se existe algum framwork que ajude nesta questão de plugins de webapps…
Opção 1 - Usar portlets.
Hoje existem diversas distribuições de portais open source e trabalham exatamente com a idéia de plugins (no caso portlets). Seguem uma API padronizada, logo você não precisaria reinventar a roda.
Opção 2 - Utilizar Java Server Faces (JSF)
O JSF tem uma política de classloading que permite você desenvolver aplicações e empacotar ela diretamente em um jar, onde as configurações e classes são carregadas em runtime. Recentemente precisei desenvolver um produto com as características semelhantes a sua situação, e no caso, escolhi esta opção.
Opção 3 - Usar OSGI
Seria uma opção mais para o caso de você querer ter uma política de atualização destes plugins. No caso o OSGI possui uma estrutura pronta de gerenciamento do ciclo de vida, dependencias, etc.