1

アプリケーションを 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 では null を取得し続けます。

また、q.list() を実行する直前にその変数を調べると、変数が設定されていることを確認できます。しかし、getConnection() メソッドが呼び出されると、その変数は null です。

何が間違っている可能性がありますか?

4

0 に答える 0