In einer Java EE 6 Anwendung auf Glassfish (3.1.2.2b5) an, dass Sie ein ConfigurationService
haben, die einige Eigenschaften von Dateien und austeilt Eigenschaftswerte entsprechend lautet:Inject EJB in Eclipse SessionCustomizer bietet Oracle Schemanamen
@Local
public interface ConfigurationService { ... }
@Singleton
public class ConfigurationServiceImpl implements ConfigurationService { ... }
Es gibt auch einen Eclipse SessionCustomizer
, weil der Schemaname einer der Persistenzeinheiten (Oracle-Datenbank) in der Anwendung programmatisch festgelegt werden muss, das heißt von den Eigenschaften Dateien bereits erwähnt konfigurierbar sein. Die SessionCustomizer
konfiguriert ist, in einem persistence.xml
und die Implementierung enthält einen Verweis auf die 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());
...
Ist es möglich, die ConfigurationService
derart injiziert haben, so dass es verfügbar ist, wenn die SessionCustomizer
wird instanziiert? Obiges ist fehlgeschlagen, da die ConfigurationService
Instanz immer noch Null ist, d. H. Die Injektion ist noch nicht erfolgt. Diese Beobachtung entspricht den Protokolleinträgen des Servers. Es scheint, dass der Mechanismus der Abhängigkeitsinjektion unveränderlich gestartet wird, nachdem die Persistenzeinheiten - und somit die SessionCustomizer
- instatiziert sind. Ich habe mich mit verschiedenen Anmerkungen (@Startup
, @DependsOn(...)
, ...) herumgeschlagen, aber ohne Erfolg. Ist meine Schlussfolgerung richtig oder gibt es einen anderen Weg, die EJB früher instanziiert und injiziert zu bekommen?
Ein Codebeispiel finden Sie hier: http://stackoverflow.com/a/28971109/3375325 – lazlev