In un'applicazione Java EE 6 in esecuzione su GlassFish (3.1.2.2b5), supponiamo di avere un ConfigurationService
, che legge alcuni file proprietà e le mani fuori i valori delle proprietà di conseguenza:Iniettare EJB in EclipseLink SessionCustomizer per fornire Oracle nome dello schema
@Local
public interface ConfigurationService { ... }
@Singleton
public class ConfigurationServiceImpl implements ConfigurationService { ... }
C'è anche un EclipseLink SessionCustomizer
, perché il nome dello schema di una delle unità di persistenza (database Oracle) nella applicazione deve essere a livello di codice impostare, vale a dire essere configurabile dai file di proprietà di cui prima. Il SessionCustomizer
è configurato in un persistence.xml
e l'attuazione contiene un riferimento ConfigurationService
:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"...
<persistence-unit name="myPU" transaction-type="JTA">
<property name="eclipselink.session.customizer" value="MySessionCustomizer"/>
...
public class MySessionCustomizer implements SessionCustomizer {
@EJB
private ConfigurationService configurationService;
@Override
public void customize(Session session) {
session.getLogin().setTableQualifier(configurationService.getSchemaName());
...
È possibile avere il ConfigurationService
iniettata in modo tale, in modo che sia disponibile quando il SessionCustomizer
è istanziato? Quanto sopra non funziona poiché l'istanza ConfigurationService
è ancora nullo, ovvero l'iniezione non è ancora avvenuta. Questa osservazione corrisponde alle voci di registro del server. Sembra che il meccanismo di iniezione delle dipendenze sia invariabilmente avviato dopo che le unità di persistenza - e quindi il SessionCustomizer
- sono istatate. Ho incasinato varie annotazioni (@Startup
, @DependsOn(...)
, ...) ma senza successo. La mia conclusione è corretta o esiste un altro modo per rendere l'EJB istanziato e iniettato prima?
Un esempio di codice può essere trovato qui: http://stackoverflow.com/a/28971109/3375325 – lazlev