Ich habe eine funktionierende JSF-Anwendung mit JPA. Die JTA-DataSource ist wildfly-verwaltet.Zugriff auf registrierte EntityManager in einer ausführbaren
Jetzt muss ich einige Datenbankoperationen regelmäßig ausführen. Wie hier erwähnt (SO: How to run a background task in a servlet based web application?) habe ich die beiden Klassen:
@WebListener
public class Scheduler implements ServletContextListener {
private ScheduledExecutorService scheduler;
@SuppressWarnings("deprecation")
@Override
public void contextInitialized(ServletContextEvent event) {
Calendar c = new GregorianCalendar();
Date d = c.getTime();
int stm = 60 - d.getSeconds();
int mth = 60 - d.getMinutes();
scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new TestRunner(), stm, 60, TimeUnit.SECONDS);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
scheduler.shutdownNow();
}
}
public class TestRunner implements Runnable {
private EntityManager em;
public TestRunner() {
}
@Override
public void run() {
this.Test();
}
public void Test() {
System.out.println("Test executed...");
if (this.em != null) {
System.out.println(em.find(Ship.class, 2).getName());
System.out.println(em.find(Commodity.class, 1).getName());
} else {
System.out.println("EntityManager is null");
}
}
}
Die besten die registrierte Persistenzeinheit sein whould zuzugreifen. Ich habe versucht, die EM über @PersistenceContext(unitName = "PU")
zu bekommen, versucht, die Persistence in der web.xml zu registrieren, um es über JNDI zu bekommen, hatte aber kein Glück.
Wo ist mein Fehler?
ist dies eine separate Entität von Web-Anwendung ausgeführt werden? Werden Sie null? Wenn Ihr Runnable nicht vom Container MANAGED verwaltet wird, erhalten Sie dort keinen Container-verwalteten Entitymanager –
@PrasadKharkar Die beiden Klassen sind Teil des Kriegsarchivs. Wenn ich versuche, über PersistenceContext zu injizieren, ist das em null. – xentity
Sie erhalten null, weil diese Klasse nicht von Ihrem Container verwaltet wird. Außerdem kann ich den Zweck von TestRunner nicht verstehen. –