In un progetto Java EE 6 su cui sto lavorando, c'è un campo solo annotato con @EJB che non viene iniettato. L'iniezione funziona bene ovunque.Java EE 6 Iniezione in classe astratta
Essendo nuovo in Java EE, non so se è correlato al fatto che il campo sia in una classe astratta, né posso trovare alcun output da Glassfish (3.1.2) sul motivo per cui questa iniezione non si verifica.
Non ci sono errori o avvisi nel registro del server fino a quando si verifica NullPointerException perché il campo dataSourceControl è null. Ho verificato che DataSourceControl Singleton è stato istanziato inserendo il suo costruttore.
Per quanto posso dire, il campo dataSourceControl non viene iniettato, ma i registri non mi forniscono alcun motivo.
public abstract class AbstractDataMap<T> {
@EJB
private DataSourceControl dataSourceControl; // This is not being injected
DataSourceControl getDataSourceControl() {
return dataSourceControl;
}
// Other methods
}
public abstract class AbstractDataMapDBProd<T> extends AbstractDataMap<T> {
@Override
protected Connection getDBConnection() {
return getDataSourceControl().getConnectionX(); // NullPointerException here
}
// Other methods
}
@Stateless
public class CountryMap extends AbstractDataMapDBProd<Country> {
public boolean update(final Country current, final Country legacy) {
Connection connection = getDBConnection();
// More code 'n stuff
}
}
Ci sono delle regole che mi sono sfuggite per quanto riguarda l'iniezione definita in una classe astratta?
Qualcos'altro che grida "noob"?
Se non ci sono errori evidenti, qualche idea su come eseguire il debug di questo?
Questo dovrebbe funzionare SE si ottiene un'istanza di 'CountryMap' dal contenitore (vale a dire, iniezione o ricerca) piuttosto che tramite' nuova CountryMap'. Come stai ottenendo un'istanza di 'CountryMap'? –
bkail, l'hai risolto! Ho seguito il mio codice nella direzione opposta e le mie classi CountryMap (e altre mappe) venivano istanziate manualmente. –
@bkail puoi postare la tua risposta in modo che io possa contrassegnarla come corretta? Grazie. –