java - Openjdk openJ9 vs 使用ZKOSS的热点反射差异

标签 java reflection zk openj9

我目前正在使用 ZK ( https://www.zkoss.org/ ) 框架的 Web 应用程序,并成功使用 HotSpot JVM ( https://adoptopenjdk.net/?variant=openjdk11&jvmVariant=hotspot )。使用这个 JVM,ZK 可以使用其 EL 包反射性地访问我的对象(bean)。当我尝试使用另一个标准 JVM(来自 https://adoptopenjdk.net/?variant=openjdk11&jvmVariant=openj9 的 openj9 )运行它时,反射性访问某些对象的属性会导致异常(请参阅此消息的末尾)。我想使用这个 JVM,因为它的内存占用比我的应用程序的热点要小。

使用的ZK版本是8.6.2(bind/common)

不同的 JVM 是否会导致不同的结果?如果是这样,我应该如何解决它?

在此特定情况下,ZK 使用 Apache Common EL 的 fork 版本,这是一个已停产的项目。(2003)。下面列出了我得到的异常。这里,框架无法访问有问题的对象(应用程序级对象,而不是 java.lang.Long),并且正在调用 Long 上不存在的方法(但存在于应用程序对象中)。

org.zkoss.zel.PropertyNotFoundException: Property 'visible' not found on type java.lang.Long
at org.zkoss.zel.BeanELResolver$BeanProperties.get(BeanELResolver.java:424) ~[zel_8.6.2.jar:8.6.2]
at org.zkoss.zel.BeanELResolver$BeanProperties.access$300(BeanELResolver.java:375) ~[zel_8.6.2.jar:8.6.2]
at org.zkoss.zel.BeanELResolver.property(BeanELResolver.java:547) ~[zel_8.6.2.jar:8.6.2]
at org.zkoss.zel.BeanELResolver.getValue(BeanELResolver.java:98) ~[zel_8.6.2.jar:8.6.2]
at org.zkoss.zel.CompositeELResolver.getValue(CompositeELResolver.java:66) ~[zel_8.6.2.jar:8.6.2]
at org.zkoss.zel.CompositeELResolver.getValue(CompositeELResolver.java:66) ~[zel_8.6.2.jar:8.6.2]
at org.zkoss.zel.CompositeELResolver.getValue(CompositeELResolver.java:66) ~[zel_8.6.2.jar:8.6.2]
at org.zkoss.xel.zel.XelELResolver.getValue(XelELResolver.java:99) ~[zcommon_8.6.2.jar:8.6.2]
at org.zkoss.bind.xel.zel.BindELResolver.getValue(BindELResolver.java:123) ~[zkbind_8.6.2.jar:8.6.2]
at org.zkoss.zel.impl.parser.AstValue.getValue(AstValue.java:188) ~[zel_8.6.2.jar:8.6.2]
at org.zkoss.zel.impl.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184) ~[zel_8.6.2.jar:8.6.2]
at org.zkoss.zkmax.bind.impl.ValueExpressionImplEx.getValue(ValueExpressionImplEx.java:52) ~[zkmax_8.6.2.jar:8.6.2]
at org.zkoss.xel.zel.ELXelExpression.evaluate(ELXelExpression.java:41) ~[zcommon_8.6.2.jar:8.6.2]
at org.zkoss.zkmax.bind.impl.BindEvaluatorXImplEx$LazyBindXelExpression.evaluate(BindEvaluatorXImplEx.java:124) ~[zkmax_8.6.2.jar:8.6.2]
at org.zkoss.bind.impl.BindEvaluatorXImpl.getValue(BindEvaluatorXImpl.java:46) ~[zkbind_8.6.2.jar:8.6.2]
at org.zkoss.bind.impl.LoadPropertyBindingImpl.load(LoadPropertyBindingImpl.java:58) ~[zkbind_8.6.2.jar:8.6.2]
at org.zkoss.bind.impl.PropertyBindingHandler.doLoadBinding(PropertyBindingHandler.java:140) ~[zkbind_8.6.2.jar:8.6.2]
at org.zkoss.bind.impl.PropertyBindingHandler.doLoad(PropertyBindingHandler.java:341) ~[zkbind_8.6.2.jar:8.6.2]
at org.zkoss.bind.impl.BinderImpl.loadComponentProperties0(BinderImpl.java:2491) ~[zkbind_8.6.2.jar:8.6.2]
at org.zkoss.bind.impl.BinderImpl.loadComponent0(BinderImpl.java:2458) ~[zkbind_8.6.2.jar:8.6.2]
at org.zkoss.bind.impl.BinderImpl.loadComponent(BinderImpl.java:2393) ~[zkbind_8.6.2.jar:8.6.2]
at org.zkoss.bind.tracker.impl.BindUiLifeCycle.reInitBinder0(BindUiLifeCycle.java:170) ~[zkbind_8.6.2.jar:8.6.2]
at org.zkoss.bind.tracker.impl.BindUiLifeCycle.reInitBinder(BindUiLifeCycle.java:109) ~[zkbind_8.6.2.jar:8.6.2]
at org.zkoss.bind.tracker.impl.BindUiLifeCycle.access$100(BindUiLifeCycle.java:55) ~[zkbind_8.6.2.jar:8.6.2]
at org.zkoss.bind.tracker.impl.BindUiLifeCycle$2.onEvent(BindUiLifeCycle.java:100) ~[zkbind_8.6.2.jar:8.6.2]
at org.zkoss.zk.ui.AbstractComponent.onEvent(AbstractComponent.java:3179) ~[zk_8.6.2.jar:8.6.2]
at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:3127) ~[zk_8.6.2.jar:8.6.2]
at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:3091) ~[zk_8.6.2.jar:8.6.2]
at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:138) ~[zk_8.6.2.jar:8.6.2]
at org.zkoss.zk.ui.impl.UiEngineImpl.processEvent(UiEngineImpl.java:1845) ~[zk_8.6.2.jar:8.6.2]
at org.zkoss.zk.ui.impl.UiEngineImpl.process(UiEngineImpl.java:1617) ~[zk_8.6.2.jar:8.6.2]
at org.zkoss.zk.ui.impl.UiEngineImpl.execUpdate(UiEngineImpl.java:1320) ~[zk_8.6.2.jar:8.6.2]
at org.zkoss.zk.au.http.DHtmlUpdateServlet.process(DHtmlUpdateServlet.java:611) ~[zk_8.6.2.jar:8.6.2]
at com.castortech.iris.ba.webviewer.internal.ZkUpdateServlet.process(ZkUpdateServlet.java:62) ~[com.castortech.iris.ba.webviewer/:na]
at org.zkoss.zk.au.http.DHtmlUpdateServlet.doGet(DHtmlUpdateServlet.java:487) ~[zk_8.6.2.jar:8.6.2]
at org.zkoss.zk.au.http.DHtmlUpdateServlet.doPost(DHtmlUpdateServlet.java:495) ~[zk_8.6.2.jar:8.6.2]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) ~[javax.servlet_3.1.0.v201410161800.jar:3.1.0]

最佳答案

显然那里出了问题......

为了解决此问题,重现示例将是最有帮助的。 例如。一个简单的 zul 文件,显示导致此错误的 EL 表达式以及简化的 ViewModel 和所需的 Bean 类。这将大大提高人们发现该问题的机会。

最好在 zkfiddle.org 上提供一个可运行的示例(即使它没有显示那里使用的 JVM 上的错误 - 它将有助于使用您在本地计算机上提到的采用JDK版本测试确切的场景)。

或者,如果您无法公开共享任何代码,zkoss 提供专用 customer support .

关于java - Openjdk openJ9 vs 使用ZKOSS的热点反射差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59935389/

相关文章:

java zkoss EventListener如何获取事件变量

java - ZK - 检查元素是否具有焦点

java - 如何在java中对方法进行排队

Java:我的 split 方法有问题

ruby-on-rails - 如何从 Rails 的 Controller 中访问路由信息(HTTP 动词、 Action 名称等...)?

c# - 解析c#类文件获取属性和方法

java - 从类名中获取 Gson TypeToken 作为字符串

javascript - 如何通过javascript发布zk url

java - 如何关闭由 java swing 应用程序创建的所有进程?

java - 如何使用struts taglib将参数传递给javascript函数?