【问题标题】:docker-compose for jakartaee restful jpa web application not working用于 jakartaee restful jpa Web 应用程序的 docker-compose 无法正常工作
【发布时间】:2020-05-14 14:12:08
【问题描述】:

我为一个简单的 jakartaEE/JavaEE restful JPA Web 应用程序编写了一个 docker-compose 文件而苦苦挣扎了几天。 DB是PostgreSQL,应用服务器是payara。此应用程序向数据库插入少量条目,并在每个休息调用响应中返回集合。当我在本地安装的 payara 和 Postgres 中部署相同的应用程序时,它工作正常。但是 docker-compose 失败并出现错误:

An error occurred during deployment: Class 
       com.docker.java.petstore.service.PetstoreService has unsupported major or 
      minor version numbers, which are greater than those found in the Java 
      Runtime Environment version 1.8.0_222. Please see the server.log for more details.

https://imgur.com/a/zVvVaGP

我尝试从 payara 管理控制台部署 war 文件,但失败并出现同样的错误。

gist 中显示了相关代码: https://gist.github.com/JohnyzHub/cf8e9560b8640dbfd27dc4bb98d5991c

使用的环境:

        java 11
        JakartaEE 8
        Payara appserver
        postgresql

使用glassfish-resource.xml文件动态创建连接池和数据源。

错误看起来很奇怪,我使用的是 java 11,但错误与特定的 java 8 版本有关。我不知道这里可能出了什么问题。

当我使用相同的 docker 文件部署没有 JPA 层的类似 java 11 Web 应用程序时,它在 docker 上运行良好。

如果需要更多详细信息,请告诉我。

感谢任何帮助。

【问题讨论】:

    标签: java postgresql docker jakarta-ee payara


    【解决方案1】:

    您的服务器的错误表明您在 docker 映像中以比当前使用的 (JDK8) 更高的版本 (JDK11) 编译了类。

    检查应用服务器 Docker 映像上使用的 Java 运行时。 然后使用该服务器的 JDK8 版本编译 petstore,或者升级 docker 容器映像以使用比用于编译的版本更高的 JDK。

    【讨论】:

      【解决方案2】:

      Dockerhub 上的官方Payara Docker images 内部使用的是 Java 8。这与您的 Java 11 编译源代码冲突并且不起作用。

      在 GitHub 上有一个open issue,但不幸的是,现在回答了几个月。

      作为一种解决方法,要么选择另一个应用程序服务器(例如,Open Liberty Universal Base Docker 映像具有latest Java versions 的标签),要么从例如构建您自己的 Docker 映像。 OpenJDK 11 基础镜像。

      要弄清楚如何创建自己的 Docker 映像,我建议查看 Adam Bien's Docklands repository,其中包含多个示例。

      【讨论】:

      • 感谢您的投入,Philip Riecks。我可以知道为什么禁止 jpa 层的同一个应用程序在 java 11 上运行良好吗?该应用程序中没有专门使用任何 java 11 语法的代码。
      • 要回答这个问题,请更新问题并提供更多关于您的 JPA 层究竟是什么的信息/代码
      • 我提供了问题描述中提到的gist.github链接中的所有代码。你有机会看看吗?
      • 如果我通过将 pom 文件中的 java 版本更改为 1.8 来创建 docker 映像,则一切正常。这证明了这个war文件中没有代码需要java版本11。这让我相信问题是不同的。
      • 我假设当您在 pom 文件中更改为 1.8 时,您的源代码会使用 Java 8 编译器进行编译。然后它可以在 Java 8 VM 上运行。但是如果你用 Java 11 编译器编译,它不能在 Java 8 VM 上运行,它需要 Java 11+ VM。你需要一个带有 Java 11 的 docker 镜像。Payara 计划很快提供基于 Java 11 的 docker 镜像。在此之前,您需要使用社区提供的 docker 镜像或构建自己的镜像。
      猜你喜欢
      • 2019-02-08
      • 1970-01-01
      • 2022-07-31
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 2019-11-15
      • 2021-12-24
      • 1970-01-01
      相关资源
      最近更新 更多