Обновлен с весны 3 до весны 5 - и теперь ошибки с автопроводкой - PullRequest
2 голосов
/ 02 апреля 2019

Существует проект по обновлению Java, weblogic и, как оказалось, появился в одном из наших веб-приложений. Раньше ява 6, weblogic 10 и весна 3. Переезд на Java 8, Weblogic 12 и Spring 5.

После большого количества адских зависимостей во время компиляции и необходимости рефакторинга вокруг некоторых устаревших классов Spring, я получил его для сборки.

И это когда начались настоящие проблемы.

При развертывании приложения я получаю следующее исключение.

<02-Apr-2019 10: 14: 56 294 IST> <[ACTIVE] ExecuteThread: '92' для очереди: 'weblogic.kernel.Default (самонастройка)'> <> <> <37efec1d-3b6b- 481e-a623-5c66ebd12f27-0000005d> <1554196496294> <[значение-серьезности: 16] [рид: 0] [идентификатор-раздела: 0] [имя-раздела: ДОМЕН]> 'доступно: ожидается как минимум 1 компонент, который квалифицируется как автопроволочный кандидат. Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (обязательно = true), @ org.springframework.beans.factory.annotation.Qualifier (value = healthPlanCheckoutFunnelStateHolderMapper)}.

org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка создания компонента с именем 'findAPlanCheckoutController': неудовлетворенная зависимость, выраженная через поле 'funnelStateHolderMapper'; вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа 'com.vhi.web.common.mappers.FunnelStateHolderMapper': ожидается как минимум 1 компонент, который считается кандидатом на автоматическое подключение. Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (обязательно = true), @ org.springframework.beans.factory.annotation.Qualifier (value = healthPlanCheckoutFunnelStateHolderMapper)} в org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject (AutowiredAnnotationBeanPostProcessor.java:596) в org.springframework.beans.factory.annotation.InjectionMetadata.inject (InjectionMetadata.java:90) в org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties (AutowiredAnnotationBeanPostProcessor.java:374) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory.java:1395) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:592) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:515) в org.springframework.beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0 (AbstractBeanFactory.java:320) в org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222) в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:318) в org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:199) в org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:849) в org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:877) в org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:549) в org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext (ContextLoader.java:400) в org.springframework.web.context.ContextLoader.initWebApplicationContext (ContextLoader.java:291) в org.springframework.web.context.ContextLoaderListener.contextInitialized (ContextLoaderListener.java:103) в weblogic.servlet.internal.EventsManager $ FireContextListenerAction.run (EventsManager.java:705) в weblogic.security.acl.internal.AuthenticatedSubject.doAs (AuthenticatedSubject.java:326)по адресу) по адресу189) по адресу: 1843) на weblogic.servlet.internal.WebAppModule.start (WebAppModule.java:884) на weblogic.application.internal.ExtensibleModuleWrapper $ StartStateChange.next (ExtensibleModuleWrapper.java:360) на weblogic.application.internal.ExtensibleModuleWrapper $ StartStateChange.next (ExtensibleModuleWrapper.java:356) в weblogic.application.utils.StateMachineDriver.nextState (StateMachineDriver.java:45) в weblogic.application.internal.Exraпо адресу weblogic.application.internal.flow.ModuleListenerInvoker.start (ModuleListenerInvoker.java:124) по адресу weblogic.application.internal.flow.ModuleStateDriver $ 3.next (ModuleStateDriver.java:233) по адресу weblogic.application.internal.flowDriver $tate.next (ModuleStateDriver.java:228) в weblogic.application.utils.StateMachineDriver.nextState (StateMachineDriver.java:45) в weblogic.application.internal.flow.ModuleStateDriver.start (ModuleStateDriver.java:application) в weblogic.internal.flow.StartModulesFlow.activate (StartModulesFlow.java:52) в weblogic.application.internal.BaseDeployment $ 2.next (BaseDeployment.java:752) в weblogic.application.utils.StateMachineDriver.nextState (StateMachineDriver.java:45)weblogic.application.internal.BaseDeployment.activate (BaseDeployment.java:262) по адресу weblogic.application.internal.EarDeployment.activate (EarDeployment.java:66) по адресу weblogic.application.internal.DeploymentStateChecker.activate (DeploymentStateChecker.java:16)на weblogic.deploy.internal.targetserver.AppContainerInvoker.activate (AppContainerInvoker.java:90) на weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate (AbstractOperation.java:631) на weblogic.deperationtver.in.ActivateOperation.activateDeployment (ActivateOperation.java:171) в weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit (ActivateOperation.java:121) в weblogic.deploy.internal.targetserver.operationj.ava AbstractOperationjperationj: 348) в weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit (DeploymentManager.java:907) в weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList (DeploymentManager).java: 1468) на weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit (DeploymentManager.java:459) на weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit (DeploymentServiceDispatcher.java:gic.p.web) at.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback (DeploymentReceiverCallbackDeliverer.java:217) по адресу weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access $ 100 (DeploymentReceivertelver.lover.loverвыполнить (DeploymentReceiverCallbackDeliverer.java:69) в weblogic.work.SelfTuningWorkManagerImpl $ WorkAdapterImpl.run (SelfTuningWorkManagerImpl.java:678)по адресуPartitionUtility.runWorkUnderContext (PartitionUtility.java:41) в weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext (SelfTuningWorkManagerImpl.java:652) в weblogic.workwork.ExecuteThread.exr.java: 360) Причина: org.springframework.beans.factory.NoSuchBeanDefinitionException: отсутствует квалифицируемый компонент типа 'com.vhi.web.common.mappers.FunnelStateHolderMapper': ожидается, что по крайней мере 1 компонент будет квалифицирован как кандидат для автоматической передачи.Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (обязательный = true), @ org.springframework.beans.factory.annotation.Qualifier (value = healthPlanCheckoutFunnelStateHolderMapper)} в org.springpport.ory..DefaultListableBeanFactory.raiseNoMatchingBeanFound (DefaultListableBeanFactory.java:1654) при org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:1213) в org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java1111springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties (AutowiredAnnotationBeanPostProcessor.java: 374) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory.java:1395) в org.springframework.beanspringframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:515) в org.springframework.beans.factory.support.AbstractBean..support..java: 199) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.javaПо адресуContextLoader.configureAndRefreshWebApplicationContext (ContextLoader.java:400) по адресу org.springframework.web.context.ContextLoader.initWebApplicationContext (ContextLoader.java:291) по адресу org.springframework.weLic.jl.dll.servlet.internal.EventsManager $ FireContextListenerAction.run (EventsManager.java:705) в weblogic.security.acl.internal.AuthenticatedSubject.doAs (AuthenticatedSubject.java:326) в weblogic.security.service.SecurityMava: 197) в weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode (WlsSecurityProvider.java:203) в weblogic.servlet.provider.WlsSubjectHandle.run (WlsSubjectHandle.java:71)на weblogic.servlet.internal.EventsManager.executeContextListener (EventsManager.java:251) в weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent (EventsManager.java:204) в weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent (EventsManager.java:189) на weblogic.servlet.internal.WebAppServletContext.preloadResources (WebAppServletContext.java:1921) на weblogic.servlet.internal.WebAppServletContext.start (WebAppServletContext.java:3101) на weblogic.servlet.internal.WebAppModule.startContexts (WebAppModule.java:1843) на weblogic.servlet.internal.WebAppModule.start (WebAppModule.java:884) at weblogic.application.internal.ExtensibleModuleWrapper $ StartStateChange.next (ExtensibleModuleWrapper.java:360) at weblogic.application.internal.ExtensibleModuleWrapper $ StartStateChange.next (ExtensibleModuleWrapper.java:356) на weblogic.application.utils.StateMachineDriver.nextState (StateMachineDriver.java:45) в weblogic.application.internal.ExtensibleModuleWrapper.start (ExtensibleModuleWrapper.java:138) на weblogic.application.internal.flow.ModuleListenerInvoker.start (ModuleListenerInvoker.java:124) в weblogic.application.internal.flow.ModuleStateDriver $ 3.next (ModuleStateDriver.java:233) в weblogic.application.internal.flow.ModuleStateDriver $ 3.next (ModuleStateDriver.java:228) на weblogic.application.utils.StateMachineDriver.nextState (StateMachineDriver.java:45) в weblogic.application.internal.flow.ModuleStateDriver.start (ModuleStateDriver.java:78) в weblogic.application.internal.flow.StartModulesFlow.activate (StartModulesFlow.java:52) в weblogic.application.internal.BaseDeployment $ 2.next (BaseDeployment.java:752) на weblogic.application.utils.StateMachineDriver.nextState (StateMachineDriver.java:45) на weblogic.application.internal.BaseDeployment.activate (BaseDeployment.java:262) в weblogic.application.internal.EarDeployment.activate (EarDeployment.java:66) в weblogic.application.internal.DeploymentStateChecker.activate (DeploymentStateChecker.java:165) на weblogic.deploy.internal.targetserver.AppContainerInvoker.activate (AppContainerInvoker.java:90) на weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate (AbstractOperation.java:631) на weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment (ActivateOperation.java:171) на weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit (ActivateOperation.java:121) на weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit (AbstractOperation.java:348) на weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit (DeploymentManager.java:907) at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList (DeploymentManager.java:1468) на weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit (DeploymentManager.java:459) на weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit (DeploymentServiceDispatcher.java:181) на weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback (DeploymentReceiverCallbackDeliverer.java:217) на weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access $ 100 (DeploymentReceiverCallbackDeliverer.java:14) на weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer $ 2.run (DeploymentReceiverCallbackDeliverer.java:69) на weblogic.work.SelfTuningWorkManagerImpl $ WorkAdapterImpl.run (SelfTuningWorkManagerImpl.java:678) at weblogic.invocation.ComponentInvocationContextManager._runAs (ComponentInvocationContextManager.java:352) at weblogic.invocation.ComponentInvocationContextManager.runAs (ComponentInvocationContextManager.java:337) на weblogic.work.LivePartitionUtility.doRunWorkUnderContext (LivePartitionUtility.java:57)на weblogic.work.PartitionUtility.runWorkUnderContext (PartitionUtility.java:41) на weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext (SelfTuningWorkManagerImpl.java:652) на weblogic.work.ExecuteThread.execute (ExecuteThread.java:420) at weblogic.work.ExecuteThread.run (ExecuteThread.java:360)

Компонент:

@Component
@Qualifier("healthPlanCheckoutFunnelStateHolderMapper")
public class HealthPlanCheckoutFunnelStateHolderMapper extends CommonHealthCheckoutFunnelStateHolderMapper<HealthPlanCheckoutBean>
{
    @Override
    protected HealthPlanCheckoutBean createBean() {
        return new HealthPlanCheckoutBean();
    }
}

и автоматическое подключение этого компонента:

@Autowired
@Qualifier("healthPlanCheckoutFunnelStateHolderMapper")
private FunnelStateHolderMapper<HealthPlanCheckoutBean, HealthPlanFunnelStateHolder> funnelStateHolderMapper;

Интерфейс FunnelStateHolderMapper

/**
 * Interface defines methods for mapping to and from a {@link FunnelStateHolder}. This is the top level mapper that
 * should be used by each controller for handling GET and POST requests. The implementation may delegate to other
 * underlying mappers but this should always be the interface to which the controller talks.
 */
public interface FunnelStateHolderMapper<B, F extends FunnelStateHolder> {

    B toScreenBean(F funnelStateHolder);

    F fromScreenBean(F funnelStateHolder, B screenBean);
}

В конфигурации имеется компонентное сканирование, включающее пакет, в котором находится этот код.

Это работало нормально с пружиной 3, но после перехода на пружину 5 эта проблема возникает. Я полагаю, возможно, что какой-то рефакторинг, который мне пришлось сделать, чтобы заставить его скомпилировать, вызвал эту проблему, но я так не думаю. Ни один из файлов, в которых находится вышеуказанный код, не был обновлен.

До сих пор мне не приходилось обновлять конфигурацию Spring. Есть ли разница в том, как пружина 3 и пружина 5 ищут компоненты?

1 Ответ

0 голосов
/ 02 апреля 2019

Поле

private FunnelStateHolderMapper<...> funnelStateHolderMapper;

не того же типа @Component / @Qualifier аннотированного класса

HealthPlanCheckoutFunnelStateHolderMapper

Вы не можете ожидатьПерейти к @Autowire что-то, что приведет к ошибка компиляции / времени выполнения .


Если HealthPlanCheckoutFunnelStateHolderMapper является частью иерархии, пожалуйста, покажите это.

...