DailyMasalaCMS升级记录
手头上是一个比较老的工程,Jdk1.7 + Tomcat7.0 + Spring 3.x + Hibernate 3.x + Elasticseach 2.x
最近Elasticsearch升级,jar需要使用最新的5.2版本,随之而来一系列问题。
1.Es 5.2版本的jar包 需要jdk1.8支持
2.Jdk1.8不再支持Spring 3.x
3.升级Spring 4.x 顺便把Hibernate也升级成第4版
最终项目环境为:Jdk1.8 + Tomcat7.5 + Spring 4.x + Hibernate 4.x + Elasticsearch 5.x
下面记录一下整个过程中所遇到的问题和所填的坑:
1.升级es jar包为5.x,maven打包版本改为1.8
<!--Elasticsearch-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.2.0</version>
</dependency> <!--pom.xml-->
<plugins>
<!-- compiler插件, 设定JDK版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<showWarnings>true</showWarnings>
<compilerArguments>
<extdirs>src\main\webapp\WEB-INF\lib</extdirs>
</compilerArguments>
</configuration>
</plugin> <!-- war打包插件, 设定war包名称不带版本号 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<warName>goldlocker-manager</warName>
</configuration>
</plugin>
</plugins>
这里会遇到一个问题:如果是用1.8版本编译的工程,在tomcat (1.7)上运行,会报错;
解决办法:将tomcat运行环境改为jdk1.8
Linux系统下环境为Jdk1.7,有一些软件还在使用这个版本的Jdk.所以不能改系统环境,但是可以修改Tomcat所使用的环境.
1.修改catalina.sh 在文件头部加上:export JAVA_HOME=/usr/local/java/jdk1.8.0_121
2.修改setclasspath.sh 在文件头部加上:export JAVA_HOME=/usr/local/java/jdk1.8.0_121
2.升级Spring 4.x
在升级Spring,倒是没有多少麻烦的,只需要将Jar包中的Spring3版本改为4即可。确保升级后的工程中,不会出现Spring3 和 Spring4同时存在的情况。但是这里有这样一个问题,我的war包中有引用之前自己生成的jar包,这些jar包里面使用的是Spring3,所以这个时候需要找到之前的源代码,将之前工程中的pom文件中修改Spring的版本,然后重新install,即可。
3.升级Hibernate 4.x
在升级Hibernate的过程中遇到的问题最多。有如下几点:
1. Hibernate4里面没有Hiberate.STRING、Hiberate.Integer这种写法。
正确写法为:StringType.INSTANCE、IntegerType.INSTANCE http://www.iteye.com/problems/94206
2. 修改Spring中sessionFactory配置文件
java.lang.NoClassDefFoundError: [Lorg/hibernate/engine/FilterDefinition;
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'manageOpLogConsumer': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.cyou.nad.goldlocker.dao.ManageOpLogDao com.cyou.nad.goldlocker.log.ManageOpLogConsumer.opLogDao; nested exception is java.lang.NoClassDefFoundError: [Lorg/hibernate/engine/FilterDefinition;
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) ~[spring-beans-4.2.9.RELEASE.jar:4.2.9.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1219) ~[spring-beans-4.2.9.RELEASE.jar:4.2.9.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:551) ~[spring-beans-4.2.9.RELEASE.jar:4.2.9.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[spring-beans-4.2.9.RELEASE.jar:4.2.9.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.2.9.RELEASE.jar:4.2.9.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.2.9.RELEASE.jar:4.2.9.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.2.9.RELEASE.jar:4.2.9.RELEASE]
解决办法:
原先:<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
改成:<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
http://blog.csdn.net/u011080848/article/details/37506915
3.javax.persistence.Table.indexes()异常原因
Caused by: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
在网络上搜索这个错误,基本上都是说@Table注解的问题,然后我发现有人说使用@Entity(name="topic")注解可以解决问题,但是工程中存在相同的Bean对应同一张表的情况,所以如果使用@Entity会出现如下错误:
Invocation of init method failed; nested exception is org.hibernate.AnnotationException: Use of the same entity name twice: topic 最后发现,其实改为@Entity并不能解决问题,这里并不是@Table注解的问题。通过搜索和分析发现原来是自己的工程中存在两个版本的hibernate-jpa。
一个为2.0版本,一个为2.1版本。
这里需要去除旧的2.0版本,然后问题解决。
https://my.oschina.net/JasonZhang/blog/539095
4.Hibernate4 获取session问题
org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session
原因:hibernate4之后,spring31把HibernateDaoSupport去除,包括数据访问都不需要hibernatetemplate,这意味着dao需要改写,直接使用hibernate的session和query接口。
http://godo121.iteye.com/blog/1473563 这里涉及到要重写工程中的BaseDAO.在重写的过程中遇到的主要问题是在获取session上。
获取session有两种方式:
1.sessionFactory.getCurrentSession();
2.sessionFactory.openSession();
我采用第一种方式,原因:http://blog.csdn.net/loveyout/article/details/4193894
使用openSession没有任何问题,程序正常运行,但是需要每次开启后自己需要关闭session,比较麻烦。
如果使用getCurrentSession会出现如下异常:
org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
http://www.oschina.net/question/1777377_224862(网上出现这个异常的人很多,但是都没有很好的解决方案。这个链接作为参考,里面并没有解决问题)
最终发现如果采用的时Hibernate4,使用getCurrentSession()必须配置事务,否则无法取到session
解决办法:1.Spring xml配置控制事物
2.@Transcation
http://blog.csdn.net/bao19901210/article/details/41724355
http://blog.csdn.net/lipei1220/article/details/47153181
http://stackoverflow.com/questions/26203446/spring-hibernate-could-not-obtain-transaction-synchronized-session-for-current
http://jinnianshilongnian.iteye.com/blog/1423971
TransactionSynchronizationManager.isSynchronizationActive()
http://blog.csdn.net/sunyujia/article/details/2788192
http://www.ibm.com/developerworks/cn/java/j-lo-spring-ts3/
http://www.iteye.com/topic/78674
4.升级dailymasalanews es
1.Caused by: java.lang.NoSuchFieldError: FAIL_ON_SYMBOL_HASH_OVERFLOW
Caused by: java.lang.NoSuchFieldError: FAIL_ON_SYMBOL_HASH_OVERFLOW
Jackson版本问题,解决办法:mavenrepository.com上找到对应的合适版本
2.Caused by: java.lang.NoClassDefFoundError: org/apache/logging/log4j/Logger
Caused by: java.lang.NoClassDefFoundError: org/apache/logging/log4j/Logger
出现这个问题,找了半天。发现是es 5.2 jar包需要log4j2支持
https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/_log4j_2_logger.html
17/4/8 整合MyBatis
. mybatis与hibernate的sessionFactory,共用同一个dataSource
. 事务管理共用hibernate的事务管理
@Transactional注解
Spring切面:
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
http://blog.csdn.net/flyjiangs/article/details/51537381
DailyMasalaCMS升级记录的更多相关文章
- XUbuntu18.04(Bionic河狸)正式发布,系统安装升级记录
XUbuntu18.04(Bionic河狸)正式发布,系统安装升级记录 详细介绍: https://blog.pythonwood.com/2018/04/XUbuntu18.04(Bionic河狸) ...
- python-爬虫技能升级记录
====== python-爬虫技能升级记录 ====== ===== (一)感知爬虫及爬取流程 =====<code>从简单存取一个页面到 爬取到大量的定量数据,对技术要求更高,以百度百 ...
- vue-cli3.0 升级记录
年三十时 vue2.6 发布,向 3.0 看齐,说明 3.0 不远了.作为开发者也应该为vue3.0 做点准备.首先是把 vue-cli 升级到 3.x ,在这记录下 vue-cli2.x 升级 vu ...
- Kubernetes 升级记录:从 1.16.3 升级至 1.17.0
参考官方文档 Upgrading kubeadm clusters 在 ubuntu 18.04 上完成了升级,记录一下升级步骤. 一.升级第一个 master 节点 apt-get 安装 kubea ...
- Win7升级Win11升级记录及教程 【错误码(0×8004242d)】
hellow,大家好,我是公众号棱镜Prism K的[K君].家中电脑因为一些原因不得不进行升级,下面是我对这次电脑升级所进行的记录. step 1.打开微软官网,找到对应的WIN11下载模块,这里注 ...
- Windows 10 Threshold 2 升级记录
昨天(11月17日)升级到Windows 10 Threshold 2版本.我的使用的设备是Surface Pro 3,4G内存,128G硬盘. Threshold 2是作为一个Windows系统更新 ...
- Delphi XE4 Upate1 更新升级记录.
一直没时间,这两天折腾了一下 升级了. 其实也可能修了老bug 引入新bug. 呵呵. 看看Emb 都修了什么吧. 我干脆是重新安装的. 虽然官方也有一个单独的update.exe. 从这些bu ...
- XNginx升级记录
之前的博文提到过,XNginx - nginx 集群可视化管理工具, 开发完成后一直稳定运行,直到前面因为一个站点的proxy站点配置问题,导致需要修改nginx 配置文件模板,因此借此机会对系统做了 ...
- Nginx的平滑升级记录---适用于编译安装的Nginx
一.查看自己的Nginx的版本号 [root@localhost sbin]# cd /usr/local/nginx/sbin/ [root@localhost sbin]# ls nginx [r ...
随机推荐
- [19/02/23]ToolsShare 工具分享 VPNTethering Android (Root Required)
To be short, VPN Tethering is a quite useful tool when you want to share your private network with s ...
- BZOJ 3990: [SDOI2015]排序(搜索+剪枝)
[SDOI2015]排序 Description 小A有一个1-2^N的排列A[1..2^N],他希望将A数组从小到大排序,小A可以执行的操作有N种,每种操作最多可以执行一次,对于所有的i(1< ...
- FreeBSD利用 ports 來安裝軟體
FreeBSD利用 ports 來安裝軟體 利用 ports 來安裝軟體 FreeBSD 的 ports 就是別人已經編譯過,安裝測試沒問題了,他們將軟體編譯時所需的組態設定.編譯程序及安裝程序, ...
- Codeforces 785D Anton and School - 2 (组合数相关公式+逆元)
D. Anton and School - 2 time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- 【EX_BSGS】BZOJ1467 Pku3243 clever Y
1467: Pku3243 clever Y Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 425 Solved: 238[Submit][Status ...
- CentOS7安装Elasticsearch5.5.3
一.准备 安装Java环境,elasticsearch推荐安装java1.8.0_131或更高的版本,安装教程CentOS7安装JDK1.8 二.安装 CentOS下可以选择.tar.gz或rpm方式 ...
- 分配问题(cogs 740)
«问题描述: 有n件工作要分配给n个人做.第i 个人做第j 件工作产生的效益为c[i][j] .试设计一个将n件工作分配给n个人做的分配方案,使产生的总效益最大. «编程任务: 对于给定的n件工作和 ...
- 80人环游世界(bzoj 2055)
Description 想必大家都看过成龙大哥的<80天环游世界>,里面的紧张刺激的打斗场面一定给你留下了深刻的印象.现在就有这么 一个80人的团伙,也想来一次环游世界. ...
- 【HDOJ5514】Frogs(容斥原理)
题意:n个青蛙在一个有m个节点的圆上跳,m个节点的标号为0-m-1,每只青蛙每次跳的节点数给出,让求n只青蛙所跳位置标号之和 n<=1e4,m<=1e9,a[i]<=1e9 思路:由 ...
- Linux signal 那些事儿 (3)【转】
转自:http://blog.chinaunix.net/uid-24774106-id-4065797.html 这篇博客,想集中在signal 与线程的关系上,顺带介绍内核signal相关的结构. ...