Ich entwickle eine kleine Frühlingsanwendung. Ich muss die Details der Schülerinformationen in der Datenbank speichern. Ich habe einen SimpleFormController entwickelt. Ich habe NetBeans + Hibernate-Mapping + Spring verwendet. Bei der Bereitstellung des Projekts treten die folgenden Fehler auf.
Meine spring-config-db-applicationContext.xml wird unten gezeigt:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- Hibernate session factory -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<constructor-arg index="0">
<value>${driverClassName}</value>
</constructor-arg>
<constructor-arg index="1">
<value>${url}</value>
</constructor-arg>
<constructor-arg index="2">
<value>${username}</value>
</constructor-arg>
<constructor-arg index="3">
<value>${password}</value>
</constructor-arg>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<!-- <property name="configLocation">
<value>WEB-INF/classes/hibernate.cfg.xml</value>
</property> -->
<property name="mappingResources" >
<list>
<value>hibernate.cfg.xml</value>
</list>
</property>
<!-- <property name="configurationClass">
<value>org.hibernate.cfg.AnnotationConfiguration</value>
</property> -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${dialect}</prop>
<prop key="hibernate.show_sql">true</prop>
<!--<prop key="hibernate.hbm2ddl.auto">create</prop>-->
</props>
</property>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
</beans>
Der folgende Fehler tritt auf:
ERROR (org.springframework.web.context.ContextLoader:213) - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in URL [jndi:/localhost/Student/WEB-INF/classes/config/spring-db-applicationContext.xml]: Invocation of init method failed; nested exception is Java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.Java:1395)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.Java:512)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.Java:450)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.Java:289)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.Java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.Java:286)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.Java:188)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.Java:526)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.Java:730)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:387)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.Java:270)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.Java:197)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.Java:47)
at org.Apache.catalina.core.StandardContext.listenerStart(StandardContext.Java:3843)
at org.Apache.catalina.core.StandardContext.start(StandardContext.Java:4342)
at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:791)
at org.Apache.catalina.core.ContainerBase.addChild(ContainerBase.Java:771)
at org.Apache.catalina.core.StandardHost.addChild(StandardHost.Java:525)
at org.Apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.Java:627)
at org.Apache.catalina.startup.HostConfig.deployApps(HostConfig.Java:511)
at org.Apache.catalina.startup.HostConfig.check(HostConfig.Java:1231)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
at Java.lang.reflect.Method.invoke(Method.Java:597)
at org.Apache.Tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.Java:297)
at com.Sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.Java:836)
at com.Sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.Java:761)
at org.Apache.catalina.manager.ManagerServlet.check(ManagerServlet.Java:1471)
at org.Apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.Java:824)
at org.Apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.Java:350)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:717)
at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:290)
at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.Java:196)
at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:235)
at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:206)
at org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:233)
at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:191)
at org.Apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.Java:525)
at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:128)
at org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:102)
at org.Apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.Java:109)
at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:286)
at org.Apache.coyote.http11.Http11Processor.process(Http11Processor.Java:845)
at org.Apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.Java:583)
at org.Apache.Tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.Java:447)
at Java.lang.Thread.run(Thread.Java:619)
Caused by: Java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V
at net.sf.cglib.core.DebuggingClassWriter.<init>(DebuggingClassWriter.Java:47)
at net.sf.cglib.core.DefaultGeneratorStrategy.getClassWriter(DefaultGeneratorStrategy.Java:30)
at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.Java:24)
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.Java:216)
at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.Java:144)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.Java:116)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.Java:108)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.Java:104)
at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.Java:69)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.Java:117)
at org.hibernate.proxy.pojo.cglib.CGLIBProxyFactory.postInstantiate(CGLIBProxyFactory.Java:43)
at org.hibernate.Tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.Java:162)
at org.hibernate.Tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.Java:135)
at org.hibernate.Tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.Java:55)
at org.hibernate.Tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.Java:56)
at org.hibernate.Tuple.entity.EntityMetamodel.<init>(EntityMetamodel.Java:302)
at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.Java:434)
at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.Java:108)
at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.Java:61)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.Java:238)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.Java:1304)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.Java:813)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.Java:731)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.Java:211)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.Java:1454)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.Java:1392)
... 48 more
Mar 12, 2010 5:32:28 PM org.Apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
Sie haben eine Inkompatibilität zwischen der von Hibernate (asm-1.5.3.jar) erforderlichen Version von ASM und der von Spring benötigten Version. Aber eigentlich frage ich mich, warum Sie asm-2.2.3.jar auf Ihrem Klassenpfad haben (ASM ist in spring.jar und spring-core.jar gebündelt, um solche Probleme zu vermeiden). Siehe HHH-2222 .
Ich habe hier die Lösung für dieses Problem gefunden: http://www.hildeberto.com/2008/05/hibernate-and-jersey-conflict-on.html
Das NoSuchMethodError javadoc sagt folgendes:
Wird ausgelöst, wenn eine Anwendung versucht, eine angegebene Methode einer Klasse (statisch oder Instanz) aufzurufen, und diese Klasse hat keine Definition dieser Methode mehr.
Normalerweise wird dieser Fehler vom Compiler abgefangen. Dieser Fehler kann nur zur Laufzeit auftreten, wenn sich die Definition einer Klasse inkompatibel geändert hat.
In Ihrem Fall ist dieser Fehler ein strong-Hinweis, dass Ihre Webapp die falsche Version der JAR-Datei verwendet, die die org.objectweb.asm.*
-Klassen definiert.
um dieses Problem zu lösen, sollten Sie zwei Pars in Ihrem Abhängigkeits-POM hinzufügen (wenn Sie Maven verwenden).
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.1</version>
</dependency>
Ich ändere meine APIs als * cglib --- zu ---> cglib-nodep-2.2.jar * cglib-asm --- zu ---> cglib- asm.jar (dh späteste)
Ich hatte den gleichen Fehler beim Initialisieren von Spring beim Start mit verschiedenen Bibliotheksversionen, aber alles funktionierte, als ich meine Versionen in dieser Reihenfolge im Klassenpfad abbekam (die anderen Bibliotheken im cp waren nicht wichtig):
Es gibt eine Menge Inkompatibilität zwischen verschiedenen Versionen von Cglib und einer Menge schlechter Ratschläge, die zu diesem Thema gegoogelt werden können (alte Versionen von Cglib-Nodeb usw.). Nachdem ich 3 Tage lang mit diesem Unsinn mit einer alten Version von Spring (2.5.6) gerungen hatte, habe ich entdeckt:
Aktualisieren Sie Ihre pom.xml
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.1</version>
</dependency>
Beim Hinzufügen von http-builder zu Abhängigkeiten ist derselbe Fehler aufgetreten.
In meinem Fall könnte ich das Problem lösen, indem ich asm so ausschließe:
compile('org.codehaus.groovy.modules.http-builder:http-builder:0.7'){
excludes 'xml-apis'
exclude(group:'xerces', module: 'xercesImpl')
excludes 'asm'
}