Aus irgendeinem Grund wird der EntityManager nicht in einen separaten Thread injiziert, den ich im Hintergrund weiterlaufen lassen möchte. Andere Klassen können ohne Probleme auf den Entity Manager zugreifen, aber diese laufen nicht in einem separaten Thread.PersistenceContext im Multithreading
Was mache ich hier falsch?
@Stateful
public class DatabaseManager extends Thread{
@PersistenceContext(unitName="imas-unit")
private EntityManager em;
private int timeBetweenRefresh;
public void run(){
loadProperties();
retrieveDBContent();
long timerTicks = System.currentTimeMillis();
while(running){
if(System.currentTimeMillis() > timerTicks + timeBetweenRefresh){
timerTicks = System.currentTimeMillis();
deleteAllRecords();
retrieveDBContent();
}
Thread.sleep(1000);
}
}
private void deleteAllRecords(){
//Deletes all the records
}
private void loadProperties(){
//Loads properties for methods
}
private void retrieveDBContent(){
List<Cel> celList = methodThatGetsCells();
System.out.println("Saving to database");
for(Cel cell : celList){
try{
em.persist(cell); //Null pointer here
em.flush();
}
catch(Exception e){
System.out.println(e.getMessage());
e.printStackTrace();
}
}
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
System.out.println("Retrieval failed. Please check error log for further information.");
e1.printStackTrace();
}
}
}
Ich kann bei Bedarf weitere Informationen buchen.
Wusste darüber nicht. Nun, das hat die Sache 10 mal einfacher gemacht. – Strike08