RuntimeEnvironmentFactoryBean does not seem to load kjar from local maven repository if used with "type" of "DEFAULT_KJAR_CL"

Solution Unverified - Updated -

Issue

  • While using KieScanner to fetch the latest released version of a kjar from remote maven repository it downloads the latest updated versions of the kjar into the system's local maven repository <USER_HOME>/.m2/repository/ folder. However there seems to be a problem with the way Spring bean org.kie.spring.factorybeans.RuntimeEnvironmentFactoryBean works to get KieBase from the kjars available in local maven repository. It has been observed that if org.kie.spring.factorybeans.RuntimeEnvironmentFactoryBean is configured to use DEFAULT_KJAR_CL as type property in the ApplictionContext.xml file of the Spring based application, it fails to look up and load kjars from local maven repository.
...
    <bean id="defaultRuntimeEnvironmentBean" class="org.kie.spring.factorybeans.RuntimeEnvironmentFactoryBean" >
        <property name="type" value="DEFAULT_KJAR_CL"/>
                ...
        <property name="ksessionName" value="defaultKjarKieSesion"/>
                <property name="kbaseName" value="defaultKjarKieBase"/>
                ... 
        <property name="groupId" value= "com.sample.process.test"/>
        <property name="artifactId" value= "SimpleProcessBasedProject"/>  
        <property name="version" value= "1.0-SNAPSHOT"/> 
    </bean> 
...

The following exception is thrown if such a Spring application is deployed.

ERROR | ContextLoader.contextInitialized | Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultRuntimeManagerUtility': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.kie.api.runtime.manager.RuntimeManager com.sample.process.workflow.DefaultRuntimeManagerUtility.defaultRuntimeManager; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultRuntimeManager' defined in ServletContext resource [/WEB-INF/ApplicationContext.xml]: Cannot resolve reference to bean 'defaultRuntimeEnvironment' while setting bean property 'defaultRuntimeEnvironment'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultRuntimeEnvironment': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: Cannot find kbase with name defaultKjarKieBase
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) ~[spring-context-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) ~[spring-context-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:385) ~[spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:284) ~[spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723) [catalina.jar:7.0.22]
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226) [catalina.jar:7.0.22]
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221) [catalina.jar:7.0.22]
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) [na:1.7.0_21]
    at java.util.concurrent.FutureTask.run(FutureTask.java:166) [na:1.7.0_21]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_21]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_21]
    at java.lang.Thread.run(Thread.java:722) [na:1.7.0_21]
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.kie.api.runtime.manager.RuntimeManager com.sample.process.workflow.DefaultRuntimeManagerUtility.defaultRuntimeManager; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultRuntimeManager' defined in ServletContext resource [/WEB-INF/ApplicationContext.xml]: Cannot resolve reference to bean 'defaultRuntimeEnvironment' while setting bean property 'defaultRuntimeEnvironment'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultRuntimeEnvironment': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: Cannot find kbase with name defaultKjarKieBase
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:506) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    ... 21 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultRuntimeManager' defined in ServletContext resource [/WEB-INF/ApplicationContext.xml]: Cannot resolve reference to bean 'defaultRuntimeEnvironment' while setting bean property 'defaultRuntimeEnvironment'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultRuntimeEnvironment': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: Cannot find kbase with name defaultKjarKieBase
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1360) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1118) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:848) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:790) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:707) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    ... 23 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultRuntimeEnvironment': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: Cannot find kbase with name defaultKjarKieBase
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:149) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:109) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1442) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:305) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    ... 36 common frames omitted
Caused by: java.lang.IllegalStateException: Cannot find kbase with name defaultKjarKieBase
    at org.jbpm.runtime.manager.impl.RuntimeEnvironmentBuilder.setupClasspathKmoduleBuilder(RuntimeEnvironmentBuilder.java:249) ~[jbpm-runtime-manager-6.0.3-redhat-7.jar:6.0.3-redhat-7]
    at org.jbpm.runtime.manager.impl.RuntimeEnvironmentBuilder.newClasspathKmoduleDefaultBuilder(RuntimeEnvironmentBuilder.java:405) ~[jbpm-runtime-manager-6.0.3-redhat-7.jar:6.0.3-redhat-7]
    at org.kie.spring.factorybeans.RuntimeEnvironmentFactoryBean.getObject(RuntimeEnvironmentFactoryBean.java:136) ~[kie-spring-6.0.3-redhat-6.jar:6.0.3-redhat-6]
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    ... 41 common frames omitted

What is correct configuration to fix this issue?

Environment

  • Red Hat JBoss BPM Suite (BPMS)
    • 6.0.3

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content