org.mise en veille prolongée.service.UnknownServiceException: Inconnue service demandé
Je suis en train d'écrire un test unitaire pour mon AbstractHibernateRepository méthode de sauvegarde. Je suis l'aide de printemps de test runner, mais je reçois l'exception suivante lorsqu'il s'exécute:
org.hibernate.service.UnknownServiceException: Unknown service requested [org.hibernate.engine.jdbc.connections.spi.ConnectionProvider]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:201)
Mon Test:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/spring-hibernate.xml")
public class AbstractHibernateRepoTest extends AbstractHibernateRepo<Video> {
@Autowired private SessionFactory sessionFactory;
private Video video;
public AbstractHibernateRepoTest()
{
super(Video.class);
}
@Before
public void setUp ()
{
video = new Video();
video.setId("xyz");
video.setName("Video Name");
video.setSrc("Source");
video.setThumbnail("Thumbnail");
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(video) ;
session.close();
}
@Test
public void testSaveMethod ()
{
video.setId("asa");
String id = (String) save(video);
Assert.assertEquals(video.getId(), id);
}
@After
public void breakDown ()
{
sessionFactory.close();
}
}
Référentiel:
@Autowired private SessionFactory sessionFactory;
private final Class<T> clazz;
public AbstractHibernateRepo(Class<T> clazz)
{
this.clazz = clazz;
}
@SuppressWarnings("unchecked")
@Transactional(rollbackFor = HibernateException.class)
@Override
public T findById(Serializable id)
{
if (id == null)
throw new NullPointerException();
return (T) getSessionFactory().getCurrentSession().get(getClazz(), id);
}
@Override
@Transactional(rollbackFor = HibernateException.class)
public Serializable save(T entity)
{
if (entity == null)
throw new NullPointerException();
return getSessionFactory().getCurrentSession().save(entity);
}
@Override
@Transactional(rollbackFor = HibernateException.class)
public void delete(T entity)
{
if (entity == null)
throw new NullPointerException();
getSessionFactory().getCurrentSession().delete(entity);
}
@Override
@Transactional(rollbackFor = HibernateException.class)
public void update(T entity)
{
if (entity == null)
throw new NullPointerException();
getSessionFactory().getCurrentSession().update(entity);
}
}
Printemps Config:
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- Root Context: defines shared resources visible to all other web components -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1;MVCC=TRUE"/>
<property name="username" value="someuser"/>
<property name="password" value="somepassword"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.package.model"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
<property name="dataSource" ref="dataSource"/>
</bean>
Ce qui est à l'origine de ce problème et comment puis-je résoudre ce problème?
OriginalL'auteur user2054833 | 2014-10-20
Vous devez vous connecter pour publier un commentaire.
Je pourrais être complètement hors ici, mais pour moi, cela semble être un gestionnaire de session d'exception. Dans
@Before
vous d'ouvrir et de fermer la session, puis danssave()
vous obtenez la session en cours, ce qui est peut être celui que vous venez de fermer, conduisant à une exception. Essayez si cela fonctionne, si vous ne fermez pas dans@Before
(je sais c'est pas la solution, juste pour tester la théorie). Vous pouvez également essayer d'ouvrir une nouvelle session dans le dépôt au lieu d'obtenir le courant (pas non plus la solution). La seule différence que je constate par rapport à notre travail de configuration de test, c'est que dans@Before
nous appeler à notre référentiel de méthodes, marqué comme@Transactional
, au lieu de créer une session directement.Avez-vous une idée de comment résoudre ce problème stackoverflow.com/questions/31694247/... ?
OriginalL'auteur Predrag Maric
Je suis tombé sur une erreur similaire à l'exception de l'inconnu de service a été [org.mise en veille prolongée.le cache.le spi.RegionFactory] qui ne s'est produite au printemps lorsque le contexte a commencé une deuxième fois. Le problème était dû à une en partie détruite beanFactory et gestionnaire de transactions cache dans org.springframework.des transactions.l'intercepteur.TransactionAspectSupport. La solution a été d'appeler org.springframework.des transactions.l'intercepteur.TransactionAspectSupport#clearTransactionManagerCache.
probablement, il a étendu cette classe et l'a appelé
OriginalL'auteur user6780416
Je suis tombé sur cette même erreur. J'ai découvert la cause dans mon cas. Mon expérience peut aider quelqu'un d'autre.
Je appeler
ServiceRegistryBuilder.destroy()
dans monsessionFactoryCreated
méthode plutôt que monsessionFactoryClosed
méthode.En gros, j'ai détruit mon registre de service, puis a tenté d'obtenir une nouvelle session, et de ce fait, Hibernate produire de l'induire en erreur message d'erreur.
Donc, je pense que si les gens que vous obtenez cette erreur, vérifiez qu'ils ne sont pas la fermeture de la session ou de registre et ensuite essayer de l'obtenir à nouveau.
OriginalL'auteur Steve Single
Pour le futur de Google les chercheurs:
Quand j'ai vu ce problème a été causé par une erreur dans le script sql qui a été exécuté avant le début des épreuves. Le défilement arrière assez loin à travers les journaux ont révélé l'erreur, de sorte qu'il vaut la peine de regarder en arrière pour vérifier qu'un
UnknownServiceException
n'est pas juste un effet secondaire d'un autre problème.OriginalL'auteur Charlie Hurrell
Son Rien , son problème de cache . il suffit de fermer votre serveur et le nettoyage de votre tomcat . puis redémarrer . Je l'ai résolu comme ça.
OriginalL'auteur Ramanpreet Singh
J'ai découvert cette erreur pendant l'Hibernation de test de l'unité de la création. J'ai créé session par mon util classe:
Session session = XmlSessionUtil.getSessionFactory().openSession();
Dans une session de test a été fermé parsession.close();
Quand j'ai enlevé la déclaration de clôture de la session de tous les tests passés. Donc dans mon cas était une exception raison séance à huis clos.OriginalL'auteur Sir Montes
J'ai eu cette erreur lors de travail avec le framework hibernate.
Afin de se débarrasser de cette erreur que j'ai changer la séquence de fermeture de session et de la session de l'usine. comme cette.
Il a travaillé pour moi.
Espérons que cela fonctionnera pour vous.
OriginalL'auteur akash ingle