ThreadLocal的Hibernate升级问题

时间:2013-09-16 11:50:13

标签: java multithreading hibernate

我已将我的应用程序从Hibernate 3升级到4。

我有一些线程变量,我保留了一些有关尝试登录的客户端的信息。 问题是在休眠4之前,我可以从我的自定义ConnectionProvider访问这些变量。但现在,每当我尝试访问这些变量时,我都会得到一个null。

1)这是我尝试访问的变量。它位于我的应用程序的核心。

private static ThreadLocal<Client> currentClient = new ThreadLocal<Client>()  {
    protected synchronized Client initialValue() {
        return null;
    }
};

客户端登录后,我使用我的客户端实体设置该线程变量。

2)这就是我创建会话工厂的方式。

Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();        
sessionFactory = configuration.buildSessionFactory(serviceRegistry);

3)这就是我在自定义ConnectionProvider类中创建会话的方式。

Session s = factory.withOptions().interceptor(new MyInterceptor()).openSession();

4)当我使用在连接提供程序类中创建的会话执行查询时,我尝试在getConnection()方法中访问线程局部变量。我可以使用Hibernate 3访问该值,但是使用hibernate 4我会一直得到空值。

另外,如果我在执行q.list()之前检查该变量,我可以验证该变量是否已设置。但是当调用getConnection()方法时,该变量为null。

可能出现什么问题?

0 个答案:

没有答案