Java 使用SpringMVC进行线程和休眠
我目前正在开发一个web应用程序,它基本上是一个针对不同供应商的投资组合网站 我在做一个线程,它复制了一个供应商的详细信息,并将其与一个新供应商进行比较,非常简单 线程本来可以正常工作,但当选择特定的Java 使用SpringMVC进行线程和休眠,java,multithreading,spring,hibernate,Java,Multithreading,Spring,Hibernate,我目前正在开发一个web应用程序,它基本上是一个针对不同供应商的投资组合网站 我在做一个线程,它复制了一个供应商的详细信息,并将其与一个新供应商进行比较,非常简单 线程本来可以正常工作,但当选择特定的目录对象(此目录对象包含Velocity模板)时,执行将停止,并且不会执行任何操作。再次调用线程只会挂起整个应用程序 这是我的密码 public class CopySiteThread extends Thread { public CopySiteThread(ComponentDTO
目录
对象(此目录对象包含Velocity
模板)时,执行将停止,并且不会执行任何操作。再次调用线程只会挂起整个应用程序
这是我的密码
public class CopySiteThread extends Thread {
public CopySiteThread(ComponentDTO componentDTO, long vendorid, int admin_id) {
/**Application specific business logic not exposed **/
}
public void run() {
/** Application based Business Logic Not Exposed **/
//Copy Catalog first
List<Catalog> catalog = catalogDAO.getCatalog(vendorid);
System.out.println(catalog);
List<Catalog> newCat = new ArrayList<Catalog>();
HashMap<String, Integer> catIdMapList = new HashMap<String, Integer>();
Iterator<Catalog> catIterator = catalog.iterator();
while (catIterator.hasNext()) {
Catalog cat = catIterator.next();
System.out.println(cat);
int catId = catalogDAO.addTemplate(admin_id, cat.getHtml(), cat.getName(), cat.getNickname(), cat.getTemplategroup(), vendor.getVendorid());
catIdMapList.put(cat.getName(), catId);
cat = null;
}
}
}
经过一定次数的迭代后,它会卡在第行Catalog cat=catIterator.next()代码>
这个问题很奇怪,因为我已经开发了很多这样的应用程序,没有任何问题
感谢您的帮助。实际问题在于CatalogDAO
中的addCatalog
方法
Session session = sf.openSession();
Transaction tx = null;
Integer templateID = null;
Date date = new Date();
try {
tx = session.beginTransaction();
Catalog catalog = new Catalog();
//Business Logic
templateID = (Integer) session.save(catalog);
} catch (HibernateException ex) {
if (tx != null) tx.rolback();
} finally {
session.close();
}
return templateID;
通过添加finally
子句并关闭所有会话来修复此问题。如果您想回答自己的问题,请提供一些解决方案示例代码片段,而不仅仅是对您所做工作的描述
Session session = sf.openSession();
Transaction tx = null;
Integer templateID = null;
Date date = new Date();
try {
tx = session.beginTransaction();
Catalog catalog = new Catalog();
//Business Logic
templateID = (Integer) session.save(catalog);
} catch (HibernateException ex) {
if (tx != null) tx.rolback();
} finally {
session.close();
}
return templateID;