1

由于我们在多线程应用程序中尝试使用 Hibernate 时可能遇到的所有问题(第 1 条线索第 2 条线索第 3 条线索等),我正在考虑另一种解决方案:在经典 Controller中实现逻辑部分,然后简单地调用它从我的线程使用URL.openConnection().

换句话说,而不是做这样的事情:

MyThread.java

public class MyThread implements Runnable {

    @Override
    public void run() {
        // do some great stuff with Hibernate
    }

}

Anywhere.java

new Thread(new MyThread()).start();

我想尝试这样的事情:

MyController.java

@Controller
public class MyController {

    @RequestMapping(value = "myUrl", method = RequestMethod.GET)
    public void myMethod() {
        // do some great stuff with Hibernate
    }

}

MyThread.java

public class MyThread implements Runnable {

    @Override
    public void run() {
        // simple call the above mapped url
    }

}

Anywhere.java

new Thread(new MyThread()).start();

你怎么看待这件事?是好是坏?我还没有尝试过,但我认为这样的解决方案可以防止我们在多线程中使用 Hibernate 时遇到的常见错误,因为服务器将执行逻辑部分,就好像有人在请求页面一样。

PS:我知道有一些在多线程应用程序中使用 Hibernate 的解决方案,但是每次我尝试一个时,都会出现另一个,直到我厌倦了它的不归路。

PS2:我知道需要保护这样的解决方案(例如作为令牌的 UID)。

4

1 回答 1

4

我真的不明白你想在这里解决什么问题。Hibernate 几乎总是在多线程环境中使用。例如,在 webapps 中,并发请求由多个并发线程处理,每个线程使用自己的 Hibernate 会话。这不会造成任何问题。

如果您在线程之间共享相同的会话,或者如果您在线程之间共享给定的实体,您将遇到问题。

如果您启动自己的线程,并且该线程使用自己的会话和实体,我不明白您为什么会有任何问题。

于 2012-05-16T10:06:04.990 回答