2010-05-10 8 views
5

Possiedo un progetto Java che prevede la registrazione di moduli esterni. Questi moduli:Best practice per referenziare un modulo esterno in un progetto Java

  • implementare una particolare interfaccia nel progetto principale
  • sono confezionati in un uni-vaso (insieme a tutte le dipendenze)
  • contengono alcune meta-informazioni leggibile (come il nome del modulo) .

Il mio progetto principale deve essere in grado di caricare in fase di esecuzione (ad esempio utilizzando un proprio programma di caricamento classi) uno qualsiasi di questi moduli esterni. La mia domanda è: qual è il modo migliore di registrare questi moduli con il progetto principale (preferirei mantenere questo Java vanilla, e non utilizzare alcun framework/libreria di terze parti per questo problema isolato)?

La mia soluzione attuale è di mantenere un singolo file .properties nel progetto principale con key = nome, valore = class | delimiter | nome leggibile dall'uomo (o coordinare due file .properties per evitare l'analisi del delimitatore). In fase di runtime, il progetto principale viene caricato nel file .properties e utilizza qualsiasi voce trovata per guidare il programma di caricamento classi.

Questo mi sembra strano. C'è un modo migliore per questo?

risposta

0

Lascia che tutto il modulo esprima i propri metadati tramite un file xml standard. Chiamalo "my-module-data.xml".

Sul avvio contenitore principale viene cercato un percorso di classe *: my-modulo-data.xml"(che può avere una classe FrontController) e delegati per i singoli moduli FrontController classe per fare ciò che vuole :)

google ha anche per la primavera-OSGi e la loro doco può essere utile qui.

0

Ampliando @ZZ Coder ...

Il modello di provider di servizi menzionato e utilizzato internamente all'interno di JDK è ora un po 'più formalizzato in JDK 6 con ServiceLoader. Il concetto è ulteriormente ampliato dal Netbeans Lookup API.

L'infrastruttura sottostante è identica. Cioè, entrambe le API usano gli stessi artefatti, allo stesso modo. La versione NetBeans è solo un'API più flessibile e robusta (consentendo, ad esempio, servizi di ricerca alternativi e quello predefinito).

Naturalmente, non sarebbe opportuno menzionare gli standard dominanti e più "pesanti" di EJB, Spring e OSGi.

Problemi correlati