<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">&lt;servlet&gt;</font>
   </div>
   <div>
    <font face="Courier New" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span>&lt;servlet-name&gt;mvc-dispatcher&lt;/servlet-name&gt;</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">&lt;/servlet&gt;</font>
  </div>
  <div>
   <div>
    <font face="Courier New" size="2">&lt;servlet-mapping&gt;</font>
   </div>
   <div>
    <font face="Courier New" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span>&lt;servlet-name&gt;mvc-dispatcher&lt;/servlet-name&gt;</font>
   </div>
   <div>
    <font face="Courier New" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span>&lt;url-pattern&gt;/&lt;/url-pattern&gt;</font>
   </div>
   <div>
    <font face="Courier New" size="2">&lt;/servlet-mapping&gt;</font>
   </div>
   <div>
    <font face="Courier New" size="2">&lt;context-param&gt;</font>
   </div>
   <div>
    <font face="Courier New" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span>&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;</font>
   </div>
   <div>
    <font face="Courier New" size="2"><span class="Apple-tab-span" style="white-space:pre"> </span>&lt;param-value&gt;</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>&lt;/param-value&gt;</font>
   </div>
   <div>
    <font face="Courier New" size="2">&lt;/context-param&gt;</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">&lt;!-- KieSession - Drools support --&gt;</font>
   </div>
   <div>
    <font face="Courier New" size="2">&lt;kie:kmodule id="spring_module"&gt;</font>
   </div>
   <div>
    <font face="Courier New" size="2">&nbsp; &nbsp;<span class="Apple-tab-span" style="white-space:pre"> </span>&lt;kie:kbase name="rules" packages="com.my.sample.drools.rulespackage"&gt;</font>
   </div>
   <div>
    <font face="Courier New" size="2">&nbsp; &nbsp;<span class="Apple-tab-span" style="white-space:pre"> </span>&lt;kie:ksession name="ksession-rules" type="stateless"&gt;</font>
   </div>
   <div>
    <font face="Courier New" size="2">&nbsp; &nbsp;<span class="Apple-tab-span" style="white-space:pre"> </span>&lt;/kie:ksession&gt;</font>
   </div>
   <div>
    <font face="Courier New" size="2">&nbsp; &nbsp;<span class="Apple-tab-span" style="white-space:pre"> </span>&lt;/kie:kbase&gt;</font>
   </div>
   <div>
    <font face="Courier New" size="2">&lt;/kie:kmodule&gt;</font>
   </div>
   <div>
    <font face="Courier New" size="2">&lt;bean id="kiePostProcessor" class="org.kie.spring.KModuleBeanFactoryPostProcessor"/&gt;</font>
   </div>
   <div>
    <font face="Courier New" size="2">&lt;!-- Drools' configuration ends here! --&gt;</font>
   </div>
  </div>
  <div>
   I have this package&nbsp;
   <span style="font-family: 'Courier New'; font-size: small;">"com.my.sample.drools.rulespackage"&nbsp;</span>with&nbsp;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&nbsp;
   <span style="font-family: 'Courier New'; font-size: small;">KModuleBeanFactoryPostProcessor&nbsp;</span>and I can clearly see that an object tree with&nbsp;KieModuleModelImpl,&nbsp;KieBaseModelImpl,&nbsp;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>