Java 将war部署到payara会引发严重错误:无法获取Mojarra的CDI 1.1实用程序

Java 将war部署到payara会引发严重错误:无法获取Mojarra的CDI 1.1实用程序,java,cdi,weld,payara,payara-micro,Java,Cdi,Weld,Payara,Payara Micro,因为这是在一个相当大的代码库中发生的,我甚至不知道如何开始隔离这个问题,所以我不能给出一个小的复制示例。 也许你可以帮助我进一步调试这个问题,一步一步地提供一个具有相同症状的小场景 在payara micro中部署.war文件时出现以下错误5.2021.2: [2021-04-26T10:10:09.096+0000] [] [SEVERE] [] [javax.enterprise.resource.webcontainer.jsf.application.view] [tid: _Threa

因为这是在一个相当大的代码库中发生的,我甚至不知道如何开始隔离这个问题,所以我不能给出一个小的复制示例。 也许你可以帮助我进一步调试这个问题,一步一步地提供一个具有相同症状的小场景

在payara micro中部署.war文件时出现以下错误
5.2021.2

[2021-04-26T10:10:09.096+0000] [] [SEVERE] [] [javax.enterprise.resource.webcontainer.jsf.application.view] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1619431809096] [levelValue: 1000] Unable to obtain CDI 1.1 utilities for Mojarra

[2021-04-26T10:10:09.109+0000] [] [SEVERE] [] [javax.enterprise.resource.webcontainer.jsf.flow] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1619431809109] [levelValue: 1000] Unable to obtain CDI 1.1 utilities for Mojarra

[2021-04-26T10:10:09.181+0000] [] [SEVERE] [NCLS-CORE-00026] [javax.enterprise.system.core] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1619431809181] [levelValue: 1000] [[
  Exception during lifecycle processing
org.glassfish.deployment.common.DeploymentException: CDI deployment failure:Error while loading class fish.payara.security.oauth2.OAuth2AuthenticationMechanism$Proxy$_$$_WeldSubclass -- Error while loading class fish.payara.security.oauth2.OAuth2AuthenticationMechanism$Proxy$_$$_WeldSubclass
    at org.jboss.weld.resources.ClassTransformer.getBackedAnnotatedType(ClassTransformer.java:186)
    at org.jboss.weld.resources.ClassTransformer.getBackedAnnotatedType(ClassTransformer.java:194)
    at org.jboss.weld.resources.ClassTransformer.getEnhancedAnnotatedType(ClassTransformer.java:232)
    at org.jboss.weld.injection.producer.SubclassedComponentInstantiator.initEnhancedSubclass(SubclassedComponentInstantiator.java:86)
    at org.jboss.weld.injection.producer.SubclassedComponentInstantiator.<init>(SubclassedComponentInstantiator.java:79)
    at org.jboss.weld.injection.producer.SubclassedComponentInstantiator.forInterceptedDecoratedBean(SubclassedComponentInstantiator.java:63)
    at org.jboss.weld.injection.producer.BeanInjectionTarget.initializeAfterBeanDiscovery(BeanInjectionTarget.java:121)
    at org.jboss.weld.injection.producer.InjectionTargetInitializationContext.initialize(InjectionTargetInitializationContext.java:42)
    at org.jboss.weld.injection.producer.InjectionTargetService.initialize(InjectionTargetService.java:63)
    at org.jboss.weld.bootstrap.WeldStartup.deployBeans(WeldStartup.java:481)
    at org.jboss.weld.bootstrap.WeldBootstrap.deployBeans(WeldBootstrap.java:86)
    at org.glassfish.weld.WeldDeployer.processApplicationLoaded(WeldDeployer.java:521)
    at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:433)
    at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:131)
    at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:346)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.prepare(ApplicationLifecycle.java:570)
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:576)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:556)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:552)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:360)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:551)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:582)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:574)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:360)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:573)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1497)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:120)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1879)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1755)
    at com.sun.enterprise.admin.cli.embeddable.CommandExecutorImpl.executeCommand(CommandExecutorImpl.java:183)
    at com.sun.enterprise.admin.cli.embeddable.CommandExecutorImpl.run(CommandExecutorImpl.java:96)
    at fish.payara.boot.runtime.BootCommand.execute(BootCommand.java:69)
    at fish.payara.boot.runtime.BootCommands.executeCommands(BootCommands.java:136)
    at fish.payara.boot.runtime.BootCommands.executeCommands(BootCommands.java:130)
    at fish.payara.micro.impl.PayaraMicroImpl.bootStrap(PayaraMicroImpl.java:1049)
    at fish.payara.micro.impl.PayaraMicroImpl.create(PayaraMicroImpl.java:226)
    at fish.payara.micro.impl.PayaraMicroImpl.main(PayaraMicroImpl.java:213)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at fish.payara.micro.boot.loader.MainMethodRunner.run(MainMethodRunner.java:50)
    at fish.payara.micro.boot.loader.Launcher.launch(Launcher.java:114)
    at fish.payara.micro.boot.loader.Launcher.launch(Launcher.java:73)
    at fish.payara.micro.boot.PayaraMicroLauncher.create(PayaraMicroLauncher.java:88)
    at fish.payara.micro.boot.PayaraMicroLauncher.main(PayaraMicroLauncher.java:72)
    at fish.payara.micro.PayaraMicro.main(PayaraMicro.java:467)
]]

[2021-04-26T10:10:09.182+0000] [] [SEVERE] [] [javax.enterprise.system.core] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1619431809182] [levelValue: 1000] Exception while loading the app

如果有人能给我一个提示,告诉我可能出现什么问题,或者如何更好地调试这种情况,我会非常高兴

谢谢大家!

编辑1:

正如我在评论中所建议的,我调试了payara,并在上放置了一个断点以找出原因(因为它显然没有正确地登录到payara的当前版本中)

原因是
ClassNotFoundException

"java.lang.ClassNotFoundException: Whitelist enabled, but class [org.eclipse.microprofile.config.Config] is not whitelisted"
我将对此做进一步调查

编辑2:似乎存在某种对microfile.config的隐藏依赖关系(不在我们的代码中,也不在我们的某个依赖关系中。至少不明确)

它有助于增加:

<dependency>
    <groupId>org.eclipse.microprofile.config</groupId>
    <artifactId>microprofile-config-api</artifactId>
    <version>2.0</version>
</dependency>

org.eclipse.microfile.config
微文件配置api
2

我们将查看这是否解决了所有问题,然后写一个答案。

我们设置了一个白名单来帮助解决一些类加载问题:

在升级payara时,出于某种原因,我们现在依赖于microfile.Config可用

可以通过将其添加到白名单来解决此问题:

<glassfish-web-app>
  <whitelist-package>org.eclipse.microprofile</whitelist-package>
</glassfish-web-app>

org.eclipse.com文件
或者将api添加为依赖项:

<dependency>
    <groupId>org.eclipse.microprofile.config</groupId>
    <artifactId>microprofile-config-api</artifactId>
    <version>2.0</version>
</dependency>

org.eclipse.microfile.config
微文件配置api
2

由:xyz“块引起的”加载类时出错“异常丢失”的堆栈跟踪。答案在那边。@BalusC谢谢,我也这么想。但是,我的输出中没有“由:xyz引起的”块。你知道如何打开更多的冗长或是其他的东西,让它们包含进来吗?部署在引导后通过容器中的
deploy--force--enabled=true[…]
完成。到目前为止,引导失败时的所有问题都有适当的堆栈跟踪,我能够轻松找到原因。在这种情况下,它就不存在了。当针对一个成熟的Payara web服务器而不是Payara Micro部署相同的部署时,它的行为如何?同样的错误。堆栈跟踪略有不同,但仍不包括原因。它在同一条线路上也失败了。此处:在此处放置断点并检查
e
。它代表了原因,因此包含了答案。
<dependency>
    <groupId>org.eclipse.microprofile.config</groupId>
    <artifactId>microprofile-config-api</artifactId>
    <version>2.0</version>
</dependency>