[jboss-svn-commits] JBL Code SVN: r30428 - in labs/jbossrules/trunk: drools-api/src/main/java/org/drools/io and 8 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Dec 1 15:57:46 EST 2009


Author: salaboy21
Date: 2009-12-01 15:57:44 -0500 (Tue, 01 Dec 2009)
New Revision: 30428

Added:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/vsm/ServiceRegistry.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/AbstractKnowledgeSessionBeanFactory.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/DroolsResourceAdapter.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeBaseBeanFactory.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/ResourceBeanFactory.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/StatefulKnowledgeSessionBeanFactory.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/
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeBaseDefinitionParser.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/ResourceDefinitionParser.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/ServiceManagerDefinitionParser.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/SpringDroolsHandler.java
Removed:
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/KnowledgeBaseDefinitionParser.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/KnowledgeSessionDefinitionParser.java
   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/SpringDroolsFactory.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/SpringDroolsHandler.java
Modified:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/ResourceType.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/ResourceFactory.java
   labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/META-INF/spring.handlers
   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 Spring Bean Factories to build drools sessions kbase and service manager
            -  Added Spring name space configuration using the bean factories

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/ResourceType.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/ResourceType.java	2009-12-01 18:59:09 UTC (rev 30427)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/ResourceType.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -100,6 +100,19 @@
         return resourceName != null && resourceName.endsWith( "."+defaultExtension );
     }
 
+    public String getDefaultExtension() {
+        return defaultExtension;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+
     public String toString() {
         return "ResourceType = '" + this.description + "'";
     }

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/ResourceFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/ResourceFactory.java	2009-12-01 18:59:09 UTC (rev 30427)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/io/ResourceFactory.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -42,7 +42,7 @@
      * 
      * @return
      */
-    public static ResourceChangeScanner getResourceChangeScannerService() {
+     public static ResourceChangeScanner getResourceChangeScannerService() {
         return getResourceProvider().getResourceChangeScannerService();
     }
 

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/vsm/ServiceRegistry.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/vsm/ServiceRegistry.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/vsm/ServiceRegistry.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -0,0 +1,34 @@
+/*
+ *  Copyright 2009 salaboy.
+ * 
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ * 
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *  under the License.
+ */
+
+package org.drools.vsm;
+
+import org.drools.runtime.CommandExecutor;
+
+/**
+ *
+ * @author salaboy
+ */
+public interface ServiceRegistry {
+    public enum ServiceType {SERVERID, NODEID, KSESSION}
+
+    void register(String identifier,
+                  CommandExecutor executor);
+
+    CommandExecutor lookup(String identifer);
+
+}

Deleted: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/KnowledgeBaseDefinitionParser.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/KnowledgeBaseDefinitionParser.java	2009-12-01 18:59:09 UTC (rev 30427)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/KnowledgeBaseDefinitionParser.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -1,107 +0,0 @@
-package org.drools.container.spring;
-
-import java.util.ArrayList;
-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.xml.ExtensibleXmlParser;
-import org.springframework.beans.factory.config.ConstructorArgumentValues;
-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.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 KnowledgeBaseDefinitionParser extends AbstractSingleBeanDefinitionParser  {
-    protected Class getBeanClass(Element element) {
-        return KnowledgeBase.class;
-     }
-
-     protected void doParse(Element element, BeanDefinitionBuilder bean) {         
-         bean.getRawBeanDefinition().setBeanClassName( "org.drools.container.spring.SpringDroolsFactory" );
-         bean.getRawBeanDefinition().setFactoryMethodName( "buildKnowledgeBase" );     
-         
-         List<Resource> resources = new ArrayList<Resource>();
-         
-         NodeList resourcesList = element.getChildNodes();
-         for ( int i = 0, resourcesListLength = resourcesList.getLength(); i < resourcesListLength; i++ ) {
-             Node resourceNode = resourcesList.item( i );
-             if ( resourceNode.getNodeType() == Node.ELEMENT_NODE ) {
-                 Element resourceElement = ( Element ) resourceNode;
-                 String source = resourceElement.getAttribute( "source" );
-                 String type = resourceElement.getAttribute( "type" );
-                 
-                 emptyAttributeCheck( "resource",
-                                      "source",
-                                      source );
-                 
-                 emptyAttributeCheck( "resource",
-                                      "type",
-                                      type );        
-                 InternalResource resource = null;                
-                 
-                 if ( source.trim().startsWith( "classpath:" ) ) {
-                     resource = new ClassPathResource( source.substring( source.indexOf( ':' ) + 1 ), ClassPathResource.class.getClassLoader() );
-                 } else {
-                     resource = new UrlResource( source );
-                 }
-                 
-                 resource.setResourceType( ResourceType.getResourceType( type ) );
-                 
-                 NodeList configurationList = resourceElement.getChildNodes();
-                 for ( int j = 0, configurationListLength = configurationList.getLength(); j < configurationListLength; j++ ) {
-                     Node configurationNode = configurationList.item( j );
-                     if ( configurationNode.getNodeType() == Node.ELEMENT_NODE ) {
-                         Element configurationElement = ( Element ) configurationNode;
-                         if ( "decisiontable-conf".equals( configurationElement.getLocalName() ) ) {
-                             String inputType = configurationElement.getAttribute( "input-type" );
-                             String worksheetName = configurationElement.getAttribute( "worksheet-name" );
-                             
-                             DecisionTableConfigurationImpl dtableConf = new DecisionTableConfigurationImpl();
-                             dtableConf.setInputType( DecisionTableInputType.valueOf( inputType ) );
-                             dtableConf.setWorksheetName( worksheetName );
-                             resource.setConfiguration( dtableConf );
-                         }      
-                     }
-                 }
-                 
-                 resources.add( resource );
-             }
-         }
-         
-         ConstructorArgumentValues values = new ConstructorArgumentValues();
-         values.addGenericArgumentValue( resources );
-         
-         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" );
-//    }
-
-}

Deleted: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/KnowledgeSessionDefinitionParser.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/KnowledgeSessionDefinitionParser.java	2009-12-01 18:59:09 UTC (rev 30427)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/KnowledgeSessionDefinitionParser.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -1,51 +0,0 @@
-package org.drools.container.spring;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.drools.KnowledgeBase;
-import org.drools.builder.ResourceType;
-import org.drools.io.InternalResource;
-import org.drools.io.Resource;
-import org.drools.io.impl.ClassPathResource;
-import org.drools.io.impl.UrlResource;
-import org.drools.runtime.CommandExecutor;
-import org.springframework.beans.factory.config.ConstructorArgumentValues;
-import org.springframework.beans.factory.support.BeanDefinitionBuilder;
-import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-public class KnowledgeSessionDefinitionParser extends AbstractSingleBeanDefinitionParser {
-    protected Class getBeanClass(Element element) {
-        return CommandExecutor.class;
-    }
-
-    protected void doParse(Element element,
-                           BeanDefinitionBuilder bean) {
-        String kbase = element.getAttribute( "kbase" );
-        String sessionType = element.getAttribute( "type" );
-        
-        bean.getRawBeanDefinition().setBeanClassName( "org.drools.container.spring.SpringDroolsFactory" );
-        
-        if ( "stateful".equals( sessionType ) ) {
-            bean.getRawBeanDefinition().setFactoryMethodName( "newStatefulKnowledgeSession" );
-        } else if ( "stateless".equals( sessionType ) ) {
-            bean.getRawBeanDefinition().setFactoryMethodName( "newStatelessKnowledgeSession" );
-        } else {
-            
-        }
-
-        bean.addConstructorArgReference( kbase );
-    }
-
-    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" );
-        }
-    }
-
-}

Deleted: 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	2009-12-01 18:59:09 UTC (rev 30427)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/ServiceManagerDefinitionParser.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -1,89 +0,0 @@
-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" );
-//    }
-
-}

Deleted: 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-12-01 18:59:09 UTC (rev 30427)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/SpringDroolsFactory.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -1,56 +0,0 @@
-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;
-import org.drools.builder.KnowledgeBuilder;
-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) {        
-        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        for ( Resource resource : resources ) {            
-            if ( ((InternalResource)resource).getConfiguration() == null ) {
-                kbuilder.add( resource, ((InternalResource)resource).getResourceType() );                
-            } else {
-                kbuilder.add( resource, ((InternalResource)resource).getResourceType(), ((InternalResource)resource).getConfiguration() );                
-            }
-                        
-        }
-        
-        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-        
-        return kbase;
-    }
-    
-    private static StatefulKnowledgeSession newStatefulKnowledgeSession(KnowledgeBase kbase) {
-        return kbase.newStatefulKnowledgeSession();
-    }
-    
-    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; 
-    }      
-    
-    
-}

Deleted: 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-12-01 18:59:09 UTC (rev 30427)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/SpringDroolsHandler.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -1,16 +0,0 @@
-package org.drools.container.spring;
-
-import org.springframework.beans.factory.xml.NamespaceHandlerSupport;
-
-public class SpringDroolsHandler extends NamespaceHandlerSupport {
-
-    public void init() {
-        registerBeanDefinitionParser("kbase", new KnowledgeBaseDefinitionParser());
-        
-        registerBeanDefinitionParser("ksession", new KnowledgeSessionDefinitionParser());
-        
-        registerBeanDefinitionParser("serviceManager", new ServiceManagerDefinitionParser());
-
-    }
-
-}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/AbstractKnowledgeSessionBeanFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/AbstractKnowledgeSessionBeanFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/AbstractKnowledgeSessionBeanFactory.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -0,0 +1,81 @@
+package org.drools.container.spring.beans;
+
+import org.drools.KnowledgeBase;
+import org.drools.runtime.CommandExecutor;
+import org.drools.vsm.ServiceManager;
+import org.springframework.beans.factory.BeanNameAware;
+import org.springframework.beans.factory.FactoryBean;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.NamedBean;
+
+public abstract class AbstractKnowledgeSessionBeanFactory implements FactoryBean,
+		InitializingBean, BeanNameAware, NamedBean {
+
+	private ServiceManager serviceManager;
+	private KnowledgeBase kbase;
+	private String beanName;
+	private String name;
+
+	public AbstractKnowledgeSessionBeanFactory() {
+		super();
+	}
+
+	public Object getObject() throws Exception {
+		return getCommandExecutor();
+	}
+	
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public KnowledgeBase getKbase() {
+		return kbase;
+	}
+
+	public void setKbase(KnowledgeBase kbase) {
+		this.kbase = kbase;
+	}
+
+	public boolean isSingleton() {
+		return true;
+	}
+
+	public final void afterPropertiesSet() throws Exception {
+		if (kbase == null) {
+			throw new IllegalArgumentException("kbase property is mandatory");
+		}
+		if (name == null) {
+			name = beanName;
+		}
+		internalAfterPropertiesSet();
+		if (serviceManager != null) {
+			serviceManager.register(name, getCommandExecutor());
+		}
+	}
+
+	protected abstract CommandExecutor getCommandExecutor();
+
+	protected abstract void internalAfterPropertiesSet();
+
+	public ServiceManager getServiceManager() {
+		return serviceManager;
+	}
+
+	public void setServiceManager(ServiceManager serviceManager) {
+		this.serviceManager = serviceManager;
+	}
+
+	public void setBeanName(String name) {
+		this.beanName = name;
+
+	}
+
+	public String getBeanName() {
+		return beanName;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/DroolsResourceAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/DroolsResourceAdapter.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/DroolsResourceAdapter.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -0,0 +1,83 @@
+package org.drools.container.spring.beans;
+
+import org.drools.builder.ResourceConfiguration;
+import org.drools.builder.ResourceType;
+import org.drools.io.Resource;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.io.impl.UrlResource;
+import org.springframework.beans.factory.InitializingBean;
+
+public class DroolsResourceAdapter implements InitializingBean {
+	private Resource resource;
+	private ResourceType resourceType;
+	private ResourceConfiguration resourceConfiguration;
+	
+	public DroolsResourceAdapter() {
+		
+	}
+	
+	public DroolsResourceAdapter(String resource, ResourceType resourceType,
+			ResourceConfiguration resourceConfiguration) {
+		super();
+		setResource(resource);
+		this.resourceType = resourceType;
+		this.resourceConfiguration = resourceConfiguration;
+	}
+
+	public void setResource(String resource) {
+		if ( resource.trim().startsWith( "classpath:" ) ) {
+			this.resource = new ClassPathResource( 
+					resource.substring( resource.indexOf( ':' ) + 1 ), 
+						ClassPathResource.class.getClassLoader() );
+        } else {
+        	this.resource = new UrlResource( resource );
+        }
+	}
+	
+	public DroolsResourceAdapter(String resource, ResourceType resourceType) {
+		this(resource, resourceType, null);
+	}
+
+	public DroolsResourceAdapter(String resource) {
+		this(resource, ResourceType.DRL, null);
+	}
+
+	public DroolsResourceAdapter(String resource, String resourceType,
+			ResourceConfiguration resourceConfiguration) {
+		this(resource, ResourceType.getResourceType(resourceType), resourceConfiguration);
+	}
+
+	public DroolsResourceAdapter(String resource, String resourceType) {
+		this(resource, resourceType, null);
+	}
+	
+	public Resource getDroolsResource() {
+		return resource;
+	}
+
+	public ResourceType getResourceType() {
+		return resourceType;
+	}
+
+	public void setResourceType(ResourceType resourceType) {
+		this.resourceType = resourceType;
+	}
+
+	public ResourceConfiguration getResourceConfiguration() {
+		return resourceConfiguration;
+	}
+
+	public void setResourceConfiguration(ResourceConfiguration resourceConfiguration) {
+		this.resourceConfiguration = resourceConfiguration;
+	}
+
+	public void afterPropertiesSet() throws Exception {
+		if (resource == null) {
+			throw new IllegalArgumentException("resource property is mandatory");
+		}
+		if (resourceType == null) {
+			throw new IllegalArgumentException("resourceType property is mandatory");
+		}
+		
+	}
+}

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeBaseBeanFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeBaseBeanFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeBaseBeanFactory.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -0,0 +1,102 @@
+package org.drools.container.spring.beans;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.drools.KnowledgeBase;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderErrors;
+import org.drools.vsm.ServiceManager;
+import org.springframework.beans.factory.FactoryBean;
+import org.springframework.beans.factory.InitializingBean;
+
+public class KnowledgeBaseBeanFactory implements FactoryBean, InitializingBean {
+
+	private KnowledgeBase kbase;
+	private ServiceManager serviceManager;
+	//XXX currently the SessionManager only has one kbase.
+//	private String name;
+//	private String beanName;
+	private List<DroolsResourceAdapter> resources = Collections.emptyList();
+
+	public Object getObject() throws Exception {
+		return kbase;
+	}
+
+	public Class<? extends KnowledgeBase> getObjectType() {
+		return KnowledgeBase.class;
+	}
+
+	public boolean isSingleton() {
+		return true;
+	}
+
+	public void afterPropertiesSet() throws Exception {
+//		if (name == null) {
+//			setName(getBeanName());
+//		}
+		if (serviceManager == null) {
+			throw new IllegalArgumentException("serviceManager property is mandatory");
+		}
+		KnowledgeBuilder kbuilder = getServiceManager().getKnowledgeBuilderFactory().newKnowledgeBuilder();
+		for (DroolsResourceAdapter res: resources) {
+			if (res.getResourceConfiguration() == null) {
+				kbuilder.add(res.getDroolsResource(), res.getResourceType());
+			} else {
+				kbuilder.add(res.getDroolsResource(), res.getResourceType(), res.getResourceConfiguration());
+			}
+		}
+		
+		KnowledgeBuilderErrors errors = kbuilder.getErrors();
+		if (!errors.isEmpty() ) {
+			throw new RuntimeException(errors.toString());
+		}
+		
+//		kbase = getServiceManager().getKnowledgeBaseFactory().newKnowledgeBase(getName());
+		kbase = getServiceManager().getKnowledgeBaseFactory().newKnowledgeBase();
+		kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+		
+		///
+		
+	}
+
+	public KnowledgeBase getKbase() {
+		return kbase;
+	}
+
+	public void setKbase(KnowledgeBase kbase) {
+		this.kbase = kbase;
+	}
+
+//	public String getName() {
+//		return name;
+//	}
+//
+//	public void setName(String name) {
+//		this.name = name;
+//	}
+	
+	public ServiceManager getServiceManager() {
+		return serviceManager;
+	}
+
+//	public String getBeanName() {
+//		return beanName;
+//	}
+//
+//	public void setBeanName(String name) {
+//		beanName = name;
+//	}
+
+	public List<DroolsResourceAdapter> getResources() {
+		return resources;
+	}
+
+	public void setResources(List<DroolsResourceAdapter> resources) {
+		this.resources = resources;
+	}
+
+	public void setServiceManager(ServiceManager serviceManager) {
+		this.serviceManager = serviceManager;
+	}
+}

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/ResourceBeanFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/ResourceBeanFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/ResourceBeanFactory.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -0,0 +1,31 @@
+package org.drools.container.spring.beans;
+
+import org.drools.io.Resource;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.io.impl.UrlResource;
+import org.springframework.beans.factory.FactoryBean;
+
+public class ResourceBeanFactory implements FactoryBean {
+
+	private Resource resource;
+	
+	public ResourceBeanFactory(String source) {
+		if ( source.trim().startsWith( "classpath:" ) ) {
+            resource = new ClassPathResource( source.substring( source.indexOf( ':' ) + 1 ), ClassPathResource.class.getClassLoader() );
+        } else {
+            resource = new UrlResource( source );
+        }
+	}
+	
+	public Object getObject() throws Exception {
+		return resource;
+	}
+
+	public Class<Resource> getObjectType() {
+		return Resource.class;
+	}
+
+	public boolean isSingleton() {
+		return true;
+	}
+}

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/StatefulKnowledgeSessionBeanFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/StatefulKnowledgeSessionBeanFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/StatefulKnowledgeSessionBeanFactory.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -0,0 +1,22 @@
+package org.drools.container.spring.beans;
+
+import org.drools.runtime.CommandExecutor;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+public class StatefulKnowledgeSessionBeanFactory extends AbstractKnowledgeSessionBeanFactory  {
+	private StatefulKnowledgeSession ksession;
+
+	public Class<StatefulKnowledgeSession> getObjectType() {
+		return StatefulKnowledgeSession.class;
+	}
+
+	@Override
+	protected CommandExecutor getCommandExecutor() {
+		return ksession;
+	}
+
+	@Override
+	protected void internalAfterPropertiesSet() {
+		ksession = getKbase().newStatefulKnowledgeSession();
+	}
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/StatelessKnowledgeSessionBeanFactory.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -0,0 +1,22 @@
+package org.drools.container.spring.beans;
+
+import org.drools.runtime.CommandExecutor;
+import org.drools.runtime.StatelessKnowledgeSession;
+
+public class StatelessKnowledgeSessionBeanFactory extends AbstractKnowledgeSessionBeanFactory  {
+	private StatelessKnowledgeSession ksession;
+
+	public Class<StatelessKnowledgeSession> getObjectType() {
+		return StatelessKnowledgeSession.class;
+	}
+
+	@Override
+	protected CommandExecutor getCommandExecutor() {
+		return ksession;
+	}
+
+	@Override
+	protected void internalAfterPropertiesSet() {
+		ksession = getKbase().newStatelessKnowledgeSession();
+	}
+}

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeBaseDefinitionParser.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeBaseDefinitionParser.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeBaseDefinitionParser.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -0,0 +1,41 @@
+package org.drools.container.spring.namespace;
+
+import java.util.List;
+
+import org.drools.container.spring.beans.KnowledgeBaseBeanFactory;
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.beans.factory.support.AbstractBeanDefinition;
+import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.support.ManagedList;
+import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
+import org.springframework.beans.factory.xml.ParserContext;
+import org.springframework.util.xml.DomUtils;
+import org.w3c.dom.Element;
+
+public class KnowledgeBaseDefinitionParser extends AbstractBeanDefinitionParser {
+	
+	private static final String RESOUCES_ATTRIBUTE = "resources";
+	private static final String SERVICE_MANAGER_ATTRIBUTE = "serviceManager";
+
+	@SuppressWarnings("unchecked")
+	@Override
+	protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
+		BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(KnowledgeBaseBeanFactory.class);
+
+		String smRef = element.getAttribute(SERVICE_MANAGER_ATTRIBUTE);
+		factory.addPropertyReference(SERVICE_MANAGER_ATTRIBUTE, smRef);
+		List<Element> childElements = DomUtils.getChildElementsByTagName(element, "resource");
+		
+		if (childElements != null && !childElements.isEmpty()) {
+			ManagedList resources = new ManagedList(childElements.size());
+			for (Element childResource : childElements) {
+				BeanDefinition resourceDefinition = parserContext.getDelegate().parseCustomElement(childResource, factory.getBeanDefinition());
+				resources.add(resourceDefinition);
+			}
+			factory.addPropertyValue("resources", resources);
+		}
+		
+		return factory.getBeanDefinition();
+	}
+	
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeSessionDefinitionParser.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -0,0 +1,56 @@
+package org.drools.container.spring.namespace;
+
+import org.drools.container.spring.beans.StatefulKnowledgeSessionBeanFactory;
+import org.drools.container.spring.beans.StatelessKnowledgeSessionBeanFactory;
+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;
+
+public class KnowledgeSessionDefinitionParser extends AbstractBeanDefinitionParser {
+
+	private static final String NAME_ATTRIBUTE = "name";
+	private static final String SERVICE_MANAGER_ATTRIBUTE = "serviceManager";
+	private static final String KBASE_ATTRIBUTE = "kbase";
+	private static final String TYPE_ATTRIBUTE = "type";
+
+	protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
+		String kbase = element.getAttribute(KBASE_ATTRIBUTE);
+		emptyAttributeCheck(element.getLocalName(), KBASE_ATTRIBUTE, kbase);
+
+		String sessionType = element.getAttribute(TYPE_ATTRIBUTE);
+		BeanDefinitionBuilder factory;
+
+		if ("stateful".equals(sessionType)) {
+			factory = BeanDefinitionBuilder.rootBeanDefinition(StatefulKnowledgeSessionBeanFactory.class);
+		} else if ("stateless".equals(sessionType)) {
+			factory = BeanDefinitionBuilder.rootBeanDefinition(StatelessKnowledgeSessionBeanFactory.class);
+		} else {
+			throw new IllegalArgumentException("Invalid value for " + TYPE_ATTRIBUTE + " attribute: " + sessionType);
+		}
+
+		factory.addPropertyReference("kbase", kbase);
+
+		String smRef = element.getAttribute(SERVICE_MANAGER_ATTRIBUTE);
+		if (smRef != null && smRef.length() > 0) {
+			factory.addPropertyReference("serviceManager", smRef);
+		}
+
+		String name = element.getAttribute(NAME_ATTRIBUTE);
+		if (name != null && name.length() > 0) {
+			factory.addPropertyValue("name", name);
+		}
+		
+		return factory.getBeanDefinition();
+	}
+
+	public void emptyAttributeCheck(final String element,
+			final String attributeName,
+			final String attribute) {
+		if (attribute == null || attribute.trim().length() == 0) {
+			throw new IllegalArgumentException("<" + element + "> requires a '" + attributeName + "' attribute");
+		}
+	}
+
+}

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/ResourceDefinitionParser.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/ResourceDefinitionParser.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/ResourceDefinitionParser.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -0,0 +1,67 @@
+package org.drools.container.spring.namespace;
+
+import java.util.List;
+
+import org.drools.builder.DecisionTableInputType;
+import org.drools.builder.ResourceType;
+import org.drools.builder.impl.DecisionTableConfigurationImpl;
+import org.drools.container.spring.beans.DroolsResourceAdapter;
+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.springframework.util.xml.DomUtils;
+import org.w3c.dom.Element;
+
+public class ResourceDefinitionParser extends AbstractBeanDefinitionParser {
+	
+	private static final String WORKSHEET_NAME_ATTRIBUTE = "worksheet-name";
+	private static final String INPUT_TYPE_ATTRIBUTE = "input-type";
+	private static final String TYPE_ATTRIBUTE = "type";
+	private static final String SOURCE_ATTRIBUTE = "source";
+
+	@SuppressWarnings("unchecked")
+	@Override
+	protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
+		BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(DroolsResourceAdapter.class);
+
+		String source = element.getAttribute(SOURCE_ATTRIBUTE);
+		emptyAttributeCheck(element.getLocalName(), SOURCE_ATTRIBUTE, source);
+		factory.addPropertyValue("resource", source);
+		
+		String type = element.getAttribute(TYPE_ATTRIBUTE);
+		//emptyAttributeCheck(element.getLocalName(), type, type);
+		factory.addPropertyValue("resourceType", 
+				type == null || type.length() == 0 ? 
+						ResourceType.DRL.getName() : 
+						type);
+		
+		List<Element> childElements = DomUtils.getChildElementsByTagName(element, "decisiontable-conf");
+		if (childElements != null && !childElements.isEmpty()) {
+			if (!ResourceType.DTABLE.getName().endsWith(type)) {
+				throw new IllegalArgumentException("Only Desicion Tables can have configuration");
+			}
+			Element conf = childElements.get(0);
+			DecisionTableConfigurationImpl dtableConf = new DecisionTableConfigurationImpl();
+			
+			String inputType = conf.getAttribute(INPUT_TYPE_ATTRIBUTE);
+			emptyAttributeCheck(conf.getLocalName(), INPUT_TYPE_ATTRIBUTE, inputType);
+			dtableConf.setInputType(DecisionTableInputType.valueOf(inputType));
+			
+			String worksheetName = conf.getAttribute(WORKSHEET_NAME_ATTRIBUTE);
+			emptyAttributeCheck(conf.getLocalName(), WORKSHEET_NAME_ATTRIBUTE, worksheetName);
+			dtableConf.setWorksheetName(worksheetName);
+			
+			factory.addPropertyValue("resourceConfiguration", dtableConf);
+		}
+		return factory.getBeanDefinition();
+	}
+	
+	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");
+		}
+	}
+}

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/ServiceManagerDefinitionParser.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/ServiceManagerDefinitionParser.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/ServiceManagerDefinitionParser.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -0,0 +1,81 @@
+package org.drools.container.spring.namespace;
+
+import org.drools.vsm.ServiceManager;
+import org.drools.vsm.local.ServiceManagerLocalClient;
+import org.springframework.beans.factory.config.ConstructorArgumentValues;
+import org.springframework.beans.factory.config.RuntimeBeanReference;
+import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.support.ManagedMap;
+import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class ServiceManagerDefinitionParser extends AbstractSingleBeanDefinitionParser  {
+    protected Class<?> getBeanClass(Element element) {
+        return ServiceManager.class;
+     }
+
+	@SuppressWarnings("unchecked")
+	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));
+				}
+			}
+		}
+		String implementationName = element.getAttribute("class");
+		Class<? extends ServiceManager> clazz;
+		ConstructorArgumentValues values = new ConstructorArgumentValues();
+		if (implementationName == null || implementationName.length() == 0) {
+			clazz = ServiceManagerLocalClient.class;
+		} else {
+			try {
+				clazz = (Class<? extends ServiceManager>) Class.forName(implementationName);
+			} catch (ClassNotFoundException e) {
+				throw new IllegalStateException(e);
+			}
+		}
+
+		values.addGenericArgumentValue(clazz);
+		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" );
+//    }
+
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/SpringDroolsHandler.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -0,0 +1,20 @@
+package org.drools.container.spring.namespace;
+
+import org.springframework.beans.factory.xml.NamespaceHandlerSupport;
+
+public class SpringDroolsHandler extends NamespaceHandlerSupport {
+
+    public void init() {
+    	//registerBeanDefinitionParser("serviceManager", new ServiceManagerDefinitionParser());
+    	
+    	registerBeanDefinitionParser("resource", new ResourceDefinitionParser());
+    	
+        registerBeanDefinitionParser("kbase", new KnowledgeBaseDefinitionParser());
+        
+        registerBeanDefinitionParser("ksession", new KnowledgeSessionDefinitionParser());
+        
+        
+
+    }
+
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/META-INF/spring.handlers
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/META-INF/spring.handlers	2009-12-01 18:59:09 UTC (rev 30427)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/META-INF/spring.handlers	2009-12-01 20:57:44 UTC (rev 30428)
@@ -1 +1 @@
-http\://drools.org/schema/drools-spring=org.drools.container.spring.SpringDroolsHandler
\ No newline at end of file
+http\://drools.org/schema/drools-spring=org.drools.container.spring.namespace.SpringDroolsHandler
\ 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-12-01 18:59:09 UTC (rev 30427)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/drools-spring.xsd	2009-12-01 20:57:44 UTC (rev 30428)
@@ -1,41 +1,77 @@
 <?xml version="1.0" encoding="UTF-8"?>
-
 <xsd:schema xmlns="http://drools.org/schema/drools-spring"
-	xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:beans="http://www.springframework.org/schema/beans"
+	xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 	targetNamespace="http://drools.org/schema/drools-spring"
-	elementFormDefault="qualified" attributeFormDefault="unqualified">
+	elementFormDefault="qualified" 
+	attributeFormDefault="unqualified">
 
+	<xsd:simpleType name="knowledgeSessionTypeEnum">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="stateful" />
+			<xsd:enumeration value="stateless" />
+		</xsd:restriction>
+	</xsd:simpleType>
+
+	<xsd:simpleType name="resourceTypeEnum">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="DRL" />
+			<xsd:enumeration value="XDRL" />
+			<xsd:enumeration value="DSL" />
+			<xsd:enumeration value="DSLR" />
+			<xsd:enumeration value="DRF" />
+			<xsd:enumeration value="DTABLE" />
+			<xsd:enumeration value="PKG" />
+			<xsd:enumeration value="BRL" />
+			<xsd:enumeration value="CHANGE_SET" />
+		</xsd:restriction>
+	</xsd:simpleType>
+
+	<xsd:complexType name="resourceType">
+		<xsd:sequence>
+			<xsd:element name="decisiontable-conf" minOccurs="0" maxOccurs="1">
+				<xsd:complexType>
+					<xsd:attribute name="input-type" use="required" />
+					<xsd:attribute name="worksheet-name " use="required" />
+				</xsd:complexType>
+			</xsd:element>
+		</xsd:sequence>
+		<xsd:attribute name="source" use="required" type="xsd:string"/>
+		<xsd:attribute name="type" use="required" type="resourceTypeEnum"/>
+	</xsd:complexType>
+
+	<xsd:element name="resource">
+		<xsd:complexType>
+			<xsd:complexContent>
+				<xsd:extension base="resourceType">
+					<xsd:attribute name="id" use="optional" type="xsd:ID"/>
+				</xsd:extension>
+			</xsd:complexContent>
+		</xsd:complexType>
+	</xsd:element>			
+
 	<xsd:element name="kbase">
 		<xsd:complexType>
 			<xsd:sequence>
-				<xsd:element name="resource" maxOccurs="unbounded">
-					<xsd:complexType>
-						<xsd:sequence>
-							<xsd:element name="decisiontable-conf" minOccurs="0" maxOccurs="1">
-								<xsd:complexType>
-									<xsd:attribute name="input-type" use="required" />
-									<xsd:attribute name="worksheet-name " use="required" />
-								</xsd:complexType>
-							</xsd:element>
-						</xsd:sequence>					
-						<xsd:attribute name="source" use="required" />
-						<xsd:attribute name="type" use="required" />
-					</xsd:complexType>
-				</xsd:element>
+				<xsd:element name="resource" type="resourceType" maxOccurs="unbounded"/>
 			</xsd:sequence>
-			<xsd:attribute name="id" use="required" />
+			<xsd:attribute name="id" use="optional" type="xsd:ID"/>
+			<xsd:attribute name="serviceManager" use="required" type="xsd:string"/>
 		</xsd:complexType>
 	</xsd:element>
 
 	<xsd:element name="ksession">
 		<xsd:complexType>
-			<xsd:attribute name="type" use="required" />
-			<xsd:attribute name="kbase" use="required" />
-			<xsd:attribute name="id" use="required" />
+			<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="serviceManager" use="optional" type="xsd:string"/>
+			<xsd:attribute name="name" use="optional" type="xsd:string"/>
 		</xsd:complexType>
 	</xsd:element>
 	
+	<!-- 
 	<xsd:element name="serviceManager">
+		
 		<xsd:complexType>
 			<xsd:sequence>
 				<xsd:element name="register" maxOccurs="unbounded">
@@ -46,7 +82,9 @@
 				</xsd:element>
 			</xsd:sequence>
 			<xsd:attribute name="id" use="required" />
+			<xsd:attribute name="class" default="org.drools.vsm.local.ServiceManagerLocalClient" use="optional" type="xsd:string"/>
 		</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-12-01 18:59:09 UTC (rev 30427)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/SpringDroolsTest.java	2009-12-01 20:57:44 UTC (rev 30428)
@@ -15,15 +15,15 @@
 	public void test1() throws Exception {		
 		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "org/drools/container/spring/beans.xml" );
 		
-		List list = new ArrayList();
+		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();
-		StatefulKnowledgeSession kstateful = ( StatefulKnowledgeSession ) ((StatefulKnowledgeSession)context.getBean( "ksession2" ));
+		list = new ArrayList<String>();
+		StatefulKnowledgeSession kstateful = ((StatefulKnowledgeSession)context.getBean( "ksession2" ));
 		kstateful.setGlobal( "list", list );
 		kstateful.insert( new Person( "Darth", "Cheddar", 50 ) );
 		kstateful.fireAllRules();	
@@ -35,14 +35,15 @@
         
         ServiceManager sm = (ServiceManager)context.getBean( "sm1" );
         
-        List list = new ArrayList();
+        List<String> list = new ArrayList<String>();
         StatelessKnowledgeSession kstateless = (StatelessKnowledgeSession)sm.lookup( "stateless1" );
+        assertNotNull("can't obtain session named: stateless1" , kstateless);
         kstateless.setGlobal( "list", list );
         kstateless.execute( new Person( "Darth", "Cheddar", 50 ) );
         assertEquals( 2, list.size() );
         
         
-        list = new ArrayList();
+        list = new ArrayList<String>();
         StatefulKnowledgeSession kstateful = ( StatefulKnowledgeSession ) sm.lookup( "ksession2" );
         kstateful.setGlobal( "list", list );
         kstateful.insert( new Person( "Darth", "Cheddar", 50 ) );

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-12-01 18:59:09 UTC (rev 30427)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans.xml	2009-12-01 20:57:44 UTC (rev 30428)
@@ -5,7 +5,23 @@
        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 drools-spring.xsd">
   
-  <drools:kbase id="kbase1" >
+<bean id="sm1" class="org.drools.vsm.local.ServiceManagerLocalClient" />
+
+<drools:kbase id="kbase1" serviceManager="sm1">
+	<drools:resource type="DRL" source="classpath:org/drools/container/spring/testSpring.drl"/>
+	<drools:resource source="classpath:org/drools/container/spring/IntegrationExampleTest.xls" type="DTABLE">
+		<drools:decisiontable-conf input-type="XLS" worksheet-name="Tables_2" />
+	</drools:resource>
+</drools:kbase>
+
+<drools:ksession id="ksession1" type="stateless" name="stateless1" 
+	kbase="kbase1" serviceManager="sm1"/>
+
+<drools:ksession id="ksession2" type="stateful" 
+	kbase="kbase1" serviceManager="sm1"/>
+	
+  
+  <!-- <drools:kbase id="kbase1" >
       <drools:resource source='classpath:org/drools/container/spring/testSpring.drl' type='DRL' />
 	  <drools:resource source='classpath:org/drools/container/spring/IntegrationExampleTest.xls' type="DTABLE">
 	      <drools:decisiontable-conf input-type="XLS" worksheet-name="Tables_2" />
@@ -20,4 +36,6 @@
       <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