Wildfly无法注入价值?

时间:2016-03-04 15:30:57

标签: java dependency-injection wildfly wildfly-8

我试图让一个私有的,封闭的源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上配置了错误的内容?

对于稀缺的细节感到抱歉。如果你让我知道哪些文件可以帮助我,我可以提供这些。这只是一个大型项目,也是我第一次与野生蝇一起工作,所以我不知道从哪里开始寻找。

1 个答案:

答案 0 :(得分:0)

当你遇到这个问题时,你应该做的是设置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 INVOKEAFTER INVOKE),找出它的去向和卡住的位置。

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

最终我的问题 - 完全无法通过单独查看此堆栈跟踪来确定 - 是我在不同的jar中有不同版本的单个类。 ECLSManagedConnectionFactory.setECLSPropFile正在调用的东西意味着与该类的一个副本交谈,而是与该类的另一个副本交谈......这导致了该问题。

我无法提供更具体的帮助,但希望这个简短的工具和技术列表为您提供了一个有用的调试问题的起点,以及其他一些Wildfly(甚至是Java)...这里没有什么是真的具体到Wildfly。)

相关问题