ushelp / EasyEE

开源 JavaEE 企业级快速开发平台。提供了 Spring Boot, Struts2, Hibernate, MyBatis, Shiro, EasyUI 等技术,包含完整的权限管理系统等。提供自动化代码生成器。 Open source JaveEE enterprise-class rapid development of the basic platform. Integration of Spring Boot, Struts2, Hibernate, MyBatis, Shiro, EasyUI and other technologies, including the integrity of the rights management. Provides an automated code generator.

Home Page:http://easyproject.cn/easyee

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

几个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、生成的代码是固定布局,也许可以可选?

commented

@wc394915432 感谢您的反馈和建议,您提到了一些很好的建议,有些功能是由于时间关系,在优先级上还未去实现。
关于Bug,请问您使用的是哪个项目和版本,以及环境,以便排查。

SM-SpringBoot,mysql数据库,项目是刚从GITHUB download下来的版本,JDK1.7。

commented

@wc394915432 你好。

Bug 修复

  1. 由于本地不能重现,考虑可能由于多线程进行 Shiro 缓存并发读写出现冲突,大多数情况下冲突是不会对程序造成运行错误。

  2. MyBatis mapper sql bug fiexed.

  3. Criteria bug fixed.

建议

  1. 最新的 EasyEE-Auto 1.3.1 支持使用 labelKey 代替 label 指定国际化键(EasyEE >= 4.2.0)。
  2. todo
  3. 已增加
  4. EasyEE-Auto 1.3.1 支持生成模块选择 generator(EasyAutoModule[] modules, String entityPackage) https://github.com/ushelp/EasyEE-Auto/blob/master/doc/readme_zh_CN.md#3-代码生成
  5. 支持类名和字段名的自动规则转换,如 'userName, SysUser' to
    'USER_NAME,SYS_USER'
  6. 固定布局指的是?

EasyEE Auto 更新日志:ushelp/EasyEE-Auto@caf31d9

由于 Maven **仓库同步最新的 1.3.1 版本需要一定时间,所以可暂时手动加入 jar。诚挚感谢反馈。

很高兴我的建议得到重视,我说的固定布局是指用户可以自己修改生成代码的模板,比如我喜欢datagrid是铺满屏幕的,那么我可以添加属性fit:true,或者设置pageSize:20,等等,甚至我还可以自己定义多套布局,定制更复杂的CURD代码生成模板。

commented

@wc394915432
目前的生成侧重于生成一个快速可用的版本,然后细节按需修改。没有完全开放自定义接口的原因是,EasyEE-Auto 内部使用的是 FreeMark 模板,提供自定义模板功能会额外增加工具学习使用,代码生成的复杂度。
不过对于高级自定义用户来说,这能提供更大的灵活性。后面会考虑开放自定义接口。如果您有特殊需要,也可直接修改 代码中的 tmpl 模板文件。