В простом приложении Spring+Hibernate как разрешить "Нераспознанный тип слушателя"?
Я пытаюсь запустить приложение с помощью Spring(3.0.3) и Hibernate(3.6.10).
Когда я удаляю строку, которая создает сессионный компонент, все работает нормально. Как устранить вышеуказанное исключение? Я скучаю по какой-либо конфигурации / банок?
PFB my Spring Config file -
<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/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd" default-autowire="byType">
<!-- Basic data source -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/hibernate" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" autowire="byType">
<!-- <property name="dataSource" ref="dataSource" /> -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>
</props>
</property>
<property name="mappingResources">
<array>
<value>person.hbm.xml</value>
</array>
</property>
</bean>
<bean class="com.impl.PersonServiceImpl" name="personService"></bean>
Мой класс Hibernate Mapping для человека выглядит так -
<hibernate-mapping>
<class name="com.intf.Person" table="person">
<id name="id" column="id" type="int">
<generator class="identity"></generator>
</id>
<property name="name" column="name" type="string"></property>
<property name="address" column="address" type="string"></property>
<property name="age" column="age" type="int"></property>
<property name="dob" column="dob" type="java.util.Date"></property>
</class>
</hibernate-mapping>
Когда я пытаюсь запустить указанное выше приложение с помощью JUnit, появляется следующее исключение:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: Unrecognized listener type [org.springframework.context.annotation.internalConfigurationAnnotationProcessor]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1412)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:557)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:84)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:1)
at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:280)
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:304)
... 24 more
Caused by: org.hibernate.MappingException: Unrecognized listener type [org.springframework.context.annotation.internalConfigurationAnnotationProcessor]
at org.hibernate.event.EventListeners.getListenerClassFor(EventListeners.java:152)
at org.hibernate.cfg.Configuration.setListener(Configuration.java:2451)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:763)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1469)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409)
... 37 more
2 ответа
Мне удалось решить эту проблему с помощью приведенных ниже изменений в конфигурационном файле Spring. Я изменил тип автоматической проводки на "byName" вместо "byType". Я предполагаю, что когда мы устанавливаем autowiring byType, hibernate ищет класс слушателя "org.springframework.context.annotation.internalConfigurationAnnotationProcessor". Но поскольку такого класса нет ни в Spring 3.0.3, ни в версии Spring 4.1.0, он не может загрузить bean -компонент sessionFactory -
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" **autowire="byName"**>
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>
</props>
</property>
<property name="mappingResources">
<array>
<value>person.hbm.xml</value>
</array>
</property>
Это исключение при создании bean-компонента, это означает, что файл класса отсутствует. Отсутствует файл класса, а значит отсутствует соответствующий файл / конфигурация jar-файла. Так что вы можете проверить / убедиться, что соответствующий файл jar отсутствует в файле maven pom.xml или в папках jar,
Maven зависимость:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>2.5.1</version>
</dependency>