Printemps 3.1 + Hibernate 4.1 JPA, l'Entité gestionnaire de l'usine est enregistré deux fois

Je suis en utilisant le Framework Spring 3.1 avec Hibernate 4.1 en tant que fournisseur JPA, et j'ai un entièrement fonctionnel de l'installation, mais à chaque fois que l'application web est démarré, je vois ce message d'avertissement:

14:28:12,725  WARN pool-2-thread-12 internal.EntityManagerFactoryRegistry:80 - HHH000436: Entity manager factory name (something) is already registered.  If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name'

L'application fonctionne correctement, mais les messages d'avertissement comme ça me dérange pas, et des heures de recherches et de peaufiner et d'expérimenter m'ont conduit nulle part. J'ai essayé de changer le nom de l'usine et de l'ajouter et de supprimer des morceaux de configuration, en vain. Il semble que quelque chose, au Printemps ou en veille prolongée est juste de l'initialisation de l'entité gestionnaire de l'usine deux fois.

Pour info, je suis en utilisant le packagesToScan la fonctionnalité de la LocalContainerEntityManagerFactorybean pour configurer le gestionnaire d'entité sans persistence.xml fichier.

J'ai épuré mon printemps contexte XML pour la suite et le problème persiste:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

  <context:property-placeholder location="classpath:jdbc.properties"/>
  <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.nightsword.driverClassName}"/>
    <property name="url" value="${jdbc.nightsword.url}"/>
    <property name="username" value="${jdbc.nightsword.username}"/>
    <property name="password" value="${jdbc.nightsword.password}"/>
  </bean>

  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaVendorAdapter">
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" value="x.y"/>
  </bean>
</beans>

Pour être complet, voici hibernate.propriétés:

hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.ejb.entitymanager_factory_name=something

Et voici un extrait de débogage au niveau de la sortie du journal des deux org.springframework.l'orm et org.mise en veille prolongée. Vous pouvez voir comment à 14:40:06,911 l'EntityManagerFactory est enregistrée à partir de la première fois, et, immédiatement après, la LocalContainerEntityManagerFactorybean semble tout recommencer depuis le début. Hein.

INFO: Deploying web application archive /opt/local/share/java/tomcat7/webapps/nightsword.war
14:40:06,149  INFO pool-2-thread-13 jpa.LocalContainerEntityManagerFactoryBean:264 - Building JPA container EntityManagerFactory for persistence unit 'default'
14:40:06,219 DEBUG pool-2-thread-13 type.BasicTypeRegistry:143 - Adding type registration boolean -> org.hibernate.type.BooleanType@4cb91eff
...
14:40:06,882 DEBUG pool-2-thread-13 internal.SessionFactoryRegistry:62 - Initializing SessionFactoryRegistry : org.hibernate.internal.SessionFactoryRegistry@161bb7fe
14:40:06,882 DEBUG pool-2-thread-13 internal.SessionFactoryRegistry:75 - Registering SessionFactory: a3219dd8-7d59-45ac-9a5a-0d13e38dbb04 (<unnamed>)
14:40:06,882 DEBUG pool-2-thread-13 internal.SessionFactoryRegistry:82 - Not binding SessionFactory to JNDI, no JNDI name configured
14:40:06,882 DEBUG pool-2-thread-13 internal.SessionFactoryImpl:487 - Instantiated session factory
14:40:06,882 DEBUG pool-2-thread-13 internal.SessionFactoryImpl:1119 - Checking 0 named HQL queries
14:40:06,883 DEBUG pool-2-thread-13 internal.SessionFactoryImpl:1142 - Checking 0 named SQL queries
14:40:06,887 DEBUG pool-2-thread-13 internal.StatisticsInitiator:110 - Statistics initialized [enabled=false]
14:40:06,910 DEBUG pool-2-thread-13 internal.EntityManagerFactoryRegistry:56 - Initializing EntityManagerFactoryRegistry : org.hibernate.ejb.internal.EntityManagerFactoryRegistry@75cc9008
14:40:06,911 DEBUG pool-2-thread-13 internal.EntityManagerFactoryRegistry:66 - Registering EntityManagerFactory: something 
14:40:06,967  INFO pool-2-thread-13 jpa.LocalContainerEntityManagerFactoryBean:264 - Building JPA container EntityManagerFactory for persistence unit 'default'
14:40:06,967 DEBUG pool-2-thread-13 type.BasicTypeRegistry:143 - Adding type registration boolean -> org.hibernate.type.BooleanType@4cb91eff
...
14:40:07,128 DEBUG pool-2-thread-13 internal.SessionFactoryRegistry:75 - Registering SessionFactory: 81a9b5a6-83aa-46ee-be68-d642e6fda584 (<unnamed>)
14:40:07,128 DEBUG pool-2-thread-13 internal.SessionFactoryRegistry:82 - Not binding SessionFactory to JNDI, no JNDI name configured
14:40:07,129 DEBUG pool-2-thread-13 internal.SessionFactoryImpl:487 - Instantiated session factory
14:40:07,129 DEBUG pool-2-thread-13 internal.SessionFactoryImpl:1119 - Checking 0 named HQL queries
14:40:07,129 DEBUG pool-2-thread-13 internal.SessionFactoryImpl:1142 - Checking 0 named SQL queries
14:40:07,129 DEBUG pool-2-thread-13 internal.StatisticsInitiator:110 - Statistics initialized [enabled=false]
14:40:07,130 DEBUG pool-2-thread-13 internal.EntityManagerFactoryRegistry:66 - Registering EntityManagerFactory: something 
14:40:07,130  WARN pool-2-thread-13 internal.EntityManagerFactoryRegistry:80 - HHH000436: Entity manager factory name (something) is already registered.  If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name'
Comment êtes-vous initialisation de votre Ressort de Contexte de l'Application? Avez-vous un org.springframework.web.contexte.ContextLoaderListener déclaré dans votre web.xml? Êtes-vous à l'aide de Spring MVC? J'ai vu parfois, Spring MVC configurations XML d'importer les autres app. contexte XML, provoquant l'instanciation deux fois certains haricots, car elles sont déclarées dans le contexte de l'application et le contexte d'application web.
Oui, je le suis, et vous cloué. La DispatcherServlet était en train de charger le même fichier de contexte comme le ContextLoaderListener, et bam, haricots chargé à deux reprises. Newbie erreur, comment embarrassant! Si vous voulez reformuler votre commentaire comme une réponse, je serais heureux de l'accepter. Merci!
Nous sommes tous des débutants à quelque chose, ça n'a rien à avoir honte.

OriginalL'auteur Wilson Jackson | 2012-06-02