首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

SSH整合异常求解

2013-01-11 
SSH整合错误求解Spring2.5.4+Struts2.3.4.1+Hibernate3.6.0整合后在eclipse+tomcat6.0环境下运行,报错信息

SSH整合错误求解
Spring2.5.4+Struts2.3.4.1+Hibernate3.6.0整合后在eclipse+tomcat6.0环境下运行,报错信息:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [spring-config.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.hibernate.cfg.Configuration.setCacheConcurrencyStrategy(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)
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:563)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
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:4206)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)


网上很多类似帖子说是jar包冲突,试了几个也没有解决,有遇到过的高手请指点一下.谢谢! ssh hibernate nested jar包冲突
[解决办法]
似乎是导入的 a字母开头的一个包的冲突,把你的包贴出来看看
[解决办法]
ssh jar冲突问题
关键字: ssh jar 
你在加的时候按这个顺序来加Struts--Spring--Hibernate,有重复包的时候不要替换就没问题了




方法一: 
在使用Spring的AOP编程时,会用到这几个lib: 
asm-2.2.2.jar 
asm-commons-2.2.2.jar 
asm-util-2.2.2.jar 

Hibernate使用如果lib: 
asm.jar 
asm-attrs.jar 


其中asm-2.2.2.jar与asm.jar存在类上的冲突!!! 
使用其中之一或两者都使用,可能会出现如下错误: 
java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor 
java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor 
java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit。。。。。。 


解决办法是: 
1.去掉类路径上的关于Hibernate的3个lib 
asm.jar 
asm-attrs.jar 
cglib-2.1.3.jar 

2.加入Spring中的以下4个lib 
asm-2.2.2.jar 
asm-commons-2.2.2.jar 
asm-util-2.2.2.jar 
cglib-nodep-2.1_3.jar 





方法二: 
在使用Spring的AOP编程时,会用到这几个lib: 
asm-2.2.2.jar 
asm-commons-2.2.2.jar 
asm-util-2.2.2.jar 

Hibernate使用如果lib: 
asm.jarasm-attrs.jar 
其中asm-2.2.2.jar与asm.jar存在类上的冲突。 
使用其中之一或两者都使用,可能会出现如下错误: java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitorjava.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitorjava.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit 

下面是解决方法手工编辑你的.classpath文件,比如我这个(只有部分内容) 

<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_CORE"/> 
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_DAO"/> 
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_AOP"/> 
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_WEB"/> 
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.hibernate.MYECLIPSE_HIBERNATE3_1_CORE"/> 
<classpathentry kind="lib" path="WebRoot/WEB-INF/lib/mysql-connector-java-5.0.4-bin.jar"/> 

将最后2行hibernate和mysql驱动,手工复制到springframework的lib前面。 
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.hibernate.MYECLIPSE_HIBERNATE3_1_CORE"/> 
<classpathentry kind="lib" path="WebRoot/WEB-INF/lib/mysql-connector-java-5.0.4-bin.jar"/> 
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_CORE"/> 
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_DAO"/> 
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_AOP"/> 
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.springframework.MYECLIPSE_SPRING20_WEB"/> 

现在你再试试启动,应该不会报错了。 

我这里用了myeclipse的jar包。如果你是自定义用户库jar包,那么只要保证spring的jar包在hibernate之后加载,项目在部署的时候spring的jar包就会覆盖掉hibernate的jar包。

[解决办法]

引用:
引用:
引用:
引用:sessionFactory这个东西创建错误,是不是没有get方法呢?
应该是注入失败的错误。
找到了,是个意想不到的错误,而且原理未知.
spring配置文件的beans中属性default-autowire="byType"就会报这个错误, 改成d……

难道通过byType实例化sessionFactory的途径和通过byName是不同的?前者遇到了错误,找不到org.hibernate.cfg.Configuration的setCacheConcurrencyStrategy方法,而后者却找到了

通过byName找到的是不是 不是org.hibernate.cfg.Configuration类?
同时确认下这个类包含在哪个jar包里(一般在hibernate3.jar),是不是已经引入?

见到网上一个很奇怪的例子
http://forum.springsource.org/showthread.php?65296-Could-not-initialize-class-org-hibernate-cfg-Configuration
找不到org.hibernate.cfg.Configuration类是由于日志类jar包未引入,不知有何关系


[解决办法]
看样子好像是jar包的板正不兼容引起的。
[解决办法]
spring本身的aotowired就是byType的,楼主这个肯定是jar包冲突或不兼容引起的。ssh中有很多的包是重复的楼主要把兼容的包放到一起,重复的jar包去掉。
[解决办法]
我也遇到过这类的问题,都是因为jar包冲突,但是同时还需要注意下版本问题

热点排行