Usando i chicchi di primavera di altri moduli?
-
08-07-2019 - |
Domanda
Immagino sia semplice, ma non riesco a trovare la giusta combinazione di termini di ricerca per ottenere una risposta. Se ho un'applicazione multi-modulo, come posso ottenere i bean nel modulo A disponibili per i bean nel modulo B.
L'impostazione del progetto è un po 'simile a questa:
project.ear/module-a.jar/resources/beans.xml
project.ear/module-a.jar/java/foo/bar.class
project.ear/module-b.war/java/foo/barFactory.class
Il bean.xml non è accessibile da classpath o filesystem. C'è un modo per fare questo? O dovrei fare tutto diversamente?
Soluzione
Penso che esista una soluzione più semplice di questi 3 skaffman sopra menzionati.
-
Inserisci in un modulo-b.war / WEB-INF / web.xml queste righe:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/resources/beans.xml
</param-value>
</context-param>
Ciò consente di caricare ogni /resources/beans.xml da qualsiasi pezzo di percorso di classe (cioè qualsiasi vaso su percorso di classe) che è abbastanza per te.
-
Dovresti caricare un module-a.jar come parte di module-b.war (module-a.jar risiede nella posizione module-b.war / WEB-INF / lib).
Ho una granularità molto simile nel mio progetto: business-logic.jar con la configurazione dei suoi bean e frontend.war che usa i bean configurati in quello precedente tramite ref = " someBean " ;. Funziona.
Altri suggerimenti
Probabilmente il tuo appserver sta usando diversi classloader per ciascun modulo nell'EAR, impedendo a un modulo di vedere le risorse in un altro. Questo è il comportamento predefinito dei classloader JavaEE.
O devi
- riconfigura il tuo appserver per usare un " unificato " classloader nell'intero EAR (che è altamente specifico di appserver, ma ottimo se riesci a farlo funzionare), oppure
- impacchetta tutto in un modulo (ad es. il tuo WAR potrebbe contenere tutto), oppure
- dichiara un manifest formale per il modulo WAR, consentendogli di dichiarare le sue dipendenze sui singoli moduli JAR, che dovrebbe consentire a WAR di vedere le risorse nel modulo JAR.