<HTML><BODY>
Hello,
<div>
I experience a problem autowiring my KieSession object into my Controller field in Spring.
</div>
<div>
I read the Spring integration configuration part of Drools documentation and edited my Spring
</div>
<div>
configuration as adviced. However on deploying I receive one and the same well know exception:
</div>
<div>
<br>
<div>
"org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.kie.api.runtime.KieSession] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.kie.api.cdi.KSession(name=, value=ksession-rules)}"
</div>
</div>
<div>
<br>
</div>
<div>
My application's web.xml defines my spring configuration entries as follows:
<br>
<div>
<font face="Courier New" size="2"><servlet></font>
</div>
<div>
<font face="Courier New" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span><servlet-name>mvc-dispatcher</servlet-name></font>
</div>
</div>
<div>
<font face="Courier New" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span>......</font>
</div>
<div>
<font face="Courier New" size="2"></servlet></font>
</div>
<div>
<div>
<font face="Courier New" size="2"><servlet-mapping></font>
</div>
<div>
<font face="Courier New" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span><servlet-name>mvc-dispatcher</servlet-name></font>
</div>
<div>
<font face="Courier New" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span><url-pattern>/</url-pattern></font>
</div>
<div>
<font face="Courier New" size="2"></servlet-mapping></font>
</div>
<div>
<font face="Courier New" size="2"><context-param></font>
</div>
<div>
<font face="Courier New" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span><param-name>contextConfigLocation</param-name></font>
</div>
<div>
<font face="Courier New" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span><param-value></font>
</div>
<div>
<font face="Courier New" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span>/WEB-INF/beans.xml,</font>
</div>
<div>
<font face="Courier New" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span>/WEB-INF/security.xml,</font>
</div>
<div>
<font face="Courier New" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span>/WEB-INF/entityManager.xml</font>
</div>
<div>
<font face="Courier New" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span></param-value></font>
</div>
<div>
<font face="Courier New" size="2"></context-param></font>
</div>
</div>
<div>
<br>
</div>
<div>
As guided by Drools documentation I entered the following Drools configuration in my spring configuration (I try to put the bean both in mvc-dispatcher-servlet.xml configuration and in beans.xml the result is the same).
</div>
<div>
<div>
<font face="Courier New" size="2"><!-- KieSession - Drools support --></font>
</div>
<div>
<font face="Courier New" size="2"><kie:kmodule id="spring_module"></font>
</div>
<div>
<font face="Courier New" size="2"> <span class="Apple-tab-span" style="white-space:pre"> </span><kie:kbase name="rules" packages="com.my.sample.drools.rulespackage"></font>
</div>
<div>
<font face="Courier New" size="2"> <span class="Apple-tab-span" style="white-space:pre"> </span><kie:ksession name="ksession-rules" type="stateless"></font>
</div>
<div>
<font face="Courier New" size="2"> <span class="Apple-tab-span" style="white-space:pre"> </span></kie:ksession></font>
</div>
<div>
<font face="Courier New" size="2"> <span class="Apple-tab-span" style="white-space:pre"> </span></kie:kbase></font>
</div>
<div>
<font face="Courier New" size="2"></kie:kmodule></font>
</div>
<div>
<font face="Courier New" size="2"><bean id="kiePostProcessor" class="org.kie.spring.KModuleBeanFactoryPostProcessor"/></font>
</div>
<div>
<font face="Courier New" size="2"><!-- Drools' configuration ends here! --></font>
</div>
</div>
<div>
I have this package
<span style="font-family: 'Courier New'; font-size: small;">"com.my.sample.drools.rulespackage" </span>with a simple and tested rule in it.
</div>
<div>
<br>
</div>
<div>
In my Controller class I am trying to autowire the KieSession bean to a field as follows:
<br>
<div>
<font face="Arial" size="2">@Controller</font>
</div>
<div>
<font face="Arial" size="2">@RequestMapping(value = "/")</font>
</div>
<div>
<font face="Arial" size="2">public class BaseController extends AbstractController {</font>
</div>
<div>
<font face="Arial" size="2"><br></font>
</div>
<div>
<font face="Arial" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span>private static final Logger log = Logger.getLogger(BaseController.class);</font>
</div>
<div>
<font face="Arial" size="2"><br></font>
</div>
<div>
<font face="Arial" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span>@Autowired</font>
</div>
<div>
<font face="Arial" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span>@KSession("ksession-rules")</font>
</div>
<div>
<font face="Arial" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span>KieSession mySession;</font>
</div>
</div>
<div>
<font face="Arial" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span>.............</font>
</div>
<div>
<font face="Arial" size="2">}</font>
</div>
<div>
I tryed with @Inject instead of spring's @Autowire, the result is the same.
</div>
<div>
<br>
</div>
<div>
I am using the following Drools dependencies with their versions:
<br>drools-core - 6.0.0.FINAL; drools-compiler - 6.0.0.FINAL; kie-spring - 6.0.0.FINAL; (I am trying to keep it simple as my first integration try.)
</div>
<div>
The spring version that I am using is 3.2.4.RELEASE.
</div>
<div>
<br>
</div>
<div>
I debugged
<span style="font-family: 'Courier New'; font-size: small;">KModuleBeanFactoryPostProcessor </span>and I can clearly see that an object tree with KieModuleModelImpl, KieBaseModelImpl, KieSessionModelImpl,
</div>
<div>
with the corresponding details that I entered in the configuration above (packages, name, type, etc.) is created!. However it seems that a KieSession bean is not registered<br>spring's container.</div>
<div>
<br>
</div>
<div>
What I do wrong? Can anyone please help?
<br>
<br>Thanks in advance!
<br>Best Regards,
</div>
<div>
Milen
</div>
</BODY></HTML>