2017-08-09 109 views
0

我在Weblogic 12c上部署EAR包,並獲取ClassNotFoundException。但是,似乎該項目沒有任何關於缺失類的提及(我已經搜索了類名,結果爲零)。我知道這個異常在丟失類被試圖通過反射實例化時拋出。我懷疑一些圖書館可能依賴於這個班級。ClassNotFoundException,如何找到丟失類的地方

如何找出哪些配置或用戶代碼導致類的實例化?服務器日誌沒有提供足夠的詳細信息,但這裏是

<9.8.2017, 1:07:05,113 ip. EEST> <Error> <Console> <BEA-240003> <Administration Console encountered the following error: weblogic.application.ModuleException: java.lang.ClassNotFoundException: fi.foo.bar.service.FoobarWebServiceImpl 
    at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:140) 
    at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124) 
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:233) 
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:228) 
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45) 
    at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:78) 
    at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:52) 
    at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:750) 
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45) 
    at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:260) 
    at weblogic.application.internal.EarDeployment.activate(EarDeployment.java:66) 
    at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165) 
    at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:90) 
    at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:627) 
    at weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:171) 
    at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:121) 
    at weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:347) 
    at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:901) 
    at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1456) 
    at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:456) 
    at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:181) 
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:217) 
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:14) 
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$2.run(DeploymentReceiverCallbackDeliverer.java:69) 
    at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:666) 
    at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348) 
    at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333) 
    at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54) 
    at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41) 
    at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:640) 
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:406) 
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:346) 
Caused by: java.lang.ClassNotFoundException: fi.foo.bar.service.FoobarWebServiceImpl 
    at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:1026) 
    at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:987) 
    at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:83) 
    at weblogic.utils.classloaders.GenericClassLoader.doFindClass(GenericClassLoader.java:608) 
    at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:540) 
    at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:493) 
    at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:470) 
    at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:53) 
    at weblogic.servlet.internal.WebAppServletContext.initContainerInitializer(WebAppServletContext.java:1414) 
    at weblogic.servlet.internal.WebAppServletContext.initContainerInitializers(WebAppServletContext.java:1360) 
    at weblogic.servlet.internal.WebAppServletContext.initContainerInitializers(WebAppServletContext.java:1341) 
    at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1907) 
    at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3091) 
    at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1823) 
    at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:882) 
    at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:360) 
    at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:356) 
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45) 
    at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:138) 
+0

這是發生在您的開發環境中還是僅在生產模式?你可以在IDE中調試你的應用程序嗎?如果是這樣,你用什麼IDE? –

+0

好吧,它發生在開發環境中,我從庫中刪除了明顯未使用的類。我必須知道這個班級需要什麼,即使沒有參考。也許類名是動態構建的,所以我不能搜索它,但是我怎麼知道哪個類試圖加載這個類?爲什麼我無法從服務器日誌中看到它? –

回答

1

您可以在IDE中使用異常斷點來捕獲ClassNotFoundException。當你添加這樣的斷點時,一旦發生異常,執行就會暫停。然後,您可以遍歷堆棧,您可以在IDE中找到堆棧,並通過選擇堆棧行來查看每個步驟中的數據,以找出代碼嘗試實例化該類型的對象的位置。

1

您的Weblogic無法加載管理控制檯。也許在課堂上部署應用程序失敗了。請嘗試以下操作:

  1. 關閉所有的簇域

  2. 下刪除TMP緩存文件夾中的所有服務器上

  3. 刪除的config.xml文件下掛起dirctory

  4. 刪除* .lok文件中的所有服務器上的/ config下和/ domain文件夾

  5. 重新啓動管理

  6. 重新啓動所有管理服務器

  7. 現在部署戰爭/耳文件,它應該很好地工作......

+0

管理控制檯加載正常(我通過管理控制檯部署)。不過,我嘗試了這個建議,仍然得到相同的錯誤。 –

0

您的應用程序加載失敗「fi.foo.bar.service.FoobarWebServiceImpl」,這是在WebAppServl WebAppModule的etContext。在web.xml或weblogic.xml中重複檢查'fi.foo.bar.service.FoobarWebServiceImpl'的拼寫錯誤類名。

+1

這將是很好的評論,而不是一個答案。 – Nic3500