Session Hibernate est fermé au printemps de transaction après l'appel de la méthode deuxième fois

Tout d'abord, je suis un débutant au printemps.J'ai créé un simple Ressort de service qui a DAO injecté et la transaction est gérée par HibernateTransactionManager de printemps, comme ci-dessous.(Et la configuration de la transaction est utilisé à l'aide d'annotations )

@Service(value="daopowered")
public class UserServiceImplDao implements UserService
    {
    @Inject
    private UserDao userDao;


    @Override
    @Transactional
    public User autheticate( String userId, String password )
    {
    return userDao.findByIdAndPassword(userId, password);
    } 

Ma configuration de la transaction est la suivante

<bean id="txMgr"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
    <property name="dataSource" ref="dataSource" />
</bean>

<tx:annotation-driven transaction-manager="txMgr" />

Maintenant, le problème est quand je l'appelle méthode d'authentification première fois à l'aide de certains contrôleur puis il fonctionne très bien ( n'DB opérations avec succès), mais après l'appeler de nouveau le deuxième temps de la session hibernate est fermé exception est à venir ? Merci de me guider ce que je fais mal ou comment gérer ce scénario ? Pourquoi pas le printemps ouvre une nouvelle transaction lorsque j'appelle cette méthode deuxième fois ?

Exception De Trace:

2013-05-22T21:04:18.041+0530 DEBUG [14208212-2] lerExceptionResolver Resolving exception from handler [com.akhi.store.controller.HomeController@5d9d277e]: org.springframework.orm.hibernate3.HibernateSystemException: Session is closed!; nested exception is org.hibernate.SessionException: Session is closed!
2013-05-22T21:04:18.044+0530 DEBUG [14208212-2] tusExceptionResolver Resolving exception from handler [com.akhi.store.controller.HomeController@5d9d277e]: org.springframework.orm.hibernate3.HibernateSystemException: Session is closed!; nested exception is org.hibernate.SessionException: Session is closed!
2013-05-22T21:04:18.044+0530 DEBUG [14208212-2] lerExceptionResolver Resolving exception from handler [com.akhi.store.controller.HomeController@5d9d277e]: org.springframework.orm.hibernate3.HibernateSystemException: Session is closed!; nested exception is org.hibernate.SessionException: Session is closed!
2013-05-22T21:04:18.046+0530 DEBUG [14208212-2] et.DispatcherServlet Could not complete request
org.springframework.orm.hibernate3.HibernateSystemException: Session is closed!; nested exception is org.hibernate.SessionException: Session is closed!
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:658)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.convertHibernateAccessException(AbstractSessionFactoryBean.java:245)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.translateExceptionIfPossible(AbstractSessionFactoryBean.java:224)
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:58)
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:163)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at com.sun.proxy.$Proxy28.findByIdAndPassword(Unknown Source)

EDIT: Le code DAO

@Repository
public class UserDaoImpl extends GenericHibernateDAO<User, Long>
implements
UserDao
{
@Override
public User findByIdAndPassword( String id, String password )
{
Criteria crit = getSession().createCriteria(User.class).add(Restrictions.eq("userId",
id)).add(Restrictions.eq("password",
password)).setMaxResults(1);
List<?> list = crit.list();
if (list.size() > 0)
return (User) list.get(0);
else
return null;
}

et getSession() de la mise en œuvre est

protected Session getSession() {
if (session == null) {
session = sessionFactory.getCurrentSession();
}
return session;
}

Aussi l'abrégé classe DAO a sessionfactory injecté

public abstract class GenericHibernateDAO<T, ID extends Serializable>
implements GenericDAO<T, Long> {
private Class<T> persistentClass;
protected Session session;
@Autowired
private SessionFactory sessionFactory;
  • L'exception est levée lors de l'appel de la DAO. Nous montrer le DAO. Aussi, supprimer l'annotation TransactionConfiguration. Cette annotation est utilisée dans les DAO des tests d'intégration. Pas dans le code de production (où il est inutile, et ignoré par Ressort).
  • Édité et inclus DAO
InformationsquelleAutor Akhilesh | 2013-05-22