在线程中进行DAO注入

问题描述 投票:0回答:1

我正在用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批注的相同方法,则它可以正常工作。请提出建议,以帮助解决我的问题。谢谢

java multithreading jpa wildfly java-ee-7
1个回答
0
投票

ObjThread必须是一个Spring bean,因此您可以注入依赖项(Tbl_car_tripDAO)。

© www.soinside.com 2019 - 2024. All rights reserved.