2016-03-04 17 views
1

我正试图获得一个私人的,封闭的源代码jar来在瘫痪服务器上工作。Wild Unable无法注入价值?

这里是堆栈跟踪我越来越:

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上配置了不正确的东西?

对不起,缺乏细节。如果你让我知道哪些文件对帮助我有用,我可以提供这些文件。这只是一个大型项目,也是我第一次与蜻蜓一起工作,所以我不知道从哪里开始寻找。

+0

它看起来像不能将具有值“/ app/CMS/modules/server/config/properties/ecls.prop.jboss”的属性'ECLSPropFile'注入到'ManagedConnectionFactory'中。我的猜测是没有名为'ECLSPropFile'的字段或名为'setECLSPropFile(String)'的方法。 –

+0

@ JamesR.Perkins - 我反编译了'ManagedConnectionFactory',并能够看到它有'setECLSPropFile(String)'方法。我还设置了Byteman并在输入和退出方法中插入日志。在输入被触发,但在退出永远不会。我将继续调查......可能有一个异常在方法中得到提升,而Byteman无法拦截它? – ArtOfWarfare

+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罐子和一个地方它说/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 ......此处没有任何特定的内容)