gpt4 book ai didi

java - 我的 servlet 抛出异常 ResourceClosed

转载 作者:行者123 更新时间:2023-11-30 00:48:19 25 4
gpt4 key购买 nike

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

@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();
}
.....
}

最佳答案

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

关于java - 我的 servlet 抛出异常 ResourceClosed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21184297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com