几个BUG,和几点建议
reinershir opened this issue · comments
先说BUG:
1、登陆并进入home页面后,后台报如下错误:
ERROR - Disk Write of f45cc36a-7788-4819-9884-1ca8cec3265f failed:
net.sf.ehcache.CacheException: Failed to serialize element due to ConcurrentModificationException. This is frequently the result of inappropriately sharing thread unsafe object (eg. ArrayList, HashMap, etc) between threads
at net.sf.ehcache.store.disk.DiskStorageFactory.serializeElement(DiskStorageFactory.java:405) ~[ehcache-2.10.3.jar:2.10.3]
at net.sf.ehcache.store.disk.DiskStorageFactory.write(DiskStorageFactory.java:385) ~[ehcache-2.10.3.jar:2.10.3]
at net.sf.ehcache.store.disk.DiskStorageFactory$DiskWriteTask.call(DiskStorageFactory.java:477) [ehcache-2.10.3.jar:2.10.3]
at net.sf.ehcache.store.disk.DiskStorageFactory$PersistentDiskWriteTask.call(DiskStorageFactory.java:1071) [ehcache-2.10.3.jar:2.10.3]
at net.sf.ehcache.store.disk.DiskStorageFactory$PersistentDiskWriteTask.call(DiskStorageFactory.java:1055) [ehcache-2.10.3.jar:2.10.3]
at java.util.concurrent.FutureTask.run(FutureTask.java:262) [?:1.7.0_80]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178) [?:1.7.0_80]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292) [?:1.7.0_80]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [?:1.7.0_80]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [?:1.7.0_80]
at java.lang.Thread.run(Thread.java:745) [?:1.7.0_80]
Caused by: java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:922) ~[?:1.7.0_80]
at java.util.HashMap$EntryIterator.next(HashMap.java:962) ~[?:1.7.0_80]
at java.util.HashMap$EntryIterator.next(HashMap.java:960) ~[?:1.7.0_80]
at java.util.HashMap.writeObject(HashMap.java:1127) ~[?:1.7.0_80]
at sun.reflect.GeneratedMethodAccessor69.invoke(Unknown Source) ~[?:?]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_80]
at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_80]
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988) ~[?:1.7.0_80]
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495) ~[?:1.7.0_80]
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431) ~[?:1.7.0_80]
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177) ~[?:1.7.0_80]
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) ~[?:1.7.0_80]
at org.apache.shiro.session.mgt.SimpleSession.writeObject(SimpleSession.java:461) ~[shiro-core-1.2.5.jar:1.2.5]
at sun.reflect.GeneratedMethodAccessor66.invoke(Unknown Source) ~[?:?]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_80]
at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_80]
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988) ~[?:1.7.0_80]
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495) ~[?:1.7.0_80]
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431) ~[?:1.7.0_80]
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177) ~[?:1.7.0_80]
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547) ~[?:1.7.0_80]
at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:440) ~[?:1.7.0_80]
at net.sf.ehcache.Element.writeObject(Element.java:875) ~[ehcache-2.10.3.jar:2.10.3]
at sun.reflect.GeneratedMethodAccessor65.invoke(Unknown Source) ~[?:?]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_80]
at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_80]
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988) ~[?:1.7.0_80]
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495) ~[?:1.7.0_80]
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431) ~[?:1.7.0_80]
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177) ~[?:1.7.0_80]
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) ~[?:1.7.0_80]
at net.sf.ehcache.util.MemoryEfficientByteArrayOutputStream.serialize(MemoryEfficientByteArrayOutputStream.java:97) ~[ehcache-2.10.3.jar:2.10.3]
at net.sf.ehcache.store.disk.DiskStorageFactory.serializeElement(DiskStorageFactory.java:403) ~[ehcache-2.10.3.jar:2.10.3]
... 10 more
2、在我完成代码生成,并配置好权限后,在给超级管理员配置我新添加的权限时报如下错误:
SQL: insert into sys_role_operation(ROLE_ID, OPERATION_PERMISSION_ID) values select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ? , select ?, ?
Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select 1, 2
,
select 1, 30
,
select 1, 9
,
select ' at line 3
3、生成的Criteria中 完全匹配的条件查询有一段这样的代码:values.add("String", this.getChannelIp());
实际上是错误的,values是map 应该是values.put
接下来是几点建议:
1、生成代码的注解label无法使用国际化
2、要是代码能在页面上配置并生成,且省去菜单配置就好了(没有最懒只有更懒)
3、生成的页面中data没有fit属性
4、重新生成会把所有文件都重新生成,能选择就好了
5、生成的Mapper.xml映射别名能按标准来就好了,如channelName 对应数据库应该是CHANNEL_NAME目前是生成为:CHANNELNAME ,mybatis-generator就是这样使用"_"分开的。
6、生成的代码是固定布局,也许可以可选?
@wc394915432 感谢您的反馈和建议,您提到了一些很好的建议,有些功能是由于时间关系,在优先级上还未去实现。
关于Bug,请问您使用的是哪个项目和版本,以及环境,以便排查。
SM-SpringBoot,mysql数据库,项目是刚从GITHUB download下来的版本,JDK1.7。
@wc394915432 你好。
Bug 修复
-
由于本地不能重现,考虑可能由于多线程进行 Shiro 缓存并发读写出现冲突,大多数情况下冲突是不会对程序造成运行错误。
-
MyBatis mapper sql bug fiexed.
-
Criteria bug fixed.
建议
- 最新的 EasyEE-Auto 1.3.1 支持使用 labelKey 代替 label 指定国际化键(EasyEE >= 4.2.0)。
- todo
- 已增加
- EasyEE-Auto 1.3.1 支持生成模块选择 generator(EasyAutoModule[] modules, String entityPackage) https://github.com/ushelp/EasyEE-Auto/blob/master/doc/readme_zh_CN.md#3-代码生成
- 支持类名和字段名的自动规则转换,如 'userName, SysUser' to
'USER_NAME,SYS_USER' - 固定布局指的是?
EasyEE Auto 更新日志:ushelp/EasyEE-Auto@caf31d9
由于 Maven **仓库同步最新的 1.3.1 版本需要一定时间,所以可暂时手动加入 jar。诚挚感谢反馈。
很高兴我的建议得到重视,我说的固定布局是指用户可以自己修改生成代码的模板,比如我喜欢datagrid是铺满屏幕的,那么我可以添加属性fit:true,或者设置pageSize:20,等等,甚至我还可以自己定义多套布局,定制更复杂的CURD代码生成模板。
@wc394915432
目前的生成侧重于生成一个快速可用的版本,然后细节按需修改。没有完全开放自定义接口的原因是,EasyEE-Auto 内部使用的是 FreeMark 模板,提供自定义模板功能会额外增加工具学习使用,代码生成的复杂度。
不过对于高级自定义用户来说,这能提供更大的灵活性。后面会考虑开放自定义接口。如果您有特殊需要,也可直接修改 代码中的 tmpl 模板文件。