在myeclipse10.0中 hibernate3.2和hibernate3.3他们有什么区别吗?还有spring2.5和spring3.0有什么区别?

 我来答
匿名用户
2017-11-08
展开全部

有包冲突,

1.在搭建SSH开发平台的时候,由MyEclipse自动导入的包存在一些冲突,主要有

(1) asm.jar与asm-2.2.3.jar

asm-2.2.3是spring所依赖,而asm.jar是hibernate依赖的,应该删除asm-2.2.3.jar这个包

(2). commons-logging-1.0.4.jar与commons-logging-api-1.1.jar

这两个包中commons-logging-1.0.4.jar是spring和hibernate以及struts都要用的包,但是struts2.1以上的版本还需要commons-logging-api-1.1.jar,其实这两个包几乎一样,commons-logging-api-1.1.jar版本较新而已。

(3)异常

严重: Exception starting filter struts2

java.lang.NullPointerException

at com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance(SpringObjectFactory.java:203)

...

可能的原因是spring的默认配置文件applicationContext.xml改了名,或者没有放在classpath的根路径下面,并且没有在web.xml文件中配置spring的监听器,解决办法在web.xml中添加

<listener>

<listener-class>

org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>

(4)异常

严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListenerorg.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]

可能的原因是虽然配置了spring的监听器,但是没有在web.xml中配置contextConfigLocation来指定spring配置文件列表及相应的具体路径。解决的办法是在web.xml文件中添加,例如:

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/csdn-spring*.xml</param-value>

</context-param> 

(5)异常

org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Cannot open connection

可能的原因是缺少相应的JDBC驱动包,请把驱动包拷贝到/WEB-INF/lib下面,或者是数据源的配置有问题,例如用户名、者密码或者URL错误。

(6)错误提示:Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V

解决方法如下:

当你把spring包和hibernate相应包打进项目里,然后在打包的文件里把把

asm.jar,asm-attrs.jar,cglib-2.1.3.jar三个文件从项目里导出,并删掉就OK了

原因:由于cglib-2.1.3 依赖的asm 跟在外边的asm版本不一致导致, 

把cglib换成 cglib-nodep版本的就可以了

Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/spring_config/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: Serializable 

ID的属性搞错了,用逆向工程重新生成一下*.hbm.xml,发现它的<id name="id" type="java.lang.Integer">

<column name="id" />

<generator class="native" />

</id>

generator class="native" 而之前手写的是identity

(7)错误提示:CGLIB Enhancement failed

解决:

Spring的AOP编程时,会用到这几个lib:

asm-2.2.3.jar

asm-commons-2.2.3.jar

asm-util-2.2.3.jar

cglib-nodep-2.1_3.jar

Hibernate也包含类似的包lib:

asm.jar

asm-attrs.jar

cglib-2.1.3.jar

而导致的包冲突。

只要将hibernate用到的三个包都删掉就应该没有问题了,可是正常情况下这样是解决不了问题的,因为tomcat下已经放在webapps文件夹下的包却还没有删除,所以我们要手工删除它,找到C:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps/目录下,你的项目,WEB-INF文件夹,lib文件夹,将三个包删除就ok了

原因:其实是包冲突的问题。

Spring2.0 AOP Liberaries里的asm2.2.3.jar和Hiberate中的生成代理用的asm.jar冲突

把asm2.2.3.jar , asm-util-2.2.3.jar, asm-commons-2.2.3.jar 这三个包删除就可以了。。。 

(8)java.lang.AbstractMethodError:com.microsoft.jdbc.base.BaseDatabaseMetaData.supportsGetGeneratedKeys()Z 

说是MS SQL Server 的driver有bug:Hibernate3与SQL连接时出现的java.lang.AbstractMethodError: com..... 

解决办法的不用msbase.jar、mssqlserver.jar、msutil.jar三个驱动包,而是使用jtds-1.2.5.jar,并修改更改hibernate配置文件: 

原驱动连接配置: 

<property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property> <property name="connection.url">jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=hibernate</property>更改jtds连接: <property name="connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property> <property name="connection.url">jdbc:jtds:sqlserver://127.0.0.1:1433;DatabaseName=hibernate</property> 

经测试确实可以,但也可能是spring和hibernate的jar包冲突的问题: 

如果先为项目增加spring capability并带好Spring3.0 AOP Libraries、Spring 3.0 Core Libraries、Spring 3.0 Persistence Core Libraries、Spring 3.0 Persistence JDBC Libraries四个类库,而在添加Hibernate capability时不选这四个类库,则不会出现问题。 

(9)java.lang.NoClassDefFoundError: org/objectweb/asm/Type 

缺少asm.jar包,增加即可。 

(10)java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter 

删除cglib-*.jar和asm-*.jar删除,添加spring中的cglib-2.1.3.jar,hibernate中可能引入了cglibb-2.2.jar这个包,应该用cglib-2.1.3.jar。 

(11)java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 

web.xml中的struts2配置: 

<filter> 

<filter-name>struts2</filter-name> 

<!-- 工具自动添加的处理类,用下面的FilterDispatcher替代 <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> --> 

<filter-class>cn.venice.util.AuthorityFilter</filter-class> 

</filter> 

AuthorityFilter类是自写的过滤类。出现这个异常的原因未知,重启了一次tomcat消失了 

(12)Cannot locate the chosen ObjectFactory implementation: spring 

用struts2,在struts.xml中写了 

<constant name="struts.objectFactory" value="spring" /> 

但忘了导入struts2-spring-plugin-*.jar包,导入即可。

(6)异常

javax.servlet.ServletException: Error applying decorator: null

org.apache.struts2.sitemesh.FreeMarkerPageFilter.applyDecorator(FreeMarkerPageFilter.java:164)

org.apache.struts2.sitemesh.TemplatePageFilter.applyDecorator(TemplatePageFilter.java:116)

com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:62)

org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)

org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)

org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

Struts2的sitemesh插件struts2-sitemesh-plugin-2.1.6的一个BUG,是FreeMarkerPageFilter的getLocale方法没有对invocation添加非空判断造成的,解决办法是解压包,然后找到org.apache.struts2.sitemesh.FreeMarkerPageFilter这个类,将

view plaincopy to clipboardprint?

1.        protected Locale getLocale(ActionInvocation invocation, Configuration configuration) {       

2.                if (invocation.getAction() instanceof LocaleProvider) {       

3.                    return ((LocaleProvider) invocation.getAction()).getLocale();       

4.                 } else {       

5.                    return configuration.getLocale();       

6.                 }       

7.        }      

修改为:

view plaincopy to clipboardprint?

1.        protected Locale getLocale(ActionInvocation invocation, Configuration configuration) {       

2.            if (invocation != null && invocation.getAction() instanceof LocaleProvider) {       

3.                return ((LocaleProvider) invocation.getAction()).getLocale();       

4.             } else {       

5.                return configuration.getLocale();       

6.             }       

7.        }

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式