问题标签 [payara-micro]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jakarta-ee - 针对 Micro 和嵌入式运行时的 javax.ejb.TransactionRolledbackLocalException
目前,我正在尝试向eclipse-ee4j/cargotracker应用程序添加测试代码。
https://github.com/hantsy/cargotracker/
使用 Payara 托管容器通过的测试在Micro 和嵌入式容器中失败,有很多 EJB 事务异常。
可以在那里找到完整的日志记录。
https://github.com/hantsy/cargotracker/runs/1789325545
不确定微型和嵌入式配置中缺少什么,有什么建议吗?
hazelcast - 使用 IScheduledExecutorService 实现集群协调定时器(仅在 Payara 微集群中的一个节点上运行)
我正在尝试为集群协调事件实现以下行为:
- timer(事件)只在Payara Micro集群的一个线程\JVM中执行;
- 如果节点出现故障 - 计时器(事件)将在集群中的另一个节点上执行。
持久计时器不在 Payara Micro 集群中进行协调。它们总是在与创建计时器同名的实例上执行。
和
如果该实例出现故障,一旦加入集群,计时器将在另一个具有相同名称的实例上重新创建。在此之前,计时器变为非活动状态。
根据定义,似乎持久计时器在 Payara Micro 集群中无法正常工作。
因此,我正在尝试使用来自Hazelcast的 IScheduledExecutorService,这似乎是一个完美的匹配。
基本上,使用 IScheduledExecutorService 的实现效果很好,除了新的 Payara Micro 节点正在启动并加入集群(使用 IScheduledExecutorService 安排了一些事件的集群)的场景。在此期间,会发生以下异常:
异常 1: java.lang.RuntimeException:未初始化 ConcurrentRuntime
这似乎是因为新节点没有完全初始化(因为它刚刚开始)。与下一个相比,此异常似乎不太重要。
异常 2: java.lang.NullPointerException:无法执行 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask
此异常发生在加入集群的新节点上。这并不总是发生,可能 Hazelcast 正在尝试在正在启动的新节点上执行事件,并且由于环境仍未完全初始化而失败。在两次这样的失败尝试后的问题 - 事件被 Hazelcast 卸载。
实施见解:
使用 IScheduledExecutorService 安排事件的方法(驻留在主应用程序 WAR 中的应用程序范围 bean 中):
ClusteredEvent 类(驻留在单独的 JAR 中并通过 --addLibs 参数添加到类路径到 Payara Micro)。它需要以某种方式通知主应用程序要触发的事件,因此使用 BeanManager.fireEvent()。
所以我的问题:
- 如何解决上述异常/问题?
- 我在 Payara Micro 集群中实现协调的集群事件行为的方向是否正确?我希望这是一个开箱即用的简单任务,但它需要一些自定义实现,因为持久性计时器不能按预期工作。Payara Micro Cluster (>=v5.2021.1) 还有其他更优雅的方式来实现协调的集群事件行为吗?
非常感谢您!
更新1:
回想一下,本练习的主要目的是在 Payara 微集群中提供协调的计时器(事件)功能,因此非常欢迎有关更优雅解决方案的建议。
解决评论中的问题/建议:
Q1:
为什么需要为偶数对象创建上下文代理?
A1:确实从普通ClusteredEvent()
对象中制作上下文代理 - 在这里增加了主要复杂性并导致上面列出的异常(意思是:调度ClusteredEvent()
而不从中制作上下文代理 - 工作正常并且不会导致异常,但有一个警告)。
使用上下文代理的原因是我需要以某种方式从由IScheduledExecutorService
. 到目前为止,我还没有找到任何其他可行的方法来从非托管线程触发主应用程序中的任何 CDI/EJB bean。仅使其与上下文相关 - 允许ClusteredEvent.run()
通过BeanManger
例如与主应用程序进行通信。
任何关于如何在单独的应用程序中运行的非托管线程和 CDI/EJB bean 之间建立通信的建议(并且都在同一个 Payara Micro 实例上运行) - 欢迎。
Q2:
例如,您可以将 ceProxy 包装到 Runnable,它在 try catch 块中执行 ceProxy.run()
A2:我试过了,确实有助于处理上面提到的“异常2”。我在ClusteredEventWrapper
下面发布类的实现,run() 方法中的 try/catch 处理“异常 2”。
问题 3:
第一个例外来自 hazelcast 试图反序列化新实例上的代理,但失败是因为代理需要一个初始化的环境来反序列化。为了解决这个问题,您需要包装 ceProxy 对象并自定义包装器的反序列化以等待 ContextService 被初始化。
A3:为序列化/反序列化添加自定义实现ClusteredEventWrapper
确实允许处理“异常 1”,但在这里我仍在努力寻找处理它的最佳方式。通过 - 推迟反序列Thread.sleep()
化会导致新的(不同的)异常。抑制异常 - 需要检查,但在这种情况下,我担心ClusteredEventWrapper
不会在新(起始)节点上正确反序列化,因为 Hazelcast 会认为同步很好并且不会尝试再次同步它(我可能错了 - 这个我还需要检查)。目前看来,Hazelcast 尝试同步几次,但“异常 1”消失了。
ClusteredEventWrapper
which wraps的实现ClusteredEvent
:
所以现在活动安排如下:
apache - 如何在 Payara Micro 中启用 AJP 端口并使用 Apache 服务器作为代理
我正在使用 Payara 微社区版来部署微服务 REST API。我需要启用 AJP 端口,以便 Apache 代理服务器侦听 AJP 端口 8192。
java -jar payara-micro-5.2020.5.jar --deploydir ./payara/webapps --rootDir ./payara --postbootcommandfile ./payara/postboot.txt
./payara/webapps 文件夹包含微服务 WAR 文件。
postboot.txt 内容:
create-network-listener --protocol http-listener-1 --listeneraddress 0.0.0.0 --listenerport 8192--jkenabled true jk-connector
命令执行没有问题,并且启用了以下端口“Http Port(s)”:“8080, 8192”。
我可以在本地使用微服务 API (http://localhost:8192/)。但是来自 Apache 代理的请求显示 Bad Gateway 错误。
我是否缺少在 Payara Micro 中启用 AJP 端口的一些配置?
java - Payara Micro忽略persistence.xml中的连接url
我正在编写一个 Payara Micro Web 应用程序,它应该连接到persistence.xml
. 它应该连接的数据库是我本地机器上的一个文件,在项目启动时,它不存在。据我了解,H2 应该在第一次连接时为数据库创建一个文件。
persistence.xml
看起来像:
当项目运行时,它连接到数据库并运行 sql 命令来创建表并添加我想要在启动 bean 中添加的特定实体。C:\databases\testdb.mv.db
但是,当我检查我的系统时,它并没有像我预期的那样创建文件。出了什么问题,我怎样才能使它真正生成数据库文件,而不是看似忽略配置?
MCVE 的附加文件
pom.xml
测试.java
启动.java
显示它运行命令的日志
java - Payara Javax websocket 连接失败,没有消息
我正在尝试在正在运行的 REST 应用程序上创建一个 websocket 服务器,但它不像我预期的那样工作(它根本不工作)......我是 Java/Javax 的新手,我不知道我是什么我做错了。我不负责创建 REST API,但我知道它运行良好。它由 Payara Micro 5.2020.2 和 openjdk 11.0.11 提供支持,并使用 Gradle 构建。
我在domain.xml文件中启用了 websockets 支持:
我创建了一个简单的端点类来通过 websocket 进行通信:
REST API est 在 http://localhost:8081/my-app 上提供服务,所以我猜 websocket 使用相同的主机名和端口,但是当我尝试创建 web socket 客户端时,连接失败。
我不知道这是由于错误的 URL 还是错误的配置。你能帮我吗 ?
java - @FutureOrPresent 验证器有时会被违反,即使给定日期存在
问题是当我尝试使用 post man 请求添加新记录时,有时会
因违反预期行为而违反一个或多个 Bean 验证约束@PresentOrFuture
:这一定不会发生,因为给定日期总是new Date()
请求正文
回复
代码:
java - 向 payara 部署战争会引发严重错误:无法获得 Mojarra 的 CDI 1.1 实用程序
因为这是在一个相当大的代码库中发生的,我什至不知道如何开始隔离这个问题,所以我真的不能给出一个小的重现示例。也许您可以帮助我进一步调试问题并逐步提供具有相同症状的小场景。
在 payara micro 中部署 .war 文件时出现以下错误5.2021.2
:
因此,该应用程序未部署。
到目前为止我做了什么:
- 查看依赖关系树并确保战争不包含任何会干扰 payara 提供的东西的依赖关系
- 尝试使用谷歌搜索 payara 和这些问题的组合。运气不太好。JBoss/WildFly 的东西出现了,但我无法真正将它与我的问题联系起来
- 查看 javax faces 的源代码以查看实际
Unable to obtain CDI 1.1 utilities for Mojarra
消息被抛出的位置。 - 试图理解为什么该代码甚至被加载,但我找不到任何连接。
以下是依赖项:
如果有人能给我提示可能是什么问题或如何更好地调试情况,我会非常高兴。
谢谢!
编辑1:
正如评论中所建议的,我调试了 payara 并在https://github.com/weld/core/blob/052861a964e78f2f65a97706fe1b181c9d7ce128/impl/src/main/java/org/jboss/weld/resources/ClassTransformer.java#L186放置了一个断点找出原因(因为它显然没有正确登录到当前版本的payara)。
原因是一个ClassNotFoundException
。
我会对此做一些进一步的调查。
编辑 2:似乎对 microprofile.config 存在某种隐藏的依赖项(不在我们的代码中,也不在我们的依赖项之一中。至少没有明确表示)。
它有助于添加:
看看这是否解决了所有问题,然后写一个答案。
nginx - JakartaEE Web 应用程序和 Nginx:从应用程序子文件夹重定向到域
我的应用程序可以在https://nocodefunctions.com/nocodeapp-web-front-1.0/访问
我希望它可以通过https://nocodefunctions.com和 http 版本访问:http: //nocodefunctions.com
我当前的 conf 不会导致预期的结果(取自此处):
我使用 LetsEncrypt、Payara Micro。
docker - 如何调试在 Docker 容器中运行的 Payara Micro?
我在 Docker 容器中运行 Payara Micro (payara/micro:5.2020.7),但无法调试它。
这篇文章解释了要在本地调试它,您需要使用以下命令运行它:
我试图在 docker 文件中运行这个命令但没有成功:
有人能够在 Docker 容器中调试 Payara Micro 吗?