Spring upgrade branch not working on WebLogic 10.3.6 (Servlet 2.5)

582 views
Skip to first unread message

tipsytopsy

unread,
Jun 19, 2014, 9:49:28 AM6/19/14
to light...@googlegroups.com
Hello,

I'm trying to upgrade a proof of concept I've done to the latest spring upgrade branch, but it is not working as with a servlet 2.5 container for some reason. The spring wiring does not look to be working fine and the Administration class scanning is also not working fine.

For example, when I use the lightadmin core as-is with just the servlet 2.5 changes, the application startup throws this error:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'lightAdminRepositoryRestMvcConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: java.util.List org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration.resourceProcessors; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Errorcreating bean with name 'dynamicPersistentEntityResourceProcessor' defined in class path resource [org/lightadmin/core/config/context/LightAdminRepositoryRestMvcConfiguration.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.lightadmin.core.config.domain.GlobalAdministrationConfiguration]: : No qualifying bean of type [org.lightadmin.core.config.domain.GlobalAdministrationConfiguration] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.lightadmin.core.config.domain.GlobalAdministrationConfiguration] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}


Now if I annotate GlobalAdministrationConfiguration with @Configuration or @Component - the application starts up fine, but does not have any @Administration classes registered. I think the spring initialization is not working as expected on servlet 2.5 (It works on servlet 3.0/Tomcat). Could someone please advice how to fix this? What all other classes needs to be explicitly configured with '@Configuration' or '@Component' annotation to make it work since auto-wiring is not working (bean initialization.)

Thanks in advance,

Jay

tipsytopsy

unread,
Jun 19, 2014, 1:03:15 PM6/19/14
to light...@googlegroups.com
I was able to fix this by registering the beanFactorypostProcessor in the LightAdminContextInitializer (Along with @Component on GlobalAdministrationConfiguration class):

  @Override
  public void initialize(final AnnotationConfigWebApplicationContext applicationContext) {
    boolean securityEnabled =
        BooleanUtils.toBoolean(applicationContext.getServletContext().getInitParameter(
            LightAdminConfigurationUtils.LIGHT_ADMINISTRATION_SECURITY));
    if (securityEnabled) {
      applicationContext.register(LightAdminContextConfiguration.class,
          LightAdminSecurityConfiguration.class);
    } else {
      applicationContext.register(LightAdminContextConfiguration.class);
    }
    applicationContext
        .addBeanFactoryPostProcessor(new LightAdminBeanDefinitionRegistryPostProcessor(
            applicationContext.getServletContext().getInitParameter(
                LightAdminConfigurationUtils.LIGHT_ADMINISTRATION_BASE_PACKAGE), applicationContext
                .getServletContext()));
  }


Please advice if there is any better fix to get it working on servlet 2.5 containers. Thanks!

Maxim Kharchenko

unread,
Jun 19, 2014, 4:59:30 PM6/19/14
to light...@googlegroups.com
Hi mate,

Will think about this problem and try to come up with something)

Cheers,
Max

tipsytopsy

unread,
Jun 24, 2014, 7:35:43 PM6/24/14
to light...@googlegroups.com
Hello,

I deployed the app on Servlet 3.0 container (WebLogic 12c) and the code does not deploy without @Configuration annotation on GlobalAdministrationConfiguration. Does it do any harm in the administration class initialization?

Thanks,
Jay

Maxim Kharchenko

unread,
Jun 25, 2014, 8:04:23 AM6/25/14
to light...@googlegroups.com
Hi Jay,

GlobalAdministrationConfiguration has nothing to do with Spring @Configuration to be honest. It's purely LightAdmin's infrastructural bean which is created by GlobalAdministrationConfigurationFactoryBean.

Could you provide a stack trace, please? I'll be able to test it on WebLogic 12c.

Cheers,
Max
LightAdmin Team

tipsytopsy

unread,
Jun 25, 2014, 9:49:11 AM6/25/14
to light...@googlegroups.com
Hi Max,

Thanks for your quick replies! Sure here is the stack trace:

Issue #1 : GlobalAdministrationConfiguration bean not found:
2014-06-25 09:38:34,572 ERROR [org.springframework.web.context.ContextLoader(initWebApplicationContext:331)] Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'lightAdminRepositoryRestMvcConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: java.util.List org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration.resourceProcessors; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dynamicPersistentEntityResourceProcessor' defined in class path resource [org/lightadmin/core/config/context/LightAdminRepositoryRestMvcConfiguration.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.lightadmin.core.config.domain.GlobalAdministrationConfiguration]: : No qualifying bean of type [org.lightadmin.core.config.domain.GlobalAdministrationConfiguration] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.lightadmin.core.config.domain.GlobalAdministrationConfiguration] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:370)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1094)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:989)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
        at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:232)
        at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:618)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:467)
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
        at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.java:661)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
        at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
        at weblogic.servlet.internal.EventsManager.executeContextListener(EventsManager.java:241)
        at weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:198)
        at weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:183)
        at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1783)
        at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:2807)
        at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1661)
        at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:822)
        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:42)
        at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:138)
        at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)
        at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:213)
        at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:208)
        at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42)
        at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:70)
        at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:24)
        at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:729)
        at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42)
        at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:258)
        at weblogic.application.internal.SingleModuleDeployment.activate(SingleModuleDeployment.java:48)
        at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165)
        at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:80)
        at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:586)

Issue #2 : After annoting GlobalAdministrationConfiguration with @Component, the application still does not start with this error:
2014-06-25 09:45:04,038 ERROR [org.springframework.web.servlet.DispatcherServlet(initServletBean:492)] Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.lightadmin.core.config.context.LightAdminRepositoryRestMvcConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: java.util.List org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration.resourceProcessors; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration': Injection of autowired dependencies failed; nested exception is java.lang.IllegalStateException: Only one TransactionManagementConfigurer may exist
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:370)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1094)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:989)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
        at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:232)
        at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:618)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:467)
        at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658)
        at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:530)
        at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484)
        at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
        at javax.servlet.GenericServlet.init(GenericServlet.java:240)
        at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:337)
        at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:288)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
        at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
        at weblogic.servlet.internal.StubSecurityHelper.initServletInstance(StubSecurityHelper.java:98)
        at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:92)
        at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:72)
        at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:60)
        at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:39)
        at weblogic.servlet.internal.ServletStubImpl.initStubLifecycleHelper(ServletStubImpl.java:645)
        at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:593)
        at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:1924)
        at weblogic.servlet.internal.WebAppServletContext.loadServletsOnStartup(WebAppServletContext.java:1901)
        at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1791)
        at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:2807)
        at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1661)
        at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:822)



This is on Weblogic 12.1.2 Server. Thank you for all your help!

-Jay

tipsytopsy

unread,
Jun 26, 2014, 8:11:36 PM6/26/14
to light...@googlegroups.com
Sorry for the confusion, this is a non-issue. It was an issue with my spring configurations. I've plugged in Lightadmin with some of my custom web application. So I have done component scanning for my packages and also left the lightadmin packages there by mistake. So spring was getting confused in the bean initialization and hence all these issue.

Maxim Kharchenko

unread,
Jun 28, 2014, 8:54:03 AM6/28/14
to light...@googlegroups.com
Hi Jay,

You're right. Happy to hear this.
Btw, I've commented on your issue on GitHub.

Cheers,
Max
LightAdmin Team
Reply all
Reply to author
Forward
0 new messages