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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Oct 23 00:08:16 EDT 2009


Author: mark.proctor at jboss.com
Date: 2009-10-23 00:08:12 -0400 (Fri, 23 Oct 2009)
New Revision: 29780

Added:
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/ServiceManagerDefinitionParser.java
Modified:
   labs/jbossrules/trunk/drools-container/drools-spring/.classpath
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/SpringDroolsFactory.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/SpringDroolsHandler.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/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/beans.xml
Log:
JBRULES-1434 Drools Spring
-Added support for ServiceManager

Modified: labs/jbossrules/trunk/drools-container/drools-spring/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/.classpath	2009-10-23 01:37:51 UTC (rev 29779)
+++ labs/jbossrules/trunk/drools-container/drools-spring/.classpath	2009-10-23 04:08:12 UTC (rev 29780)
@@ -31,5 +31,6 @@
 	<classpathentry combineaccessrules="false" kind="src" path="/drools-core"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/drools-decisiontables"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/drools-templates"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-vsm"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/ServiceManagerDefinitionParser.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/ServiceManagerDefinitionParser.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/ServiceManagerDefinitionParser.java	2009-10-23 04:08:12 UTC (rev 29780)
@@ -0,0 +1,89 @@
+package org.drools.container.spring;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.drools.KnowledgeBase;
+import org.drools.builder.DecisionTableInputType;
+import org.drools.builder.ResourceType;
+import org.drools.builder.impl.DecisionTableConfigurationImpl;
+import org.drools.io.InternalResource;
+import org.drools.io.Resource;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.io.impl.KnowledgeResource;
+import org.drools.io.impl.UrlResource;
+import org.drools.vsm.ServiceManager;
+import org.drools.xml.ExtensibleXmlParser;
+import org.springframework.beans.factory.config.ConstructorArgumentValues;
+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.ManagedMap;
+import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
+import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
+import org.springframework.beans.factory.xml.ParserContext;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+public class ServiceManagerDefinitionParser extends AbstractSingleBeanDefinitionParser  {
+    protected Class getBeanClass(Element element) {
+        return ServiceManager.class;
+     }
+
+     protected void doParse(Element element, BeanDefinitionBuilder bean) {         
+         bean.getRawBeanDefinition().setBeanClassName( "org.drools.container.spring.SpringDroolsFactory" );
+         bean.getRawBeanDefinition().setFactoryMethodName( "buildServiceManager" );     
+         
+//         List<Resource> resources = new ArrayList<Resource>();
+         
+         //Collection<RegistryEntry> registryEntries = new ArrayList<RegistryEntry>();
+         
+         ManagedMap map = new ManagedMap();
+         NodeList registryList = element.getChildNodes();
+         for ( int i = 0, registryListLength = registryList.getLength(); i < registryListLength; i++ ) {
+             Node resourceNode = registryList.item( i );
+             if ( resourceNode.getNodeType() == Node.ELEMENT_NODE ) {
+                 Element resourceElement = ( Element ) resourceNode;
+                 String name = resourceElement.getAttribute( "name" );
+                 String ref = resourceElement.getAttribute( "ref" );
+                 
+                 emptyAttributeCheck( "resource",
+                                      "ref",
+                                      ref );   
+                 
+                 if ( name == null || name.trim().length() == 0 ) {                     
+                     map.put(ref, new RuntimeBeanReference( ref ) );                     
+                 } else {
+                     map.put( name, new RuntimeBeanReference( ref ) );
+                 }
+             }
+                 
+         }
+         
+         ConstructorArgumentValues values = new ConstructorArgumentValues();
+         values.addGenericArgumentValue( map );
+         
+         bean.getRawBeanDefinition().setConstructorArgumentValues( values );
+     }
+     
+     public void emptyAttributeCheck(final String element,
+                                     final String attributeName,
+                                     final String attribute) {
+         if ( attribute == null || attribute.trim().equals( "" ) ) {
+             throw new IllegalArgumentException( "<" + element + "> requires a '" + attributeName + "' attribute" );
+         }
+     }     
+
+//    protected AbstractBeanDefinition parseInternal(Element elm,
+//                                                   ParserContext ctx) {
+//        System.out.println( elm.getAttribute( "value" ) );
+//        
+//        
+//        return elm.getAttribute( "value" );
+//    }
+
+}

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/SpringDroolsFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/SpringDroolsFactory.java	2009-10-23 01:37:51 UTC (rev 29779)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/SpringDroolsFactory.java	2009-10-23 04:08:12 UTC (rev 29780)
@@ -1,7 +1,10 @@
 package org.drools.container.spring;
 
 import java.io.IOException;
+import java.rmi.activation.ActivationGroupDesc.CommandEnvironment;
 import java.util.Collection;
+import java.util.Map;
+import java.util.Map.Entry;
 
 import org.drools.KnowledgeBase;
 import org.drools.KnowledgeBaseFactory;
@@ -9,8 +12,11 @@
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.io.InternalResource;
 import org.drools.io.Resource;
+import org.drools.runtime.CommandExecutor;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.StatelessKnowledgeSession;
+import org.drools.vsm.ServiceManager;
+import org.drools.vsm.local.ServiceManagerLocalClient;
 
 public class SpringDroolsFactory {
     private static KnowledgeBase buildKnowledgeBase(Collection<Resource> resources) {        
@@ -36,5 +42,15 @@
     
     private static StatelessKnowledgeSession newStatelessKnowledgeSession(KnowledgeBase kbase) {
         return kbase.newStatelessKnowledgeSession();
-    }    
+    }  
+    
+    private static ServiceManager buildServiceManager(Map<String, CommandExecutor> map) {
+        ServiceManagerLocalClient sm = new ServiceManagerLocalClient();
+        for ( Entry<String, CommandExecutor> entry : map.entrySet() ) {
+            sm.register( entry.getKey(), entry.getValue() );
+        }
+        return sm; 
+    }      
+    
+    
 }

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/SpringDroolsHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/SpringDroolsHandler.java	2009-10-23 01:37:51 UTC (rev 29779)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/SpringDroolsHandler.java	2009-10-23 04:08:12 UTC (rev 29780)
@@ -8,7 +8,9 @@
         registerBeanDefinitionParser("kbase", new KnowledgeBaseDefinitionParser());
         
         registerBeanDefinitionParser("ksession", new KnowledgeSessionDefinitionParser());
+        
+        registerBeanDefinitionParser("serviceManager", new ServiceManagerDefinitionParser());
 
     }
 
-}
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/drools-spring.xsd
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/drools-spring.xsd	2009-10-23 01:37:51 UTC (rev 29779)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/drools-spring.xsd	2009-10-23 04:08:12 UTC (rev 29780)
@@ -34,5 +34,19 @@
 			<xsd:attribute name="id" use="required" />
 		</xsd:complexType>
 	</xsd:element>
+	
+	<xsd:element name="serviceManager">
+		<xsd:complexType>
+			<xsd:sequence>
+				<xsd:element name="register" maxOccurs="unbounded">
+					<xsd:complexType>				
+						<xsd:attribute name="name" use="optional" />
+						<xsd:attribute name="ref" use="required" />
+					</xsd:complexType>
+				</xsd:element>
+			</xsd:sequence>
+			<xsd:attribute name="id" use="required" />
+		</xsd:complexType>
+	</xsd:element>	
 
 </xsd:schema>
\ No newline at end of file

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	2009-10-23 01:37:51 UTC (rev 29779)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/SpringDroolsTest.java	2009-10-23 04:08:12 UTC (rev 29780)
@@ -8,6 +8,7 @@
 import org.drools.Person;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.StatelessKnowledgeSession;
+import org.drools.vsm.ServiceManager;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 public class SpringDroolsTest extends TestCase {
@@ -28,4 +29,24 @@
 		kstateful.fireAllRules();	
 		assertEquals( 2, list.size() );
 	}
+	
+	public void test2() {
+        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "org/drools/container/spring/beans.xml" );
+        
+        ServiceManager sm = (ServiceManager)context.getBean( "sm1" );
+        
+        List list = new ArrayList();
+        StatelessKnowledgeSession kstateless = (StatelessKnowledgeSession)sm.lookup( "stateless1" );
+        kstateless.setGlobal( "list", list );
+        kstateless.execute( new Person( "Darth", "Cheddar", 50 ) );
+        assertEquals( 2, list.size() );
+        
+        
+        list = new ArrayList();
+        StatefulKnowledgeSession kstateful = ( StatefulKnowledgeSession ) sm.lookup( "ksession2" );
+        kstateful.setGlobal( "list", list );
+        kstateful.insert( new Person( "Darth", "Cheddar", 50 ) );
+        kstateful.fireAllRules();   
+        assertEquals( 2, list.size() );	    
+	}
 }

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans.xml
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans.xml	2009-10-23 01:37:51 UTC (rev 29779)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans.xml	2009-10-23 04:08:12 UTC (rev 29780)
@@ -15,4 +15,9 @@
   <drools:ksession id="ksession1" type="stateless" kbase="kbase1" />
 
   <drools:ksession id="ksession2" type="stateful"  kbase="kbase1" />
+  
+  <drools:serviceManager id="sm1">
+      <drools:register name="stateless1" ref="ksession1" />
+      <drools:register ref="ksession2" />
+  </drools:serviceManager>   
 </beans>
\ No newline at end of file



More information about the jboss-svn-commits mailing list