javascript
将Spring 3.x和Hibernate 3.x升级到Spring Platform 1.0.1(Spring + hibernate 4.x)
我最近自愿將我們的最新項(xiàng)目升級(jí)到最新版本的Spring Platform。 Spring Platform為您提供的是整個(gè)Spring框架庫(kù)集中的依賴項(xiàng)和插件管理。
由于我們落后了一點(diǎn),升級(jí)確實(shí)增加了一些樂趣。 這是我遇到的事情:
Maven:
我們的pom文件仍在引用:
hibernate.jar
ehcache.jar
這些偽像不會(huì)在最新版本上退出,因此請(qǐng)使用hibernate-core.jar和ehcache-core.jar替換它們。
我們還仍然使用休眠工具+ maven run插件對(duì)我們的db對(duì)象進(jìn)行反向工程。 我需要更新為候選版本:
<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上,返回類型現(xiàn)在為L(zhǎng)ist; 不是元素…因此需要為要返回的列表添加演員表。
import org.hibernate.classic.Session;替換為:
import org.hibernate.Session; 逆向工程師的工作方式略有不同……
將Long分配給數(shù)字…
添加:
可能的錯(cuò)誤:
- 原因:org.hibernate.service.UnknownUnwrapTypeException:無(wú)法解包為請(qǐng)求的類型[javax.sql.DataSource]
為c3p0添加依賴項(xiàng):
<dependency><groupid>org.hibernate</groupId><artifactid>hibernate-c3p0</artifactId><version>${hibernate.version}</version> </dependency>并在cfg.xml中為其配置設(shè)置:
<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
可能仍在某處使用對(duì)hibernate3 factory / bean的引用,更改為hibernate4:
org.springframework.orm.hibernate3.LocalSessionFactoryBean org.springframework.orm.hibernate3.HibernateTransactionManager- 由以下原因引起:java.lang.ClassNotFoundException:無(wú)法加載請(qǐng)求的類:org.hibernate.hql.classic.ClassicQueryTranslatorFactory新API進(jìn)行了細(xì)微更改,因此可以通過將屬性值替換為:
彈簧:
令人驚訝的是,我們的某些應(yīng)用程序上下文文件仍然引用了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);”,這是一件好事,因此被迫更新代碼以在事務(wù)中工作。
可能的錯(cuò)誤:
- 如果沒有活動(dòng)事務(wù),則getFlushMode無(wú)效; 嵌套的異常是org.hibernate.HibernateException:如果沒有活動(dòng)的事務(wù),則getFlushMode無(wú)效
從休眠屬性中刪除:
<prop key="hibernate.current_session_context_class">thread</prop>| 為“當(dāng)前” Session的范圍提供自定義策略。 有關(guān)內(nèi)置策略的更多信息,請(qǐng)參見第2.5節(jié)“上下文會(huì)話” 。 |
- org.springframework.dao.InvalidDataAccessApiUsageException:只讀模式(FlushMode.MANUAL)中不允許寫操作:將Session變?yōu)镕lushMode.COMMIT / AUTO或從事務(wù)定義中刪除“ readOnly”標(biāo)記。
另一種選擇是:
<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上進(jìn)行部署:$$ _ javassist_無(wú)法轉(zhuǎn)換為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
總結(jié)
以上是生活随笔為你收集整理的将Spring 3.x和Hibernate 3.x升级到Spring Platform 1.0.1(Spring + hibernate 4.x)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用拦截器分析Java EE应用程序的性
- 下一篇: 联想投资的(联想投资的芯片公司)