Domanda

So che non è ancora abbastanza popolare, dal momento che le specifiche è stato rilasciato pochi mesi fa.

Non ho "installato" di saldatura ancora, sto solo leggendo, e da questa domanda che vuole assicurarsi che ho capito questo importante punto corretto:

è la risoluzione di fagioli che sono in vasi 3rd-party conseguiti da dichiarandoli come <alternatives> nella tua beans.xml?

In caso contrario, come utilizzare i fagioli dalle biblioteche 3rd party che non hanno beans.xml?

Mettere il vaso sul classpath non funziona a meno che non ci sia beans.xml nella loro META-INF, che non si può fare vero per 3rd vasetti di partito. (Vedi post Gavin King sul tema )

È stato utile?

Soluzione

perché pensare così complicato?

È sufficiente fare un producerMethod per le classi 3a parte.

Supponiamo di avere una libreria di terze parti che prende automaticamente i file PDF e li invia al Faximile, e vi piace usare qualcosa come

private @Inject PdfFaxService faxService;

nel codice, allora si potrebbe semplicemente fornire questo con un metodo produttore. Il PdfFaxService funziona senza stato, in modo che possiamo tranquillamente supporre che possiamo fare è @ApplicationScoped:

public @Produces @ApplicationScoped PdfFaxService createFaxService() {
  return new PdfFaxService(initparameters);
}

da qualche parte.

hth.

Altri suggerimenti

La mia comprensione di un alternativa è che è un'alternativa a qualche altra implementazione di un'interfaccia che è possibile utilizzare in un ambiente di distribuzione diversa (ad esempio un ambiente di test). Un alternativa di fagioli è dichiarato annotando con @Alternative.

Per usare un'alternativa in un dato scenario di distribuzione, si seleziona nell'elemento <alternatives> del CDI descrittore di deployment META-INF/beans.xml. Ciò consentirà fagioli @Alternative che sono disabili per impostazione predefinita.

Quando abilitata, se il contenitore rileva una dipendenza ambigua per un dato punto di iniezione, si cerca alternative che possono essere iniettati e, se v'è esattamente un, prendere questa alternativa.

In altre parole, alternative sono un bel modo per sostituire un implementazione esistente con un altro in fase di distribuzione. Se non c'è niente da sostituire, non hai bisogno di alternative, basta mettere il barattolo sul percorso di classe. Non sicuro che questo era esattamente alla tua domanda, però, ho un dubbio sul concetto di vasi 3rd-party.

2.1.4. Alternative , 4.6. Alternative e 4.7. Fissaggio dipendenze non soddisfatte e ambigue (ma credo che questo è quello che stai leggendo).

Aggiornamento:. Per rispondere alla tua domanda aggiuntiva

  

In caso contrario, come utilizzare i fagioli dalle librerie 3a parte che non hanno beans.xml

Questo non può accadere, un archivio bean deve avere un bean.xml (sia esso vuoto) come descritto nella sezione 15,6. Packaging e la distribuzione della documentazione:

  

CDI non definisce alcun speciale   archivio di distribuzione. È possibile impacchettare   fagioli in JAR, EJB-JAR o WAR-any   posizione di distribuzione nella domanda   classpath. Tuttavia, l'archivio deve   essere un "archivio di fagioli". Ciò significa che ogni   archivio che contiene i fagioli devono   includere un file chiamato beans.xml nella   META-INF directory del percorso di classe o di   WEB-INF directory del web root (per   Archivi di guerra). Il file potrebbe essere vuoto.   Fagioli distribuiti in archivi che non lo fanno   avere un file beans.xml non sarà   disponibile per l'uso nell'applicazione.

Quindi, per risolvere una dipendenza insoddisfatto e ambiguo, fare riferimento alla sezione 4.7 accennato in precedenza.

Aggiornamento 2: Sembra che usando BeforeBeanDiscovery.addAnnotatedType() è possibile aggiungere altre classi da prendere in considerazione durante il rilevamento di fagioli. (BeforeBeanDiscovery è un evento)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top