undertow classloader问题

同一个类报 类型转换异常

image.png

发现classloader 不一样了   这是为什么呢?

image.png


下面是场景

image.png

红包部分就报错了

评论区

macaque

2018-12-10 17:09

JFinal

2018-12-10 17:37

你的这个 article 应该是处在 jar 包之中,jfinal undertow 默认只为 target/classes 下面的资源提供热加载

所以,需要配置一下:
UndertowServer.create(...)
.addHotSwapClassPrefix("com.newrank.")
.start();

macaque

2018-12-10 17:38

@JFinal 没有在jar包中

macaque

2018-12-10 17:38

@JFinal 我加了undertow.hotSwapClassPrefix=com.newrank.cbox. 也不好用 但是 dev 改成false就好了

JFinal

2018-12-10 17:39

Article 这个类在那里? 是不是你在 start() 之前触发了类加载?

macaque

2018-12-10 17:41

@JFinal Article就是自动生成的model

macaque

2018-12-10 17:42

@JFinal start()之前也没有加载

JFinal

2018-12-10 17:42

@macaque dev 改成 false 后不支持热加载了

应该是你在 UndertowServer.start() 方法调用之前就有别的代码进行了别的操作

UndertowServer.start() 启动的 jfinal 世界与你自己在这之前的代码处在两个世界,分别由不同的 class loader 加载

macaque

2018-12-10 17:45

@JFinal .start() 之前 确实没有加载 我把使用报错的代码加上了 波总帮看下

macaque

2018-12-10 17:46

@JFinal 中间有个redis

JFinal

2018-12-10 17:49

@macaque 原来如此,添加这几行代码:
UndertowServer.create(...)
.addHotSwapClassPrefix("redis.clients.")
.addHotSwapClassPrefix("org.nustaq.")
.start();

有关 redis 的支持,今天会发新版本支持,然后你就不需要上面两行代码了

macaque

2018-12-10 17:50

好的 谢谢

macaque

2018-12-10 17:51

@JFinal undertow.hotSwapClassPrefix=com.newrank.cbox.,redis.clients.,org.nustaq. 写到配置文件也行吧

macaque

2018-12-10 17:52

@JFinal 好用了 谢谢波总

JFinal

2018-12-11 16:23

@macaque 昨晚发布的 jfinal undertow 1.2 已添加了两个 hotSwapClassPrefix,可以不用管这个问题了,升级到 1.2 即可