gpt4 book ai didi

java - Wildfly 无法注入(inject)值(value)?

转载 作者:太空宇宙 更新时间:2023-11-04 12:51:24 26 4
gpt4 key购买 nike

我正在尝试让一个私有(private)的、闭源的 jar 在 Wildfly 服务器上工作。

这是我得到的堆栈跟踪:

2016-03-03 15:57:20,909 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 58) MSC000001: Failed to start service jboss.ra.deployer."eclsconnector.rar": org.jboss.msc.service.StartException in service jboss.ra.deployer."eclsconnector.rar": JBAS010446: Failed to start RA deployment [eclsconnector.rar]
at org.jboss.as.connector.services.resourceadapters.deployment.ResourceAdapterDeploymentService$1.run(ResourceAdapterDeploymentService.java:157)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_51]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_51]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_51]
at org.jboss.threads.JBossThread.run(JBossThread.java:122)
Caused by: org.jboss.jca.deployers.common.DeployException: IJ020060: Unable to inject: com.empolis.ecls.server.j2ee.jca.impl.ECLSManagedConnectionFactory property: ECLSPropFile value: /app/CMS/modules/server/config/properties/ecls.prop.jboss
at org.jboss.jca.deployers.common.AbstractResourceAdapterDeployer.createObjectsAndInjectValue(AbstractResourceAdapterDeployer.java:2038) [ironjacamar-deployers-common-1.1.5.Final.jar:1.1.5.Final]
at org.jboss.jca.deployers.common.AbstractResourceAdapterDeployer.createObjectsAndInjectValue(AbstractResourceAdapterDeployer.java:1173) [ironjacamar-deployers-common-1.1.5.Final.jar:1.1.5.Final]
at org.jboss.as.connector.services.resourceadapters.deployment.ResourceAdapterDeploymentService$AS7RaDeployer.doDeploy(ResourceAdapterDeploymentService.java:209)
at org.jboss.as.connector.services.resourceadapters.deployment.ResourceAdapterDeploymentService.start(ResourceAdapterDeploymentService.java:118)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_51]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_51]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_51]

这个异常是什么意思?我应该查看哪些文件以及应该查找哪些内容来尝试修复它?我是否需要反编译某些内容、修改它并重新编译,或者这是否表明我在 Wildfly 上配置了错误的内容?

抱歉,细节很少。如果您让我知道哪些文件对我有用,我可以提供这些文件。这只是一个大型项目,也是我第一次使用 Wildfly,所以我不知道从哪里开始寻找。

最佳答案

当你遇到这个问题时,你应该做的是设置Byteman。

这需要从这里下载并安装它:http://byteman.jboss.org/ ,然后将以下内容添加到您的 java_opts 中:

-javaagent:/path/to/byteman.jar=script:/path/to/bytemanRules.btm,boot:/path/to/byteman.jar,listener:true

/path/to/byteman.jar 的两个位置替换为 byteman jar 的路径,将 /path/to/bytemanRules.btm 的位置替换为实际规则文件的路径。

如果您有像我这样的堆栈跟踪,则从 byteman 开始的位置将是 ECLSManagedConnectionFactory.setECLSPropFile - 围绕该规则添加规则,以便在进入、退出或从该方法抛出异常时记录到文件。下一步是反编译该类。

找到类文件(jar/war/ear/rar 文件都是 zip 文件 - 易于打开),然后反编译它。 IntelliJ 内置了一个反编译器。使用反编译的类来找出它调用的一些方法是什么。回到 byteman,根据您看到的调用方法添加规则(使用 AT INVOKE 和 AFTER INVOKE),以找出它的去向和卡住的位置。

最后一个可能有用的技巧是将 -verbose:class 添加到您的 java_opts 中。这会导致 Java 吐出它加载的每个 jar 的完整路径,以及它在每个 jar 中找到的类。

最终我上面的问题 - 完全不可能仅通过查看此堆栈跟踪来确定 - 是我在不同的 jar 中拥有单个类的不同版本。 ECLSManagedConnectionFactory.setECLSPropFile 调用的内容本意是与类的一个副本进行通信,但却与类的另一个副本进行通信...这导致了问题。

我无法提供更具体的帮助,但希望这个简短的工具和技术列表为您提供了一个有用的起点,可以使用 Wildfly(甚至一般的 Java...这里没有任何内容是真正特定于 Wildfly 的)来调试此问题和其他问题。

关于java - Wildfly 无法注入(inject)值(value)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35799835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com