第三次吐槽下Config already exists

ohaozy 发布于 2016/09/18 18:28
阅读 708
收藏 0

曾经反馈过两次这个问题:https://www.oschina.net/question/593578_224186#tags_nav

刚刚用jfinal2.2做了下测试,此问题只解决了一半:

有增加配置,但是关闭的时候为什么不删除配置?状态已经是关闭,却占着坑,明显不合理。


好吧,波波提供了remove的代码,但是看下图:

人家要删除就删除呗,干麻要强调主配置不可以删除?这里是不是帮用户考虑太多了?


最要命的是下面这个bug:如果不作具体数据操作,只做连接测试,那怎么死都不知道。。。。

因为随便输入不合法ip,端口,总会返给你成功。


再之后如果不重起应用,随便修改个连接配置,接着就会报:Config not found by configName。

吐完了,就改吧,希望下一个版本更完美。


加载中
0
JFinal
JFinal

    刚刚看了一下以前的贴子,jfinal 2.2 居然没对这个地方彻底改进,我也很震惊 ,然后我再次看了一下源代码,发现以前开发的过程中处理过这个反馈。

    我记得很早以前那一版,Db.addConfig(...) 在 Tabuilder.build(...) 之前调用的,当后面这一句如果出异常,那么 Db.addConfig(...) 这行添加的 config 仍然有效。我记得当时你是建议用 try catch 在 catch 块中 Db.removeConfig(...) 一下。你的这个反馈是经过改进的,这两行代码位置进行了交换,不需要 try catch 也可以解决问题。

   有关 removeConfig 不能移除 mainConfig 的问题,由于第一个添加的config会成为 mainConfig,所以如果中途可以 remove 掉 mainConfig,就会造成 mainConfig 可以变来变去,可以引发线程安全问题,还可能引发其它问题,当初没有改进是出于这个考虑。

    有关 ActiveRecordPlugin.stop() 没有添加Db.removeConfig(...),与上一个问题相关,由于上面谈到不能移除 mainConfig,所以在 stop() 方法中添加 removeConfig() 方法时必定会抛出一次异常,因为必有一个是 mainConfig。

  上述两个问题是关联的,如果决定改前面的,后面的这个就能改。

    new TableBuilder().build(tableList, config); 这一行代码中的 tableList 如果 size() 为 0,那么就无法知道数据源配置是否正确,这个的确值得改进,jfinal 在这个问题上以前的考虑是优化,碰到size() 为 0 直接 return,你的建议是更好的做法,不过这个还算不上是 bug 哈,因为这个 build 方法没有考虑去实现检测配置的功能。

   总之这个问题,jfinal 2.3 会再次重新思考,如果在改进的过程中,出现一些不同的考虑会找你沟通一下,私信加你 QQ。

     非常感谢你的反馈,以前的反馈其实已经处理了,只不过在处理的过程中碰到了更多的问题,所以有些地方没有变动,让你以为是没有处理过这个反馈。

   

JFinal
JFinal
回复 @乌龟壳 : 有问题,多逛下 jfinal 社区,感谢支持
乌龟壳
乌龟壳
回复 @JFinal : 墙裂支持!!!
JFinal
JFinal
回复 @乌龟壳 : 这个地方在 jfinal 2.3 会再次被思考与改进,相信会有一个更好的方案出来
乌龟壳
乌龟壳
回复 @JFinal : 不过我也就就着这个问题说下个人看法,过段时间正式用jfinal后再提提个人建议(如果有的话)
乌龟壳
乌龟壳
回复 @JFinal : 既然你提到的兼容,我觉得应该在删除第一个config的时候直接报错,throw new UnsupportedOperationException("you are not permitted to remove the main config - the first config .....")
下一页
返回顶部
顶部