2013-02-28 6 views
0

Dans mon application, j'ai un bean DAO que j'injecte avec une session session Hibernate (avec le pool de connexion c3p0 configuré) via Spring. Mon haricot sessionFactory est défini comme ceci:Hibernate DAO/SessionFactory Utilisation

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
... 
</bean> 

Quelle est la meilleure pratique et/ou meilleures performances pour l'utilisation de la fève de DAO d'emballage dans un environnement fileté? Devrais-je le définir comme un bean singleton et le laisser partagé entre les threads tout en comptant sur la sécurité thread de la sessionFactory? Ou devrais-je créer une instance DAO séparée pour chaque thread? Est-ce que c'est important?

Répondre

3

Si vos DAO ne possèdent aucun champ membre autre que SessionFactory, utilisez chacun comme un singleton passé à tous les threads. Une pratique courante avec Spring est d'annoter votre implémentation DAO avec @Repository et @Autowired l'instance dans votre service ou d'autres classes qui ont besoin de l'utiliser.

Les SessionFactory#openSession() et SessionFactory#getCurrentSession() renvoient une nouvelle instance de session et une session locale de thread, respectivement, afin que rien ne soit partagé entre les threads.

Questions connexes