JFinal3.4 升级到4.2过程分享


本人有个项目从一开始就是用JFinal,一开始使用的是1.x(具体忘了),一路跟着升级到3.4。


在发布3.5时,打算升级的,可发现 DbPro.deleteById 方法有问题又回到3.4了 (3.6时修复了 https://www.jfinal.com/feedback/4634  )。后来由于工作的调动也就没再理这个项目了。


现在又回到这项目了,发现JFinal已升到4.2。作为一名版本控,那有不升级的道理。


项目使用的是JFinal3.4 +JFinal-WeiXin2.1,升级到JFinal4.2 +JFinal-WeiXin2.3


第一步:更改JFinal 、JFinal-WeiXin、jetty依赖


 好家伙,满满的红叉。


 简单看了下,主要是因为俩个变更


1、Enhancer类及相关方法停用、删除。这个在网站上文档中的没有做说明,幸好Enhancer类还在,有注释说明改用Aop类。


跟着文档配置,调整小部分代码,OK。


2、3.6版本中Db、Model 针对多主键(联合主键)的 findById、deleteById 方法添加一个 's' 后缀,改成 findByIds、deleteByIds


在使用到联合主键findById、deleteById 后面加个s,OK


3、JMap类已删除,替换成Kv 类



红叉没了,启动项目,无报错,测试各功能,发现接收不了微信消息。

马上看文档,需要在 configRoutes 中配置 me.setMappingSuperClass(true)

添加再运行,还是不行,难道是 是我增加了BaseMsgController 多层继承导致me.setMappingSuperClass(true)没起作用?

一时也找不到原因为什么me.setMappingSuperClass(true)没起作用,那直接重写index()方法,调用超类的index()方法,OK!

@Before(MsgInterceptor.class)
public void index() {
    super.index();
}


再也没问题了,部署到tomcat,项目启动不来了,报找不到AOP类的错误。

额~~~~~~~~~  

JFinal 的包在啊,依赖也没错阿,环境也正常啊,怎么就有这莫名其妙的错误。


弄了一两个小时还是没结果。打算来这问问,发现有人也遇到同样的问题。根据评论上的方法,升级到4.3,完美解决

http://www.jfinal.com/feedback/5985


项目也就完成了从JFianl3.4 升级到JFinal4.2 不对,是 JFinal4.3才对


评论区

JFinal

2019-06-19 17:06

jfinal 迭代八年,一直非常重视兼容性,在尽可能保障兼容的前提下,十分重要的必须改变大多有两种:
1:类改名、方法改名
2:删除一些类、方法,但同时提供更简洁的替代方案

一般来说,如果你的应用没有深度扩展过 jfinal , 从老版本升到新版本多数工作分三步:
1:依赖改为最新版本
2:根据 eclipse、IDEA 的错误提示,改改类名、方法名
3:剩下的问题查看社区的升级文档:https://www.jfinal.com/doc/14-1

建议在升级的时候首先关注一下社区的升级文档,做到心中有数

感谢你的分享

JFinal

2019-06-19 17:11

部署到 tomcat 出现类找不到的问题相对重要,正准备要发布新版本

这个问题是由于 tomcat 丢失了 CLASSPATH,而 jfinal 官方已抛弃 tomcat 很长时间,所以 4.2 版本没有发现这个问题。 丢失 CLASSPATH 这个问题很难事先预料到,别的 java web 容器没有这个问题

canca

2019-06-19 23:35

@JFinal 发现个问题,在AOP环境中,调用枚举的里自定义的方法,提示未找到类!无时间测试了,无耐只有换回3.8版本了!

JFinal

2019-06-19 23:40

@canca 按照这个贴子的方法解决:
http://www.jfinal.com/feedback/5985

也就是说使用还未发布的 jfinal 4.3 版本解决,记得反馈给我结果

现在正是发布前夕,所以特别需要这类碰到问题的案例,确保发布的版本兼容性最高

A734140820

2019-06-20 10:42

请问老詹,Jfina要如何才能和Spring全家桶抗衡?

热门分享

扫码入社