[jboss-svn-commits] JBL Code SVN: r33931 - in labs/jbossrules/trunk: drools-container/drools-spring/src/main/java/org/drools/container/spring/beans and 7 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jul 16 01:27:41 EDT 2010


Author: mark.proctor at jboss.com
Date: 2010-07-16 01:27:41 -0400 (Fri, 16 Jul 2010)
New Revision: 33931

Added:
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/ResourceChangeScannerBeanFactory.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/ResourceChangeScannerDefinitionParser.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/drl/
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/drl/testSpring.drl
Modified:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/ResourceChangeNotifier.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeAgentBeanFactory.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/StatelessKnowledgeSessionBeanFactory.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeAgentDefinitionParser.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeSessionDefinitionParser.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/SpringDroolsHandler.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring.xsd
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/SpringDroolsTest.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/kagents-beans.xml
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/KnowledgeAgentImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
Log:
JBRULES-1434 Drools Spring
-KnowledgeAgent configuration now works

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/ResourceChangeNotifier.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/ResourceChangeNotifier.java	2010-07-16 04:59:01 UTC (rev 33930)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/ResourceChangeNotifier.java	2010-07-16 05:27:41 UTC (rev 33931)
@@ -19,6 +19,7 @@
  * part of the ResourceType api when adding to KnowledgeBuilder, which is considered stable. KnowledgeBuilder currently ignored Added/Modified xml elements,
  * the KnowledgeAgent will use them, when rebuilding the KnowledgeBase.
  * </p>
+ * @BETA
  * 
  */
 public interface ResourceChangeNotifier {

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeAgentBeanFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeAgentBeanFactory.java	2010-07-16 04:59:01 UTC (rev 33930)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeAgentBeanFactory.java	2010-07-16 05:27:41 UTC (rev 33931)
@@ -44,44 +44,41 @@
         return this.kagent;
     }
 
-    public Class< ? extends KnowledgeAgent> getObjectType() {
+    public Class<KnowledgeAgent> getObjectType() {
         return KnowledgeAgent.class;
     }
 
     public void afterPropertiesSet() throws Exception {
         KnowledgeAgentConfiguration kagentConf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
-        if ( kbase == null && (resources == null || resources == Collections.<DroolsResourceAdapter> emptyList()) ) {
-            throw new RuntimeException( "kagent must reference either an existing kbase or have child element resources" );
+        if ( kbase == null ) {
+            throw new RuntimeException( "kagent must reference an existing kbase" );
         }
-        
-        kagentConf.setProperty( "newInstance",
+
+        kagentConf.setProperty( "drools.agent.newInstance",
                                 newInstance );
 
-        if ( kbase != null ) {
-            this.kagent = KnowledgeAgentFactory.newKnowledgeAgent( this.id,
-                                                                   this.kbase,
-                                                                   kagentConf );
-        } else {
-            this.kagent = KnowledgeAgentFactory.newKnowledgeAgent( this.id,
-                                                                   kagentConf );
+        this.kagent = KnowledgeAgentFactory.newKnowledgeAgent( this.id,
+                                                               this.kbase,
+                                                               kagentConf );
+        
+        if ( resources != null && !resources.isEmpty() ) {
             Collection<Resource> rs = new ArrayList<Resource>();
             for ( DroolsResourceAdapter res : resources ) {
                 InternalResource resource = (InternalResource) res.getDroolsResource();
-
+    
                 resource.setResourceType( res.getResourceType() );
-
+    
                 if ( res.getResourceConfiguration() != null ) {
                     resource.setConfiguration( res.getResourceConfiguration() );
                 }
-
+    
                 rs.add( resource );
             }
             ChangeSetImpl changeSet = new ChangeSetImpl();
             changeSet.setResourcesAdded( rs );
-            
+    
             kagent.applyChangeSet( changeSet );
         }
-        System.out.println( kagent );
     }
 
     public KnowledgeBase getKbase() {

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/ResourceChangeScannerBeanFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/ResourceChangeScannerBeanFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/ResourceChangeScannerBeanFactory.java	2010-07-16 05:27:41 UTC (rev 33931)
@@ -0,0 +1,57 @@
+package org.drools.container.spring.beans;
+
+import org.drools.grid.generic.GenericConnection;
+import org.drools.grid.local.LocalConnection;
+import org.drools.io.ResourceChangeScanner;
+import org.drools.io.ResourceFactory;
+import org.springframework.beans.factory.FactoryBean;
+import org.springframework.beans.factory.InitializingBean;
+
+/**
+ * 
+ * @author Lucas Amador
+ *
+ */
+public class ResourceChangeScannerBeanFactory
+    implements
+    FactoryBean,
+    InitializingBean {
+
+    private String id;
+    private int interval;
+
+    public Object getObject() throws Exception {
+        return ResourceFactory.getResourceChangeScannerService();
+    }
+
+    public Class<ResourceChangeScanner> getObjectType() {
+        return ResourceChangeScanner.class;
+    }
+
+    public boolean isSingleton() {
+        return true;
+    }
+
+    public void afterPropertiesSet() throws Exception {
+    	ResourceFactory.getResourceChangeScannerService().setInterval( this.interval );
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+	public int getInterval() {
+		return interval;
+	}
+
+	public void setInterval(int interval) {
+		this.interval = interval;
+	}
+
+
+
+}

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/StatelessKnowledgeSessionBeanFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/StatelessKnowledgeSessionBeanFactory.java	2010-07-16 04:59:01 UTC (rev 33930)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/StatelessKnowledgeSessionBeanFactory.java	2010-07-16 05:27:41 UTC (rev 33931)
@@ -1,10 +1,20 @@
 package org.drools.container.spring.beans;
 
+import org.drools.agent.KnowledgeAgent;
 import org.drools.runtime.CommandExecutor;
 import org.drools.runtime.StatelessKnowledgeSession;
 
 public class StatelessKnowledgeSessionBeanFactory extends AbstractKnowledgeSessionBeanFactory {
     private StatelessKnowledgeSession ksession;
+    private KnowledgeAgent kagent;
+    
+    public void setKnowledgeAgent(KnowledgeAgent kagent) {
+    	this.kagent = kagent;
+    }
+    
+    public KnowledgeAgent getKnowledgeAgent() {
+    	return this.kagent;
+    }
 
     public Class<StatelessKnowledgeSession> getObjectType() {
         return StatelessKnowledgeSession.class;
@@ -17,6 +27,10 @@
 
     @Override
     protected void internalAfterPropertiesSet() {
-        ksession = getKbase().newStatelessKnowledgeSession();
+    	if ( this.kagent != null ) {
+    		ksession = this.kagent.newStatelessKnowledgeSession();
+    	} else {
+    		ksession = getKbase().newStatelessKnowledgeSession();
+    	}
     }
 }

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeAgentDefinitionParser.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeAgentDefinitionParser.java	2010-07-16 04:59:01 UTC (rev 33930)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeAgentDefinitionParser.java	2010-07-16 05:27:41 UTC (rev 33931)
@@ -4,6 +4,10 @@
 
 import org.drools.container.spring.beans.ExecutionNodeBeanFactory;
 import org.drools.container.spring.beans.KnowledgeAgentBeanFactory;
+import org.drools.container.spring.beans.StatelessKnowledgeSessionBeanFactory;
+import org.springframework.beans.PropertyValue;
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.beans.factory.config.RuntimeBeanReference;
 import org.springframework.beans.factory.support.AbstractBeanDefinition;
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.support.ManagedList;
@@ -50,6 +54,18 @@
             factory.addPropertyValue( "resources",
                                       resources );
         }        
+        
+        // inject the kagent into any stateless sessions
+        for ( String beanName : parserContext.getRegistry().getBeanDefinitionNames() ) {
+        	BeanDefinition def = parserContext.getRegistry().getBeanDefinition(beanName);
+        	if ( def.getBeanClassName().equals( StatelessKnowledgeSessionBeanFactory.class.getName() ) ) {
+        		 PropertyValue pvalue = def.getPropertyValues().getPropertyValue( "kbase" );
+        		 RuntimeBeanReference tbf = ( RuntimeBeanReference ) pvalue.getValue();        		 
+        		if ( kbase.equals( tbf.getBeanName() ) ) {
+        			def.getPropertyValues().addPropertyValue( "knowledgeAgent", new RuntimeBeanReference( id ) );
+        		}
+        	}       	
+        }
 
 
         return factory.getBeanDefinition();

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeSessionDefinitionParser.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeSessionDefinitionParser.java	2010-07-16 04:59:01 UTC (rev 33930)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeSessionDefinitionParser.java	2010-07-16 05:27:41 UTC (rev 33931)
@@ -11,9 +11,12 @@
 import org.drools.command.runtime.rule.FireAllRulesCommand;
 import org.drools.command.runtime.rule.FireUntilHaltCommand;
 import org.drools.command.runtime.rule.InsertObjectCommand;
+import org.drools.container.spring.beans.KnowledgeAgentBeanFactory;
+import org.drools.container.spring.beans.KnowledgeBaseBeanFactory;
 import org.drools.container.spring.beans.StatefulKnowledgeSessionBeanFactory;
 import org.drools.container.spring.beans.StatelessKnowledgeSessionBeanFactory;
 import org.drools.container.spring.beans.StatefulKnowledgeSessionBeanFactory.JpaConfiguration;
+import org.springframework.beans.PropertyValue;
 import org.springframework.beans.factory.config.BeanDefinition;
 import org.springframework.beans.factory.config.RuntimeBeanReference;
 import org.springframework.beans.factory.support.AbstractBeanDefinition;
@@ -42,6 +45,13 @@
 
     protected AbstractBeanDefinition parseInternal(Element element,
                                                    ParserContext parserContext) {
+    	
+        String id = element.getAttribute( "id" );
+        emptyAttributeCheck( element.getLocalName(),
+                             "id", 
+                             id);
+        
+        
         String kbase = element.getAttribute( KBASE_ATTRIBUTE );
         emptyAttributeCheck( element.getLocalName(),
                              KBASE_ATTRIBUTE,
@@ -68,9 +78,12 @@
         }
 
         String name = element.getAttribute( NAME_ATTRIBUTE );
-        if ( name != null && name.length() > 0 ) {
+        if ( StringUtils.hasText(name) ) {
             factory.addPropertyValue( "name",
                                       name );
+        } else {
+            factory.addPropertyValue( "name",
+            						  id );        	
         }
         
         Element persistenceElm = DomUtils.getChildElementByTagName(element, "jpa-persistence");
@@ -210,6 +223,18 @@
             }
             factory.addPropertyValue( "script", children );
         }        
+        
+        // find any kagent's for the current kbase and assign
+        for ( String beanName : parserContext.getRegistry().getBeanDefinitionNames() ) {
+        	BeanDefinition def = parserContext.getRegistry().getBeanDefinition(beanName);
+        	if ( def.getBeanClassName().equals( KnowledgeAgentBeanFactory.class.getName() ) ) {        		        		
+        		 PropertyValue pvalue = def.getPropertyValues().getPropertyValue( "kbase" );
+        		 RuntimeBeanReference tbf = ( RuntimeBeanReference ) pvalue.getValue();        		 
+        		if ( kbase.equals( tbf.getBeanName() ) ) {
+        			factory.addPropertyValue( "knowledgeAgent", new RuntimeBeanReference( beanName ) );
+        		}
+        	}       	
+        }        
 
         return factory.getBeanDefinition();
     }

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/ResourceChangeScannerDefinitionParser.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/ResourceChangeScannerDefinitionParser.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/ResourceChangeScannerDefinitionParser.java	2010-07-16 05:27:41 UTC (rev 33931)
@@ -0,0 +1,31 @@
+package org.drools.container.spring.namespace;
+
+import org.drools.container.spring.beans.ConnectionBeanFactory;
+import org.drools.container.spring.beans.ResourceChangeScannerBeanFactory;
+import org.springframework.beans.factory.support.AbstractBeanDefinition;
+import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
+import org.springframework.beans.factory.xml.ParserContext;
+import org.w3c.dom.Element;
+
+/**
+ * 
+ * @author Lucas Amador
+ *
+ */
+public class ResourceChangeScannerDefinitionParser extends AbstractBeanDefinitionParser {
+
+    private static final String INTERVAL = "interval";
+
+    protected AbstractBeanDefinition parseInternal(Element element,
+                                                   ParserContext parserContext) {
+
+        BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition( ResourceChangeScannerBeanFactory.class );
+
+        factory.addPropertyValue( INTERVAL,
+        						  element.getAttribute( INTERVAL ) );
+
+        return factory.getBeanDefinition();
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/SpringDroolsHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/SpringDroolsHandler.java	2010-07-16 04:59:01 UTC (rev 33930)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/SpringDroolsHandler.java	2010-07-16 05:27:41 UTC (rev 33931)
@@ -12,6 +12,9 @@
         registerBeanDefinitionParser( "resource-ref",
                                       new ResourceRefDefinitionParser() );
 
+        registerBeanDefinitionParser( "resource-change-scanner",
+                					  new ResourceChangeScannerDefinitionParser() );        
+
         registerBeanDefinitionParser( "model",
                                       new ResourceDefinitionParser() );
 

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring.xsd
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring.xsd	2010-07-16 04:59:01 UTC (rev 33930)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring.xsd	2010-07-16 05:27:41 UTC (rev 33931)
@@ -7,18 +7,25 @@
 	
 	<xsd:element name="connection">
 		<xsd:complexType>
-			<xsd:attribute name="id" use="optional" type="xsd:ID"/>
+			<xsd:attribute name="id" use="required" type="xsd:ID"/>
 			<xsd:attribute name="type" use="required" type="connectionTypeEnum"/>
 		</xsd:complexType>
 	</xsd:element>
 
 	<xsd:element name="execution-node">
 		<xsd:complexType>
-			<xsd:attribute name="id" use="optional" type="xsd:ID"/>
+			<xsd:attribute name="id" use="required" type="xsd:ID"/>
 			<xsd:attribute name="connection" use="required" type="xsd:string"/>
 		</xsd:complexType>
 	</xsd:element>	
 	
+	<xsd:element name="resource-change-scanner">
+		<xsd:complexType>
+			<xsd:attribute name="id" use="required" type="xsd:ID"/>
+			<xsd:attribute name="interval" use="optional" type="xsd:integer"/>
+		</xsd:complexType>
+	</xsd:element>	
+	
 	<xsd:element name="resource">
 		<xsd:complexType>
 			<xsd:complexContent>
@@ -47,8 +54,8 @@
 				<xsd:element name="resource-ref" type="resourceRefType"/>
 			</xsd:choice>
 					
-			<xsd:attribute name="id" use="optional" type="xsd:ID"/>
-			<xsd:attribute name="kbase" use="optional" type="xsd:string"/>
+			<xsd:attribute name="id" use="required" type="xsd:ID"/>
+			<xsd:attribute name="kbase" use="required" type="xsd:string"/>
 			<xsd:attribute name="new-instance" use="optional" type="xsd:boolean"/>
 		</xsd:complexType>
 	</xsd:element>		
@@ -71,7 +78,7 @@
 				
 			<xsd:attribute name="type" use="required" type="knowledgeSessionTypeEnum"/>
 			<xsd:attribute name="kbase" use="required" type="xsd:string"/>
-			<xsd:attribute name="id" use="optional" type="xsd:ID"/>
+			<xsd:attribute name="id" use="required" type="xsd:ID"/>
 			<xsd:attribute name="node" use="optional" type="xsd:string"/>
 			<xsd:attribute name="name" use="optional" type="xsd:string"/>
 		</xsd:complexType>

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/SpringDroolsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/SpringDroolsTest.java	2010-07-16 04:59:01 UTC (rev 33930)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/SpringDroolsTest.java	2010-07-16 05:27:41 UTC (rev 33931)
@@ -12,9 +12,17 @@
 import org.apache.log4j.lf5.util.StreamUtils;
 import org.drools.KnowledgeBase;
 import org.drools.Person;
+import org.drools.agent.KnowledgeAgent;
+import org.drools.agent.impl.KnowledgeAgentImpl;
 import org.drools.builder.DirectoryLookupFactoryService;
 import org.drools.core.util.FileManager;
 import org.drools.grid.ExecutionNode;
+import org.drools.impl.KnowledgeBaseImpl;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.impl.StatelessKnowledgeSessionImpl;
+import org.drools.io.ResourceChangeScanner;
+import org.drools.io.ResourceFactory;
+import org.drools.io.impl.ResourceChangeScannerImpl;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.StatelessKnowledgeSession;
 import org.drools.server.KnowledgeService;
@@ -80,45 +88,39 @@
                       list.size() );
     }
     
-    public void testAgents() throws Exception {
-        URL url = getClass().getResource( "testSpring.drl" );
-        File file = new File( url.getFile() );
-//        File dir = new File( file, "temp" );
-//        dir.mkdirs()
-        File dir = new File( file.getParentFile(), "temp/drl" );
-        dir.mkdirs();
+    public void testAgents() throws Exception {        
+        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "org/drools/container/spring/kagents-beans.xml" );
         
-        File drlFile = new File( dir, "testSpring.drl");
-        System.out.println( drlFile );
-        drlFile.createNewFile();
+        ResourceChangeScannerImpl scanner = ( ResourceChangeScannerImpl ) ResourceFactory.getResourceChangeScannerService();
+        assertEquals( 5, scanner.getInterval() );
         
+        KnowledgeBaseImpl kbase1 = ( KnowledgeBaseImpl ) context.getBean( "kbase1" );
+        KnowledgeBaseImpl kbase2 = ( KnowledgeBaseImpl ) context.getBean( "kbase2" );
         
-        StreamUtils.copy( url.openStream(), new FileOutputStream( drlFile ) );
-        System.out.println( url );
-         assertTrue( drlFile.exists() );
-//        
-//        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "org/drools/container/spring/beans.xml" );
-//
-//        List<String> list = new ArrayList<String>();
-//        StatelessKnowledgeSession kstateless = (StatelessKnowledgeSession) context.getBean( "ksession1" );
-//        kstateless.setGlobal( "list",
-//                              list );
-//        kstateless.execute( new Person( "Darth",
-//                                        "Cheddar",
-//                                        50 ) );
-//        assertEquals( 2,
-//                      list.size() );
-//
-//        list = new ArrayList<String>();
-//        StatefulKnowledgeSession kstateful = ((StatefulKnowledgeSession) context.getBean( "ksession2" ));
-//        kstateful.setGlobal( "list",
-//                             list );
-//        kstateful.insert( new Person( "Darth",
-//                                      "Cheddar",
-//                                      50 ) );
-//        kstateful.fireAllRules();
-//        assertEquals( 2,
-//                      list.size() );
+        KnowledgeAgentImpl kagent1 = ( KnowledgeAgentImpl ) context.getBean( "kagent1" );
+        assertSame( kagent1.getKnowledgeBase(), kbase1 );
+        assertEquals( 0, kagent1.getResourceDirectories().size() );
+        assertFalse( kagent1.isNewInstance() );
+        
+        KnowledgeAgentImpl kagent2 = ( KnowledgeAgentImpl ) context.getBean( "kagent2" );
+        assertSame( kagent2.getKnowledgeBase(), kbase2 );
+        assertEquals( 1, kagent2.getResourceDirectories().size() );
+        assertFalse( kagent2.isNewInstance() );
+        
+        KnowledgeAgentImpl kagent3 = ( KnowledgeAgentImpl ) context.getBean( "kagent3" );
+        assertTrue( kagent3.isNewInstance() );
+        
+        StatelessKnowledgeSessionImpl ksession1 = (StatelessKnowledgeSessionImpl)  context.getBean( "ksession1" );
+        assertSame( kbase1.getRuleBase(), ksession1.getRuleBase() );
+        assertSame( kagent1, ksession1.getKnowledgeAgent() );
+        
+        StatefulKnowledgeSessionImpl ksession2 = (StatefulKnowledgeSessionImpl)  context.getBean( "ksession2" );
+        assertSame( kbase1.getRuleBase(), ksession2.getRuleBase() );
+        
+        StatelessKnowledgeSessionImpl ksession3 = (StatelessKnowledgeSessionImpl)  context.getBean( "ksession3" );
+        assertSame( kagent2, ksession3.getKnowledgeAgent() );
+        assertSame( kbase2.getRuleBase(), ksession3.getRuleBase() );
+
     }    
 
     public void testNode() {

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/drl/testSpring.drl
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/drl/testSpring.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/drl/testSpring.drl	2010-07-16 05:27:41 UTC (rev 33931)
@@ -0,0 +1,12 @@
+package  org.drools.springframework
+
+import org.drools.Person
+
+global java.util.List list;
+
+rule "rule 1"
+when
+    $p : Person();
+then
+    list.add( $p );
+end
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/kagents-beans.xml
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/kagents-beans.xml	2010-07-16 04:59:01 UTC (rev 33930)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/kagents-beans.xml	2010-07-16 05:27:41 UTC (rev 33931)
@@ -3,36 +3,39 @@
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:drools="http://drools.org/schema/drools-spring"
        xmlns:drools-service="http://drools.org/schema/drools-service-spring"       
-       xmlns:camel="http://camel.apache.org/schema/spring"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                            http://drools.org/schema/drools-spring http://drools.org/schema/drools-spring.xsd
                            http://drools.org/schema/drools-service-spring http://drools.org/schema/drools-service-spring.xsd
                            http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
 
-	<camelContext id="executionContext" xmlns="http://camel.apache.org/schema/spring" />
+	<drools:resource-change-scanner id="s1" interval="5" />
 	
 	<drools:connection id="connection1" type="local" />
 	
 	<drools:execution-node id="node1" connection="connection1" />
 	
+	<drools:ksession id="ksession1" type="stateless" kbase="kbase1"/>
+	
+	<drools:ksession id="ksession2" type="stateful"  kbase="kbase1"/>	
+	
 	<drools:kbase id="kbase1" node="node1">						
-		<drools:resource id="resource1" type="DRL" source="classpath:org/drools/container/spring/temp/drl/testSpring.drl"/>	
+		<drools:resource type="DRL" source="classpath:org/drools/container/spring/testSpring.drl"/>	
 	</drools:kbase>
 	
-	<drools:kagent id="kagent1" kbase="kbase1" new-instance="true" />
+	<drools:kbase id="kbase2" node="node1">							
+	</drools:kbase>	
+
+	<drools:kbase id="kbase3" node="node1">							
+	</drools:kbase>
 	
-	<drools:kagent id="kagent2" new-instance="true" >
-	    <drools:resource type="DRL" source="classpath:org/drools/container/spring/temp/drl"/>
+	<drools:kagent id="kagent1" kbase="kbase1" new-instance="false" />
+	
+	<drools:kagent id="kagent2" kbase="kbase2" new-instance="false">
+	    <drools:resource type="DRL" source="classpath:org/drools/container/spring/drl" />
 	</drools:kagent>
 	
+	<drools:kagent id="kagent3" kbase="kbase3" new-instance="true" />
 	
-	<drools-service:configuration id="service-conf-1" marshaller="XSTREAM" session="ksession1">
-		<drools-service:class>org.drools.model.Person</drools-service:class>
-	</drools-service:configuration>
-	
-	<drools-service:definition id="service" node="node1" camelContext="executionContext">
-		<drools-service:configuration marshaller="JAXB" session="ksession2" />
-		<drools-service:configuration-ref id="service-conf-1" />
-	</drools-service:definition>
+	<drools:ksession id="ksession3" type="stateless" kbase="kbase2"/>	
 
 </beans>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/KnowledgeAgentImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/KnowledgeAgentImpl.java	2010-07-16 04:59:01 UTC (rev 33930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/KnowledgeAgentImpl.java	2010-07-16 05:27:41 UTC (rev 33931)
@@ -137,7 +137,15 @@
     public void setSystemEventListener(SystemEventListener listener) {
         this.listener = listener;
     }
+    
+    public Set<Resource> getResourceDirectories() {
+    	return this.resourceDirectories;
+    }
 
+    public boolean isNewInstance() {
+        return this.newInstance;
+    }
+    
     public void applyChangeSet(Resource resource) {
         applyChangeSet(getChangeSet(resource));
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java	2010-07-16 04:59:01 UTC (rev 33930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java	2010-07-16 05:27:41 UTC (rev 33931)
@@ -87,6 +87,10 @@
         }
         return this.ruleBase;
     }
+    
+    public KnowledgeAgent getKnowledgeAgent() {
+        return this.kagent;
+    }
 
     public StatefulKnowledgeSession newWorkingMemory() {
         if ( this.kagent != null ) {



More information about the jboss-svn-commits mailing list