javascript
将Spring 3.x和Hibernate 3.x升级到Spring Platform 1.0.1(Spring + hibernate 4.x)
我最近自愿將我們的最新項目升級到最新版本的Spring Platform。 Spring Platform為您提供的是整個Spring框架庫集中的依賴項和插件管理。
由于我們落后了一點,升級確實增加了一些樂趣。 這是我遇到的事情:
Maven:
我們的pom文件仍在引用:
hibernate.jar
ehcache.jar
這些偽像不會在最新版本上退出,因此請使用hibernate-core.jar和ehcache-core.jar替換它們。
我們還仍然使用休眠工具+ maven run插件對我們的db對象進行反向工程。 我需要更新為候選版本:
<hibernate-tools .version="">4.3.1.CR1</hibernate-tools>休眠:
代碼:“ Hibernate.createBlob”…不再存在
替換為:
private Blob createBlob(final byte[] bytes) { return NonContextualLobCreator.INSTANCE.wrap(NonContextualLobCreator.INSTANCE.createBlob(bytes)); }在HibernateTemplate上,返回類型現在為List; 不是元素…因此需要為要返回的列表添加演員表。
import org.hibernate.classic.Session;替換為:
import org.hibernate.Session; 逆向工程師的工作方式略有不同……
將Long分配給數字…
添加:
可能的錯誤:
- 原因:org.hibernate.service.UnknownUnwrapTypeException:無法解包為請求的類型[javax.sql.DataSource]
為c3p0添加依賴項:
<dependency><groupid>org.hibernate</groupId><artifactid>hibernate-c3p0</artifactId><version>${hibernate.version}</version> </dependency>并在cfg.xml中為其配置設置:
<property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.timeout">300</property> <property name="hibernate.c3p0.max_statements">50</property> <property name="hibernate.c3p0.idle_test_period">3000</property>- 引起原因:java.lang.ClassNotFoundException:org.hibernate.engine.FilterDefinition
可能仍在某處使用對hibernate3 factory / bean的引用,更改為hibernate4:
org.springframework.orm.hibernate3.LocalSessionFactoryBean org.springframework.orm.hibernate3.HibernateTransactionManager- 由以下原因引起:java.lang.ClassNotFoundException:無法加載請求的類:org.hibernate.hql.classic.ClassicQueryTranslatorFactory新API進行了細微更改,因此可以通過將屬性值替換為:
彈簧:
令人驚訝的是,我們的某些應用程序上下文文件仍然引用了Spring DTD……替換為XSD:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">在為c3p0添加的Spring配置中:
<prop key="hibernate.c3p0.min_size">5</prop> <prop key="hibernate.c3p0.max_size">20</prop> <prop key="hibernate.c3p0.timeout">300</prop> <prop key="hibernate.c3p0.max_statements">50</prop> <prop key="hibernate.c3p0.idle_test_period">3000</prop>Spring刪除了“ local” =:因此只需將其更改為“ ref” =
Spring HibernateDaoSupport不再具有:“ releaseSession(session);”,這是一件好事,因此被迫更新代碼以在事務中工作。
可能的錯誤:
- 如果沒有活動事務,則getFlushMode無效; 嵌套的異常是org.hibernate.HibernateException:如果沒有活動的事務,則getFlushMode無效
從休眠屬性中刪除:
<prop key="hibernate.current_session_context_class">thread</prop>| 為“當前” Session的范圍提供自定義策略。 有關內置策略的更多信息,請參見第2.5節“上下文會話” 。 |
- org.springframework.dao.InvalidDataAccessApiUsageException:只讀模式(FlushMode.MANUAL)中不允許寫操作:將Session變為FlushMode.COMMIT / AUTO或從事務定義中刪除“ readOnly”標記。
另一種選擇是:
<bean id ="productHibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate"> <property name="sessionFactory" ref="productSessionFactory"/> <property name="checkWriteOperations" value="false"/> </bean>- java.lang.NoClassDefFoundError:javax / servlet / SessionCookieConfig
Servlet版本更新:
<dependency><groupid>javax.servlet</groupId><artifactid>servlet-api</artifactId><version>3.0.1</version> </dependency>- 然后在weblogic javassist上進行部署:$$ _ javassist_無法轉換為javassist.util.proxy.Proxy
這里的問題是有不同版本的javassist被帶入了耳朵。 我從所有pom中刪除了所有引用,以便從Spring / Hibernate中獲取正確的版本…
然后將weblogic配置為首選我們的版本:
<?xml version="1.0" encoding="UTF-8"?> <weblogic-application><application-param><param-name>webapp.encoding.default</param-name><param-value>UTF-8</param-value></application-param><prefer-application-packages> <package-name>javax.jws.*</package-name> <package-name>org.apache.xerces.*</package-name> <package-name>org.apache.xalan.*</package-name> <package-name>org.apache.commons.net.*</package-name> <package-name>org.joda.*</package-name> <package-name>javassist.*</package-name> </prefer-application-packages> </weblogic-application>翻譯自: https://www.javacodegeeks.com/2014/08/upgrading-spring-3-x-and-hibernate-3-x-to-spring-platform-1-0-1-spring-hibernate-4-x.html
總結
以上是生活随笔為你收集整理的将Spring 3.x和Hibernate 3.x升级到Spring Platform 1.0.1(Spring + hibernate 4.x)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用拦截器分析Java EE应用程序的性
- 下一篇: 使用Spring AOP,自定义注释和反