Using "assets" property of "RuntimeEnvironmentFactoryBean" Spring bean to load BPMN2 process definitions from kjar causes "java.io.FileNotFoundException"
Issue
- There are scenarios where users would like to use the obtain and load kjars (containing
BPMN2process definitions) downloaded to the localmaven repositoryinside the<USER_HOME>/.m2/repositorylocation of the filesystem within their Spring based applications. In such a scenario there seems to be a problem with configuring and usingorg.kie.spring.factorybeans.RuntimeEnvironmentFactoryBeanbean to define theG.A.V.details of the intended kjars. The problem arises when users attempt to choose specific assets (e.g.BPMN2process definitions) from kjars usingassetsproperty throughorg.kie.spring.factorybeans.RuntimeEnvironmentFactoryBeanbean configuration insideApplicationContext.xmlfile as shown below.
...
<bean id="processA" factory-method="newClassPathResource" class="org.kie.internal.io.ResourceFactory">
<constructor-arg>
<value>com/aaa/bbb/ccc/package/SimpleProcess.bpmn2</value>
</constructor-arg>
</bean>
<bean id="defaultRuntimeEnvironment" class="org.kie.spring.factorybeans.RuntimeEnvironmentFactoryBean" >
...
<property name="kbaseName" value="firstKBase"/>
<property name="assets">
<map>
<entry key-ref="processA"><util:constant static-field="org.kie.api.io.ResourceType.BPMN2"/>
</entry>
</map>
</property>
<property name="groupId" value= "com.simple.jbpm.process"/>
<property name="artifactId" value= "SimpleProcessProject"/>
<property name="version" value= "1.0-SNAPSHOT"/>
</bean>
...
During the deployment of the application it throws the following exception.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultRuntimeManager' defined in class path resource [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.RuntimeException: Unable to get LastModified for ClasspathResource
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1327)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1085)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:516)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:455)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:567)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.sample.RuntimeManagerTest.testBean(RuntimeManagerTest.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at junit.framework.TestCase.runTest(TestCase.java:176)
at junit.framework.TestCase.runBare(TestCase.java:141)
at junit.framework.TestResult$1.protect(TestResult.java:122)
at junit.framework.TestResult.runProtected(TestResult.java:142)
at junit.framework.TestResult.run(TestResult.java:125)
at junit.framework.TestCase.run(TestCase.java:129)
at junit.framework.TestSuite.runTest(TestSuite.java:255)
at junit.framework.TestSuite.run(TestSuite.java:250)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultRuntimeEnvironment': FactoryBean threw exception on object creation; nested exception is java.lang.RuntimeException: Unable to get LastModified for ClasspathResource
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:149)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:109)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1440)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:247)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
... 34 more
Caused by: java.lang.RuntimeException: Unable to get LastModified for ClasspathResource
at org.drools.core.io.impl.ClassPathResource.getLastModified(ClassPathResource.java:211)
at org.drools.core.io.impl.ClassPathResource.getInputStream(ClassPathResource.java:148)
at org.drools.core.io.impl.ClassPathResource.getReader(ClassPathResource.java:233)
at org.jbpm.compiler.ProcessBuilderImpl.addProcessFromXml(ProcessBuilderImpl.java:264)
at org.drools.compiler.compiler.PackageBuilder.addProcessFromXml(PackageBuilder.java:700)
at org.drools.compiler.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:741)
at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:51)
at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:40)
at org.jbpm.runtime.manager.impl.SimpleRuntimeEnvironment.addAsset(SimpleRuntimeEnvironment.java:104)
at org.jbpm.runtime.manager.impl.RuntimeEnvironmentBuilder.addAsset(RuntimeEnvironmentBuilder.java:281)
at org.jbpm.runtime.manager.impl.RuntimeEnvironmentBuilder.addAsset(RuntimeEnvironmentBuilder.java:56)
at org.kie.spring.factorybeans.RuntimeEnvironmentFactoryBean.getObject(RuntimeEnvironmentFactoryBean.java:179)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142)
... 39 more
Caused by: java.io.FileNotFoundException: 'com/aaa/bbb/ccc/package/SimpleProcess.bpmn2' cannot be opened because it does not exist
at org.drools.core.io.impl.ClassPathResource.getURL(ClassPathResource.java:172)
at org.drools.core.io.impl.ClassPathResource.getLastModified(ClassPathResource.java:184)
... 51 more
- What is the root cause of this issue and how to workaround it?
Environment
- Red Hat JBoss BPM Suite (BPMS)
- 6.0.3
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase of over 48,000 articles and solutions.
Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.
