2016-07-26 6 views
0

Ich möchte auf die Datenbank mit JPA 2.1 Eclipselink beim Start zugreifen. Wenn es ausgeführt wird, erhalte ich eine erfolgreiche Anmeldung im Konsolenprotokoll, aber es wirft eine Tabelle oder eine Ansicht ist nicht vorhanden. Wenn ich jedoch meinen Dao in Servlet durch den Rest-Service anrufe, läuft alles gut. Fehle ich etwas?Verwenden von JPA beim Start Singleton

public abstract class BaseDao{ 
    @PersistenceContext(unitName = "myUnit") 
    protected EntityManager em; 
    pubic void create(Object entity); 
    public Ojbect get(); 
} 

@Stateless 
public class MyDaoService extends BaseDao{ 
    @Override 
    public void create(Object entity){ 
    this.em.persit(entity); 
    } 
    ... 
} 

@Singleton 
@Startup 
public class MySingleton{ 
    @EJB 
    private MyDaoService service; 
    @Schedule(hours="*", minutes="*", seconds="*/30") 
    public void doSomething(){ 
     MyEntity entity = new MyEntity();//assumed I have entity object 
     entity.setFirstName("firstName"); 
     entity.setLastName("lastName"); 
     service.create(entity); //>>>Table or view does not exist exception 
    } 
} 

Antwort

0

verwenden Dieses löste mein Problem.

Wenn ein verwalteter JEE- und JTA-Entitätsmanager verwendet wird, kann die Angabe eines Proxybenutzers und -kennworts schwieriger sein, da der Entitätsmanager und die JDBC-Verbindung nicht unter der Anwendungssteuerung stehen. Die Eigenschaften der Persistenzeinheit können weiterhin für ein EntityManager-Objekt angegeben werden, solange dies vor dem Herstellen einer Datenbankverbindung erfolgt. EclipseLink Solutions Guide for EclipseLink

EDIT: Stellen Sie sicher, dass Sie es vor jeder Transaktion gesetzt

0

Die doSomething würde eine @PostConstruct benötigen, wenn Sie es wollen, aufgerufen werden, nachdem Ihr Bean initialisiert wird. Auch wenn Sie Abhängigkeiten haben, müssen Sie verfügbar sein, bevor diese Bean initialisiert wird, dann können Sie @DependsOn

+0

EDITED: Ich habe @Schedule Anmerkung, die alle 30 Sekunden läuft und ich glaube nicht, gibt es keine Abhängigkeiten. Meine Datenquelle verwendet die Proxy-Authentifizierung und da das Programm automatisch ausgeführt wird und kein Benutzer mit ihm verbunden ist. Ich denke, das ist das Problem. Ich weiß nicht, ob es eine Möglichkeit gibt, Benutzernamen und Passwort in den EntityManager zu injizieren – SpyClown