[英]Make a DAO injection in a thread
我正在用wildfly在java ee中開發一個Web應用程序,我必須開發一個立即響應客戶端的Web服務,但是您必須創建一個任務或一個線程來執行一些任務並最終更新數據庫中的記錄
這是一個基本的例子,這里創建了線程
@GET
@Path("/createReq")
@Produces("application/json")
public void createReq() {
objThread trip = new ObjThread();
trip.setIdTrip("id");
trip.start();
}
這是一個基本的例子,這里創建了線程
public class ObjThread extends Thread {
volatile boolean ejecutar = true;
public String idTrip;
private int time = 0;
@Inject
Tbl_car_tripDAO tripDAO;
@Override
public void run() {
try {
while (ejecutar) {
if (time == 1) {
// task 1
} else if (time == 3) { //30
// task 2
} else if (time >= 5) { //45
// task 3
detener();
changeStatus();
}
Thread.sleep(1000);
time++;
}
} catch (Exception e) {
// TODO: handle exception
}
}
public void detener() {
ejecutar = false;
}
public void changeStatus() {
try {
Tbl_car_trip trip= tripDAO.getTripByIdTrip(idTrip);
trip.setCar_tri_status("data");
tripDAO.update(trip);
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
}
public void setIdTrip(String idTrip) {
this.idTrip = idTrip;
}
}
但是在執行時,我在 changeStatus 方法中遇到了持久性錯誤,但是如果我在另一個類中使用帶有 @inject 批注的相同方法,它可以正常工作。請您幫我解決這個問題並提出建議。 謝謝
升級
這是我的 DAO 課程
@Singleton
public class Tbl_car_tripDAO {
@Inject
private EntityManager em;
public boolean update(Tbl_car_trip tbl_car_trip) {
try {
em.merge(tbl_car_trip);
return true;
} catch (Exception e) {
return false;
}
}
ObjThread 必須是 Spring bean,以便您可以注入依賴項 (Tbl_car_tripDAO)。
@Component
@Scope("prototype")
public class ObjThread extends Thread {
您將需要從 Sprint 上下文中獲取 ObjThread(無法使用 new ObjThread() 進行實例化
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.