首页 > 解决方案 > 用于 jakartaee restful jpa Web 应用程序的 docker-compose 不工作

问题描述

我正在努力为一个简单的 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 管理控制台部署战争文件,但失败并出现同样的错误。

相关代码显示在要点中: 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 上运行良好。

让我知道是否需要其他详细信息。

任何帮助表示赞赏。

标签: javapostgresqldockerjakarta-eepayara

解决方案


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

在 GitHub 上有一个未解决的问题,但不幸的是,现在回答了几个月。

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

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


推荐阅读