2016-03-04 61 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 ......此處沒有任何特定的內容)