【问题标题】:Glassfish server does not work with JDK 8Glassfish 服务器不适用于 JDK 8
【发布时间】:2012-10-30 13:13:06
【问题描述】:

我在一个带有 NetBeans 的 Web 项目中使用带有 lambda 的 jdk 8,但是当将它部署到 glassfish 时,它显示了这个错误:

java.lang.RuntimeException: Uncompilable source code - Erroneous tree type: <any>

这是由包含 lambda 表达式的代码行引起的。

我尝试更改 glassfish 设置以使用 jdk 8,但我没有让它工作。

有没有办法让它工作?

【问题讨论】:

  • 是什么让你认为 Glassfish 使用的是 jdk8? java.net/forum/topic/glassfish/glassfish-webtier/…
  • 我已经将 asenv.bat 和 JAVA_HOME 变量设置更改为“C:\Program Files\Java\jdk1.8.0”,但它不起作用。我怎么知道什么 jdk 或 jre 在启动 glassfish 时运行?
  • @onsm7 你可以在管理 web 控制台中运行 jvm 报告,例如,Server->General->JVM Report 并查看 java.version 项

标签: java glassfish java-8


【解决方案1】:

在使用 GlassFish 4 与 JDK 8 结合使用时,我观察到各种奇怪的行为。似乎是这样的情况,当使用 Java 1.8 中引入的新语法时,使用新功能的类会在启动期间触发 ArrayIndexOutOfBoundsException内容如下:

   Exception while visiting
 martinandersson/com/malivechat/ejb/events/EventService.class of size
 7094

 java.lang.ArrayIndexOutOfBoundsException: 25966
   at org.objectweb.asm.ClassReader.readClass(ClassReader.java:2015)
   at org.objectweb.asm.ClassReader.accept(ClassReader.java:469)
   at org.objectweb.asm.ClassReader.accept(ClassReader.java:425)
   at org.glassfish.hk2.classmodel.reflect.Parser$5.on(Parser.java:362)
   at com.sun.enterprise.v3.server.ReadableArchiveScannerAdapter.handleEntry(ReadableArchiveScannerAdapter.java:165)
   at com.sun.enterprise.v3.server.ReadableArchiveScannerAdapter.onSelectedEntries(ReadableArchiveScannerAdapter.java:127)
   at org.glassfish.hk2.classmodel.reflect.Parser.doJob(Parser.java:347)
   at org.glassfish.hk2.classmodel.reflect.Parser.access$300(Parser.java:67)
   at org.glassfish.hk2.classmodel.reflect.Parser$3.call(Parser.java:306)
   at org.glassfish.hk2.classmodel.reflect.Parser$3.call(Parser.java:295)
   at java.util.concurrent.FutureTask.run(FutureTask.java:266)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
   at java.lang.Thread.run(Thread.java:744)

有时,GlassFish 正在检查的类在“崩溃”中幸存下来,并且可以在应用程序中正确使用,有时则不能。崩溃的类有时会阻碍您的应用程序的部署。 GlassFish 抱怨无法找到或实例化所需类型的 bean。有时,崩溃的类不会阻碍部署的成功,但是当他被使用时,类会以某种方式失败。例如,注入 bean 的资源会失败,您的应用程序将不可避免地抛出 NullPointerException

除了 GlassFish 不支持 JDK 1.8 之外,Java 本身似乎每次我尝试构建我的项目时都会崩溃,而我的 JavaFX 应用程序有时会出现黑屏以及他制作的各种组件也非常有问题。所以生产代码绝对应该暂时不要升级到 Java 1.8。

更新

我也遇到了 EclipseLink 2.5.2-M1 的严重问题。我的一个实体类在 Java 1.7 中完美运行,然后我在其中添加了一些简洁的 JDK 8 语法。之后,EclipseLink 拒绝让实体类成为 JPA 关系的目标。 EclipseLink 说实体类是“非实体”类型。一旦我将 JDK 8 的糖改写成旧的 1.7 代码,一切都恢复正常了。

2014-07-03 更新

GlassFish 4.0.1-b05 在 Java 1.8 代码中只有一个问题:JPA 实体类。这意味着有问题的是 EclipseLink。但我可以确认 Java 1.8 代码在 EJB:s 和 CDI 托管 bean 中工作。

【讨论】:

【解决方案2】:

我尝试使用 JDK8 运行 GlassFish,但也无法启动。

提交了一个 JIRA 问题 GLASSFISH-19263 用于跟踪目的。

【讨论】:

  • 谢谢,我得到了同样的错误。我会等待解决方案。
  • 我已经用 jdk 8 - lambda 启动了 Glassfish 4。我认为 asm 库与 lambda express 不兼容。
  • 相关的错误java.net/jira/browse/GLASSFISH-19263已标记为已解决
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 2015-02-20
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
相关资源
最近更新 更多