Architettura "plugin" dell'applicazione Web Java


Si prega di dare un consiglio su come fare architettura "plugin" per l'applicazione web Java.

Attualmente stiamo usando Spring+Hibernate+Struts 2 abbastanza semplice e standard nel contenitore servlet Tomcat. (Costruito con maven)

Ho bisogno di qualcosa come Redmine . Dove qualsiasi modulo può essere abilitato/disabilitato, aggiornato Interfaccia utente Redmine

Escludere opzioni pesanti come OSGi, Portlet.

  • OSGi è troppo pesante, non c'è una buona adozione della tecnologia per il web. Io già guarda Eclipse Germini;
  • Portlet è solo vecchio e non è mai stato popolare.
Author: Aliaksandr Belik, 2013-01-16

3 answers

Cercherò di fornire diverse possibili soluzioni. Ho passato un po ' di tempo a preparare piccoli POC per il progetto su cui sto lavorando, quindi speriamo che le opzioni di seguito siano rilevanti.

Nota importante: è davvero facile definire alcuni punti di estensione, risolvere e trovare le implementazioni disponibili. Ci sono molte soluzioni disponibili, ad esempio una buona e semplice {JSPF

Le risorse sono il problema principale per il WEB applicazioni

OSGi

OSGi, non è poi così male e può essere utile. Sembra essere pesante (e alcune implementazioni sono pesanti) ma questo è il prezzo della piattaforma standardizzata. Suggerirei di controllare Apache Felix . Può essere utilizzato in modalità "leggera". A proposito, include la console Web che è costruita come applicazione basata su plugin liberamente accoppiata, potrebbe essere utile:

inserisci qui la descrizione dell'immagine

Alcuni esempi Estensione del Web Apache Felix Console

La Console Web può essere estesa registrando un servizio OSGi per interfaccia javax.Servlet.Servlet con la proprietà del servizio Felix.webconsole.etichetta impostata sull'etichetta (ultimo segmento nell'URL) di pagina. Il rispettivo servizio è chiamato Plug-in della console Web o plugin in breve.

È anche possibile controllare eie-manager che è pulito e semplice e utilizza OSGi per gestire i plugin. Potrebbe essere un buon esempio per si.

Struttura plugin personalizzata

Suggerirei di rivedere la soluzione dietro Jenkins/Hudson . Direi che il sistema plug-in Jenkins è abbastanza maturo e affidabile. Può essere usato come un buon esempio.

inserisci qui la descrizione dell'immagine

Controllare anche Hudson Plugin Architecture

Soluzione semplice

Per il mio progetto ho creato un livello di astrazione del plugin basato su JSPF con un resolver di dipendenze personalizzato.

PRO:

  • semplice e piccolo
  • concetto pulito
  • funziona bene

CONTRO:

  • senza una corretta gestione dei plugin può essere lento (ricerca classpath completa)
  • fornisce funzionalità di base
  • può richiedere ulteriore attenzione

Suggerirei di usare JSPF solo se hai davvero bisogno di una certa semplicità e vuoi controllare tutto. JPF fornisce molte caratteristiche interessanti dal casella, ad esempio:

I plug - in possono essere "hot-registered" e persino de-registrati durante esecuzione dell'applicazione. Inoltre, i plug-in registrati possono essere attivato e disattivato "al volo", riducendo al minimo le risorse di runtime utilizzo.

Il problema è che JPF è morto.

Suggerimento

Trascorri un po ' di tempo con Apache Felix. È abbastanza maturo, quindi i tuoi investimenti di tempo potrebbero ripagare molto.

 13
Author: Renat Gilmanov, 2013-06-21 13:40:50

Scopri le risposte a questa domanda: Il modo migliore per creare un sistema di plugin con Java

Se non ti fidi del codice del plugin, puoi implementare il sandboxing, come descritto qui: Sandbox contro il codice dannoso in un'applicazione Java

Il progetto open source Java Plug-in Framework supporta la disattivazione dei plugin, puoi ispirarti anche se è troppo pesante per i tuoi scopi.

 6
Author: lbalazscs, 2017-05-23 12:17:17

Atlassian ha aperto il proprio sistema di plugin qui . Vedo che viene lavorato pesantemente dal team Atlassian. Vale la pena di esplorare la sua documentazione

 2
Author: asyncwait, 2014-01-06 18:50:01