2016-01-28 12:27:46.433 3a37210f D 00000000000000000000000000000000 002e:Could not retrieve pre-bound Hibernate session "org.hibernate.HibernateException: No Session found for current thread
at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:106)
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1014)
at org.springframework.orm.hibernate4.HibernateTemplate.doExecute(HibernateTemplate.java:325)
at org.springframework.orm.hibernate4.HibernateTemplate.execute(HibernateTemplate.java:295)
at com.fusionone.pml.dao.hibernate.AbstractDao.executeCallback(AbstractDao.java:398)
at com.fusionone.pml.dao.hibernate.AbstractDao.listInner(AbstractDao.java:300)
at com.fusionone.pml.dao.hibernate.AbstractDao.list(AbstractDao.java:262)
at com.fusionone.pml.dao.hibernate.ExtShareDaoImpl.listExpiredShares(ExtShareDaoImpl.java:63)
at com.fusionone.nab.apps.service.impl.ExtShareServiceImpl.listExpiredShares(ExtShareServiceImpl.java:628)
at com.fusionone.wsg.nab.scheduler.ExtShareExpiredScheduler.cleanup(ExtShareExpiredScheduler.java:111)
at com.fusionone.wsg.nab.scheduler.ExtShareExpiredScheduler.execute(ExtShareExpiredScheduler.java:99)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:269)
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:321)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:111)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)
"
2016-01-28 12:27:46.441 3a37210f D 00000000000000000000000000000000 000b:F1Exception "8 SQL Error (Named query not known: ExtShare.find_all_shares_expired; nested exception is org.hibernate.MappingException: Named query not known: ExtShare.find_all_shares_expired)
at com.fusionone.pml.dao.hibernate.AbstractDao.executeCallback(AbstractDao.java:400)
at com.fusionone.pml.dao.hibernate.AbstractDao.listInner(AbstractDao.java:300)
at com.fusionone.pml.dao.hibernate.AbstractDao.list(AbstractDao.java:262)
at com.fusionone.pml.dao.hibernate.ExtShareDaoImpl.listExpiredShares(ExtShareDaoImpl.java:63)
at com.fusionone.nab.apps.service.impl.ExtShareServiceImpl.listExpiredShares(ExtShareServiceImpl.java:628)
at com.fusionone.wsg.nab.scheduler.ExtShareExpiredScheduler.cleanup(ExtShareExpiredScheduler.java:111)
at com.fusionone.wsg.nab.scheduler.
Je mise à niveau vers hibernate4.3.11 aussi j'utilise spring.4.0 dans mon projet .la mise à niveau hibernate3 à hibernate4 aussi je l'ai fait tous les changements, mais je reçois « Impossible de récupérer avant la session Hibernate liée » exceptions dans les journaux
Je charge la fabrique de session et les ressources de mappage en étendant la méthode localsessionfactorybean buildsessionfactorymethod.
@Override
protected SessionFactory buildSessionFactory(LocalSessionFactoryBuilder localSessionFactoryBuilder){
SessionFactory sessionFactory = null;
PMLDialectMappings dialectMappings = null;
String[] mappingResources = null;
try {
Configuration configuration = new Configuration();
// building mappingLocations
Configuration configuration = new Configuration();
// building mappingLocations
dialectMappings =
dialectMappingsLocator.locateDialectMappings(configuration);
if (dialectMappings != null) {
setMappingResources(dialectMappings.getAllMappingResources());
AbstractDao.setDialectSettings(dialectMappings);
}
ServiceRegistry builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(builder);
String schema = configuration.getProperty("hibernate.default_schema");
return super.buildSessionFactory(localSessionFactoryBuilder);
}
Est-ce que ce code est correct pour créer sessionfactory? J'ai vu au-dessus de la manière de créer l'usine de session et je charge des ressources de mapping dans la même méthode. Est-ce correct ou pas? aussi précédemment dans hibernate3 nous chargeons les ressources de mappage dans la méthode getconfiguration. ce qui est déprécié dans Hibernate4 donc j'ai pensé charger loadresources dans la méthode buildSessionFactory seulement.
Aussi dans google j'ai eu comme si vous ajoutez ci-dessous la propriété 'aucune session de hibernate' erreur ira mais cela n'a pas fonctionné pour moi. alors s'il vous plaît donner d'autres suggestions.
hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext
code en veille prolongée 3 est de construire mappingresource SessionFactory et la charge
@Override
protected SessionFactory newSessionFactory(Configuration config) {
try {
String schema = config.getProperty("hibernate.default_schema");
if (schema != null && schema.length() > 0) {
AbstractDao.setSchemaName(schema);
} else {
Logger.get(Constants.PML_LOGGER).warning(
"Property 'hibernate.default_schema' not set: using default");
}
} catch (Throwable t) {
Logger.get(Constants.PML_LOGGER).exception(LogType.CRITICAL, null, null,
"PMLSessionFactoryBean: newSessionFactory method failed", t);
throw new HibernateException(t.getMessage());
}
return super.newSessionFactory(config);
}
/**
* @return Configuration
* @see org.springframework.orm.hibernate3.LocalSessionFactoryBean#newConfiguration()
*/
@Override
protected Configuration newConfiguration() {
Configuration configuration = super.newConfiguration();
// building mappingLocations
PMLDialectMappings dialectMappings =
dialectMappingsLocator.locateDialectMappings(configuration);
if (dialectMappings != null) {
setMappingResources(dialectMappings.getAllMappingResources());
AbstractDao.setDialectSettings(dialectMappings);
}
return configuration;
}
}
application-context.xml
*********************
<bean id="PMLJdbcProperties" class="com.fusionone.core.util.FilteredProperties">
<property name="location" value="classpath:jdbc.properties" />
<constructor-arg value="pml" />
</bean>
<bean id="PMLDataSource"
class="com.fusionone.core.db.pool.MonitoredDataSourceFactory"
destroy-method="close" factory-method="createDataSource">
<constructor-arg ref="PMLJdbcProperties" />
</bean>
<bean id="PMLDefaultDialectSettings" class="com.fusionone.pml.bean.PMLDialectMappings"
lazy-init="true" autowire-candidate="false">
<property name="mappingResources">
<list>
<value>hibernate-mappings/BrewApp.hbm.xml</value>
<value>hibernate-mappings/Contact.hbm.xml</value>
<value>hibernate-mappings/DeletedContact.hbm.xml</value>
<value>hibernate-mappings/DeletedContactGroup.hbm.xml</value>
</list>
</property>
<property name="daoInterfaceImpls">
<map>
<entry key="DeletedContactDao"
value="com.fusionone.pml.dao.hibernate.DeletedContactDaoImpl" />
<entry key="DeletedContactGroupDao"
value="com.fusionone.pml.dao.hibernate.DeletedContactGroupDaoImpl" />
</map>
</property>
<bean id="dialectMappingsLocator" class="com.fusionone.pml.bean.DialectMappingsLocator"
autowire="byType">
</bean>
<bean id="PMLSessionFactory" class="com.fusionone.pml.bean.PMLSessionFactoryBean">
<property name="dataSource">
<ref bean="PMLDataSource" />
</property>
<property name="dialectMappingsLocator" ref="dialectMappingsLocator" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.jdbc.use_get_generated_keys">
false
</prop>
<prop key="hibernate.cache.provider_class">
net.sf.ehcache.hibernate.EhCacheProvider
</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.jdbc.batch_size">150</prop>
</props>
</property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="PMLSessionFactory" />
</property>
<property name="nestedTransactionAllowed" value="true" />
</bean>
Mise en veille prolongée 4 changé le cache regionfactory et changer le transanctionmanager hiberner 4.
je change ci-dessus contexte d'application XML
<bean id="PMLJdbcProperties" class="com.fusionone.core.util.FilteredProperties">
<property name="location" value="classpath:jdbc.properties" />
<constructor-arg value="pml" />
</bean>
<bean id="PMLDataSource"
class="com.fusionone.core.db.pool.MonitoredDataSourceFactory"
destroy-method="close" factory-method="createDataSource">
<constructor-arg ref="PMLJdbcProperties" />
</bean>
<bean id="PMLDefaultDialectSettings" class="com.fusionone.pml.bean.PMLDialectMappings"
lazy-init="true" autowire-candidate="false">
<property name="mappingResources">
<list>
<value>hibernate-mappings/BrewApp.hbm.xml</value>
<value>hibernate-mappings/Contact.hbm.xml</value>
<value>hibernate-mappings/DeletedContact.hbm.xml</value>
<value>hibernate-mappings/DeletedContactGroup.hbm.xml</value>
</list>
</property>
<property name="daoInterfaceImpls">
<map>
<entry key="DeletedContactDao"
value="com.fusionone.pml.dao.hibernate.DeletedContactDaoImpl" />
<entry key="DeletedContactGroupDao"
value="com.fusionone.pml.dao.hibernate.DeletedContactGroupDaoImpl" />
</map>
</property>
<bean id="dialectMappingsLocator" class="com.fusionone.pml.bean.DialectMappingsLocator"
autowire="byType">
</bean>
<bean id="PMLSessionFactory" class="com.fusionone.pml.bean.PMLSessionFactoryBean">
<property name="dataSource">
<ref bean="PMLDataSource" />
</property>
<property name="dialectMappingsLocator" ref="dialectMappingsLocator" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.jdbc.use_get_generated_keys">
false
</prop>
<prop key="hibernate.cache.region.provider_class">
org.hibernate.cache.ehcache.EhCacheRegionFactory
</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.jdbc.batch_size">150</prop>
</props>
</property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="PMLSessionFactory" />
</property>
<property name="nestedTransactionAllowed" value="true" />
</bean>
Principalement je dois h ow pour créer sessionfactory et comment charger mappingresources.