Spring 3.1 + Hibernate 4.1 JPA-Entity-manager-factory registriert ist zweimal

Ich bin mit Spring Framework 3.1 mit Hibernate 4.1 als JPA-provider, und ich habe eine voll funktionsfähige setup, aber jedes mal, wenn die web-app gestartet wird, sehe ich diese Warnmeldung:

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'

Funktionen der Anwendung ganz gut, aber Warnung Nachrichten wie die, die mich stören, und die Stunden des suchen und tüfteln und Experimentieren haben, führen mich nirgendwo. Ich habe versucht, die änderung der Fabrik Namen und das hinzufügen und weglassen von Blöcken von Konfiguration, alles ohne Erfolg. Es scheint, dass etwas in Spring oder Hibernate ist nur die Initialisierung der entity-manager-factory-doppelt.

Zur info, ich bin mit dem packagesToScan Funktionalität der LocalContainerEntityManagerFactorybean konfigurieren der entity-manager ohne persistence.xml Datei.

Habe ich reduziert, meine spring context XML zu den folgenden und das problem weiterhin besteht:

<?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>

Für die Vollständigkeit, die hier überwintern.Eigenschaften:

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

Und hier ist ein Auszug der debug-Stufe log-Ausgabe von beiden org.springframework.orm und org.hibernate. Sie können sehen, wie bei 14:40:06,911 der EntityManagerFactory angemeldet ist das erste mal, und sofort danach die LocalContainerEntityManagerFactorybean erscheint ganz zu Beginn vom Anfang. Huh.

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'
Wie sind Sie mit der Initialisierung von Spring Application Context? Hast du ein org.springframework.web.Kontext.ContextLoaderListener erklärte in Ihrem web.xml? Sind Sie mit Spring MVC? Ich habe gesehen, manchmal Spring MVC, XML-Konfigurationen importieren app. Zusammenhang XML, wodurch die Instanziierung zweimal einige Bohnen, weil Sie in der Anwendung deklariert Kontext und der web-Anwendung Kontext.
Ja, ich bin, und Sie nagelte ihn. Das DispatcherServlet war der laden der gleiche Kontext-Datei wie der ContextLoaderListener, und bam, Bohnen zweimal geladen. Newbie Fehler, wie peinlich! Wenn Sie möchten, formulieren Sie Ihren Kommentar als eine Antwort wäre ich glücklich, es zu akzeptieren. Danke!
Wir sind alle Anfänger bei sowas, es ist nichts zu schämen.

InformationsquelleAutor Wilson Jackson | 2012-06-02

Schreibe einen Kommentar