Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的servlet抛出异常ResourceClosed_Java_Mysql_Hibernate_Jakarta Ee_Persistence - Fatal编程技术网

Java 我的servlet抛出异常ResourceClosed

Java 我的servlet抛出异常ResourceClosed,java,mysql,hibernate,jakarta-ee,persistence,Java,Mysql,Hibernate,Jakarta Ee,Persistence,读取结果的三个设备同时与我的servlet联系。 发生了一件奇怪的事情:第一个设备显示结果,通常是第二个,而第三个设备收到500个内部服务器错误,因为引发了异常org.hibernate.ResourceClosedException:此TransactionCoordinator已关闭(代码后面显示)。 因此,我知道会话是在三台设备共享数据库的情况下启动的,当其中一台设备结束操作并在设备关闭后关闭会话时。为什么会发生这种情况?我希望每个导师都有一个专门的课程 @WebServlet("/Upd

读取结果的三个设备同时与我的servlet联系。 发生了一件奇怪的事情:第一个设备显示结果,通常是第二个,而第三个设备收到500个内部服务器错误,因为引发了异常org.hibernate.ResourceClosedException:此TransactionCoordinator已关闭(代码后面显示)。 因此,我知道会话是在三台设备共享数据库的情况下启动的,当其中一台设备结束操作并在设备关闭后关闭会话时。为什么会发生这种情况?我希望每个导师都有一个专门的课程

@WebServlet("/UpdateTutor")
public class UpdateTutor extends HttpServlet {

Session s;
int i=0;
static Logger log= Log.getLogger(UpdateTutor.class);

public UpdateTutor() {
    super();
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String tipo = request.getParameter("tipo");
    String seriale = request.getParameter("seriale");
    PrintWriter out = response.getWriter();
    s = PersistanceSessionFactory.openSession("UpdateTutor"+seriale);
    log.infoServlet("Ricevo una richiesta di aggiornamento sul tutor "+seriale);

    if(seriale==null){
        out.write("No serial");
        s.close();
        return;
    }

    if(tipo==null){
        out.write(notificaAggiornamento(seriale));
        s.close();

    }else{
       out.write(updateAll(seriale));
       s.close();
    }
    return;
}
public String updateAll(String seriale) {
    log.infoServlet("Aggiornamento in corso..stampo lo stato attuale della centrale");
    String out = "";

    /*Addetti*/
    out+="<addetti val = \""+updateAddetti(seriale)+"\"/>\n";
            ..... 
            return out;
}

      public String updateAddetti(String seriale){
       .............
       if(a!=null){
            String den ="";
//Exception org.hibernate.ResourceClosedException: This TransactionCoordinator has been closed
            Azienda az = (Azienda) s.get(Azienda.class, a.getId().getIdAzienda());



public class PersistanceSessionFactory {

private static String TAG = "PersistanceSessionFactory";
private static SessionFactory sf = null;
    .....
    public static Session openSession(String source){
    return sf.openSession();
}
    .....
}
@WebServlet(“/updateutor”)
公共类UpdateTutor扩展了HttpServlet{
会议s;
int i=0;
静态记录器log=log.getLogger(updateutor.class);
公共updateutor(){
超级();
}
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
字符串tipo=request.getParameter(“tipo”);
字符串serial=request.getParameter(“serial”);
PrintWriter out=response.getWriter();
s=persistenceSessionFactory.openSession(“updateutor”+serial);
log.infoServlet(“Ricevo una richiesta di aggiornamento sul tutor”+连载);
if(serial==null){
输出。写入(“无序列号”);
s、 close();
返回;
}
if(tipo==null){
写出(notificaAggiornamento(seriale));
s、 close();
}否则{
out.write(updateAll(seriale));
s、 close();
}
返回;
}
公共字符串updateAll(字符串序列){
log.infoServlet(“corso中的Aggiornamento..stampo lo stato attuale della centrale”);
串出“”;
/*阿达蒂*/
out+=“\n”;
..... 
返回;
}
公共字符串updateAddetti(字符串序列){
.............
如果(a!=null){
字符串den=“”;
//异常org.hibernate.ResourceClosedException:此TransactionCoordinator已关闭
Azienda az=(Azienda)s.get(Azienda.class,a.getId().getIdAzienda());
公共类persistenceSessionFactory{
私有静态字符串TAG=“PersistanceSessionFactory”;
私有静态SessionFactory sf=null;
.....
公共静态会话openSession(字符串源){
返回sf.openSession();
}
.....
}

会话
引用从
级别移动到
方法
级别。通常,不应该有任何成员影响
Servlet
类级别中的
doGet
/
doPost
方法的操作,因为当接收到多个请求时,它将导致并发问题每个类加载器只存在一个Servlet实例来处理所有请求。每个请求都将在其自己的线程上处理。因此,您不应该关闭会话,因为它位于类级别。将其作为
doGet
方法的局部变量以避免此错误

@Saverio它有帮助吗?天哪!我是一个非常谨慎的人你是一个非常善良的人。这就是问题所在,现在它起作用了。非常感谢