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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jul 16 06:25:49 EDT 2010


Author: mark.proctor at jboss.com
Date: 2010-07-16 06:25:48 -0400 (Fri, 16 Jul 2010)
New Revision: 33935

Added:
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/session-conf-beans.xml
Modified:
   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/KnowledgeBaseBeanFactory.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/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/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/beans.xml
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/beans.xml
   labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/beansVarPersistence.xml
   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/no-node-beans.xml
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java
Log:
JBRULES-1434 Drools Spring
-Various configurations now work for ksessions and kbases

Modified: 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	2010-07-16 10:10:10 UTC (rev 33934)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/AbstractKnowledgeSessionBeanFactory.java	2010-07-16 10:25:48 UTC (rev 33935)
@@ -1,12 +1,16 @@
 package org.drools.container.spring.beans;
 
 import java.util.List;
+import java.util.Map;
 
 import org.drools.KnowledgeBase;
+import org.drools.SessionConfiguration;
 import org.drools.builder.DirectoryLookupFactoryService;
 import org.drools.command.Command;
 import org.drools.grid.ExecutionNode;
 import org.drools.runtime.CommandExecutor;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.process.WorkItemHandler;
 import org.springframework.beans.factory.BeanNameAware;
 import org.springframework.beans.factory.FactoryBean;
 import org.springframework.beans.factory.InitializingBean;
@@ -20,6 +24,8 @@
     NamedBean {
 
     private ExecutionNode node;
+    private Map<String, WorkItemHandler> workItems;
+    private KnowledgeSessionConfiguration conf;
     private KnowledgeBase kbase;
     private String        beanName;
     private String        name;
@@ -34,6 +40,22 @@
         return getCommandExecutor();
     }
 
+    public Map<String, WorkItemHandler> getWorkItems() {
+        return workItems;
+    }
+
+    public void setWorkItems(Map<String, WorkItemHandler> workItems) {
+        this.workItems = workItems;
+    }
+
+    public KnowledgeSessionConfiguration getConf() {
+        return conf;
+    }
+
+    public void setConf(KnowledgeSessionConfiguration conf) {
+        this.conf = conf;
+    }
+
     public String getName() {
         return name;
     }

Modified: 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	2010-07-16 10:10:10 UTC (rev 33934)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/KnowledgeBaseBeanFactory.java	2010-07-16 10:25:48 UTC (rev 33935)
@@ -4,11 +4,14 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 import javax.xml.bind.util.JAXBResult;
 
 import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
 import org.drools.KnowledgeBaseFactoryService;
+import org.drools.RuleBaseConfiguration;
 import org.drools.builder.JaxbConfiguration;
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderErrors;
@@ -19,6 +22,7 @@
 import org.drools.grid.ExecutionNode;
 import org.drools.grid.local.LocalConnection;
 import org.drools.impl.KnowledgeBaseImpl;
+import org.drools.process.core.WorkDefinition;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.FactoryBean;
 import org.springframework.beans.factory.InitializingBean;
@@ -33,6 +37,9 @@
     FactoryBean,
     InitializingBean {
 
+    private KnowledgeBaseConfiguration  conf;
+    private Map<String, WorkDefinition> workDefinitions;
+    
     private KnowledgeBase               kbase;
     private ExecutionNode               node;
     private List<DroolsResourceAdapter> resources = Collections.emptyList();
@@ -53,8 +60,18 @@
         if ( node == null ) {
             node = new LocalConnection().getExecutionNode();
         }
+        
+        if ( this.conf != null && this.workDefinitions != null && !this.workDefinitions.isEmpty() ) {
+            Map<String, WorkDefinition> map = ((RuleBaseConfiguration) this.conf).getProcessWorkDefinitions();
+            map.putAll( this.workDefinitions );
+        }
+         
         KnowledgeBuilder kbuilder = node.get( KnowledgeBuilderFactoryService.class ).newKnowledgeBuilder();
-        kbase = node.get( KnowledgeBaseFactoryService.class ).newKnowledgeBase();
+        if ( this.conf != null ) {
+            kbase = node.get( KnowledgeBaseFactoryService.class ).newKnowledgeBase(conf);
+        } else {
+            kbase = node.get( KnowledgeBaseFactoryService.class ).newKnowledgeBase( );
+        }
  
         List<JaxbConfigurationImpl> xsds = new ArrayList<JaxbConfigurationImpl>();
         
@@ -87,7 +104,24 @@
         }
 
     }
+    
 
+    public Map<String, WorkDefinition> getWorkDefinitions() {
+        return workDefinitions;
+    }
+
+    public void setWorkDefinitions(Map<String, WorkDefinition> workDefinitions) {
+        this.workDefinitions = workDefinitions;
+    }
+
+    public KnowledgeBaseConfiguration getConf() {
+        return conf;
+    }
+
+    public void setConf(KnowledgeBaseConfiguration conf) {
+        this.conf = conf;
+    }
+
     public KnowledgeBase getKbase() {
         return kbase;
     }

Modified: 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	2010-07-16 10:10:10 UTC (rev 33934)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/StatefulKnowledgeSessionBeanFactory.java	2010-07-16 10:25:48 UTC (rev 33935)
@@ -6,14 +6,18 @@
 import javax.persistence.EntityManagerFactory;
 
 import org.drools.KnowledgeBaseFactory;
+import org.drools.RuleBaseConfiguration;
+import org.drools.SessionConfiguration;
 import org.drools.command.Command;
 import org.drools.persistence.jpa.JPAKnowledgeService;
 import org.drools.persistence.processinstance.VariablePersistenceStrategyFactory;
 import org.drools.persistence.processinstance.persisters.VariablePersister;
+import org.drools.process.core.WorkDefinition;
 import org.drools.runtime.CommandExecutor;
 import org.drools.runtime.Environment;
 import org.drools.runtime.EnvironmentName;
 import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.WorkItemHandler;
 import org.springframework.transaction.PlatformTransactionManager;
 
 public class StatefulKnowledgeSessionBeanFactory extends AbstractKnowledgeSessionBeanFactory {
@@ -40,6 +44,11 @@
 
     @Override
     protected void internalAfterPropertiesSet() {
+        if ( getConf() != null && getWorkItems() != null && !getWorkItems().isEmpty() ) {
+            Map<String, WorkItemHandler> map = ((SessionConfiguration) getConf()).getWorkItemHandlers();
+            map.putAll( getWorkItems() );
+        }
+        
         if ( jpaConfiguration != null ) {
             if ( !jpaConfiguration.getVariablePersisters().isEmpty() ) {
                 for ( Map.Entry<String, Class< ? extends VariablePersister>> entry : jpaConfiguration.getVariablePersisters().entrySet() ) {
@@ -53,18 +62,20 @@
                      jpaConfiguration.getEntityManagerFactory() );
             env.set( EnvironmentName.TRANSACTION_MANAGER,
                      jpaConfiguration.getPlatformTransactionManager() );
+            
+            
             if ( jpaConfiguration.getId() >= 0 ) {
                 ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( jpaConfiguration.getId(),
                                                                              getKbase(),
-                                                                             null,
+                                                                             getConf(),
                                                                              env );
             } else {
                 ksession = JPAKnowledgeService.newStatefulKnowledgeSession( getKbase(),
-                                                                            null,
+                                                                            getConf(),
                                                                             env );
             }
         } else {
-            ksession = getKbase().newStatefulKnowledgeSession();
+            ksession = getKbase().newStatefulKnowledgeSession( getConf(), null);
         }
         
         if ( getScript() != null && !getScript().isEmpty()) {

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 10:10:10 UTC (rev 33934)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/beans/StatelessKnowledgeSessionBeanFactory.java	2010-07-16 10:25:48 UTC (rev 33935)
@@ -1,8 +1,12 @@
 package org.drools.container.spring.beans;
 
+import java.util.Map;
+
+import org.drools.SessionConfiguration;
 import org.drools.agent.KnowledgeAgent;
 import org.drools.runtime.CommandExecutor;
 import org.drools.runtime.StatelessKnowledgeSession;
+import org.drools.runtime.process.WorkItemHandler;
 
 public class StatelessKnowledgeSessionBeanFactory extends AbstractKnowledgeSessionBeanFactory {
     private StatelessKnowledgeSession ksession;
@@ -27,10 +31,15 @@
 
     @Override
     protected void internalAfterPropertiesSet() {
+        if ( getConf() != null && getWorkItems() != null && !getWorkItems().isEmpty() ) {
+            Map<String, WorkItemHandler> map = ((SessionConfiguration) getConf()).getWorkItemHandlers();
+            map.putAll( getWorkItems() );
+        }
+        
     	if ( this.kagent != null ) {
-    		ksession = this.kagent.newStatelessKnowledgeSession();
+    		ksession = this.kagent.newStatelessKnowledgeSession( getConf() );
     	} else {
-    		ksession = getKbase().newStatelessKnowledgeSession();
+    		ksession = getKbase().newStatelessKnowledgeSession( getConf() );
     	}
     }
 }

Modified: 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	2010-07-16 10:10:10 UTC (rev 33934)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeBaseDefinitionParser.java	2010-07-16 10:25:48 UTC (rev 33935)
@@ -2,11 +2,16 @@
 
 import java.util.List;
 
+import org.drools.RuleBaseConfiguration;
+import org.drools.conf.EventProcessingOption;
 import org.drools.container.spring.beans.KnowledgeBaseBeanFactory;
+import org.drools.core.util.StringUtils;
 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;
+import org.springframework.beans.factory.support.ManagedMap;
 import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
 import org.springframework.beans.factory.xml.ParserContext;
 import org.springframework.util.xml.DomUtils;
@@ -14,22 +19,79 @@
 
 public class KnowledgeBaseDefinitionParser extends AbstractBeanDefinitionParser {
 
-    private static final String EXECUTION_NODE_ATTRIBUTE = "node";
+    private static final String EXECUTION_NODE_ATTRIBUTE         = "node";
 
+    private static final String ADVANCED_PROCESS_RULE_INTEGRATED = "advanced-process-rule-integration";
+
+    private static final String MULTITHREADS                     = "multithread";
+    private static final String MAX_THREADS                      = "max-threads";
+
+    private static final String MBEABS                           = "mbeans";
+
+    private static final String EVENT_PROCESSING_MODE            = "event-processing-mode";
+    
+    private static final String WORK_ITEM_DEFINITIONS            = "work-item-definitions";
+    
+    private static final String WORK_ITEM_DEFINITION            = "work-item-definition";
+
     @SuppressWarnings("unchecked")
     @Override
     protected AbstractBeanDefinition parseInternal(Element element,
                                                    ParserContext parserContext) {
         BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition( KnowledgeBaseBeanFactory.class );
+        
+        Element kbaseConf = DomUtils.getChildElementByTagName(element, "configuration");
+        if ( kbaseConf != null ) {
+            BeanDefinitionBuilder rbaseConfBuilder = BeanDefinitionBuilder.rootBeanDefinition( RuleBaseConfiguration.class );
+            Element e = DomUtils.getChildElementByTagName(kbaseConf, ADVANCED_PROCESS_RULE_INTEGRATED);
+            if ( e != null && !StringUtils.isEmpty( e.getAttribute( "enabled" ) )) {
+                rbaseConfBuilder.addPropertyValue( "advancedProcessRuleIntegration", Boolean.parseBoolean( e.getAttribute( "enabled" ) ) );
+            }
+            
+            e = DomUtils.getChildElementByTagName(kbaseConf, MULTITHREADS);
+            if ( e != null && !StringUtils.isEmpty( e.getAttribute( "enabled" ) )) {
+                rbaseConfBuilder.addPropertyValue( "multithreadEvaluation", Boolean.parseBoolean( e.getAttribute( "enabled" ) ));
+                if (  !StringUtils.isEmpty( e.getAttribute( MAX_THREADS )  ) ) {
+                    rbaseConfBuilder.addPropertyValue( "maxThreads" , Integer.parseInt( e.getAttribute( MAX_THREADS ) ) );                    
+                }
+            }    
+            
+            e = DomUtils.getChildElementByTagName(kbaseConf, MBEABS);
+            if ( e != null && !StringUtils.isEmpty( e.getAttribute( "enabled" ) )) {
+                rbaseConfBuilder.addPropertyValue( "MBeansEnabled", Boolean.parseBoolean( e.getAttribute( "enabled" ) ) );
+            }   
+            
+            e = DomUtils.getChildElementByTagName(kbaseConf, EVENT_PROCESSING_MODE);
+            if ( e != null && !StringUtils.isEmpty( e.getAttribute( "mode" ) )) {
+                rbaseConfBuilder.addPropertyValue( "eventProcessingMode", EventProcessingOption.valueOf( e.getAttribute( "mode" ) ) );
+            }                
+            
+            e = DomUtils.getChildElementByTagName(kbaseConf, WORK_ITEM_DEFINITIONS);
+            if ( e != null ) {
+                List<Element> children = DomUtils.getChildElementsByTagName( e, WORK_ITEM_DEFINITION );
+                if ( children != null && !children.isEmpty() ) {
+                    ManagedMap workDefs = new ManagedMap();
+                    for ( Element child : children ) {
+                        workDefs.put(  child.getAttribute( "name" ),
+                                       new RuntimeBeanReference( child.getAttribute( "ref" ) ) );
+                    }
+                    factory.addPropertyValue( "workDefinitions", workDefs );                    
+                }
+            }
+            
+            factory.addPropertyValue( "conf", rbaseConfBuilder.getBeanDefinition() );
+        }
 
         String nodeRef = element.getAttribute( EXECUTION_NODE_ATTRIBUTE );
         if ( nodeRef != null && nodeRef.length() > 0 ) {
             factory.addPropertyReference( EXECUTION_NODE_ATTRIBUTE,
                                           nodeRef );
         }
-        
-        ManagedList resources = getResources(element, parserContext, factory);
 
+        ManagedList resources = getResources( element,
+                                              parserContext,
+                                              factory );
+
         if ( resources != null ) {
             factory.addPropertyValue( "resources",
                                       resources );
@@ -38,33 +100,39 @@
         return factory.getBeanDefinition();
     }
 
-    public static ManagedList getResources(Element element, ParserContext parserContext, BeanDefinitionBuilder factory) {
-        List<Element> childElements = DomUtils.getChildElementsByTagName( element,
-                                                                          "resource" );
+    public static ManagedList getResources(Element element,
+                                           ParserContext parserContext,
+                                           BeanDefinitionBuilder factory) {
+        Element resourcesElm = DomUtils.getChildElementByTagName( element,
+                                                                  "resources" );
         ManagedList resources = null;
-        if ( childElements != null && !childElements.isEmpty() ) {
-            resources = new ManagedList();
-            for ( Element childResource : childElements ) {
-                BeanDefinition resourceDefinition = parserContext.getDelegate().parseCustomElement( childResource,
-                                                                                                    factory.getBeanDefinition() );
-                resources.add( resourceDefinition );
+
+        if ( resourcesElm != null ) {
+            List<Element> childElements = DomUtils.getChildElementsByTagName( resourcesElm,
+                                                                              "resource" );
+            if ( childElements != null && !childElements.isEmpty() ) {
+                resources = new ManagedList();
+                for ( Element childResource : childElements ) {
+                    BeanDefinition resourceDefinition = parserContext.getDelegate().parseCustomElement( childResource,
+                                                                                                        factory.getBeanDefinition() );
+                    resources.add( resourceDefinition );
+                }
             }
-        }
 
-        childElements = DomUtils.getChildElementsByTagName( element,
-                                                            "resource-ref" );
+            childElements = DomUtils.getChildElementsByTagName( resourcesElm,
+                                                                "resource-ref" );
 
-        if ( childElements != null && !childElements.isEmpty() ) {
-            if ( resources == null ) {
-                resources = new ManagedList( childElements.size() );
+            if ( childElements != null && !childElements.isEmpty() ) {
+                if ( resources == null ) {
+                    resources = new ManagedList( childElements.size() );
+                }
+                for ( Element childResource : childElements ) {
+                    BeanDefinition resourceDefinition = parserContext.getDelegate().parseCustomElement( childResource,
+                                                                                                        factory.getBeanDefinition() );
+                    resources.add( resourceDefinition );
+                }
             }
-            for ( Element childResource : childElements ) {
-                BeanDefinition resourceDefinition = parserContext.getDelegate().parseCustomElement( childResource,
-                                                                                                    factory.getBeanDefinition() );
-                resources.add( resourceDefinition );
-            }
         }
-        
         return resources;
     }
 

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 10:10:10 UTC (rev 33934)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/namespace/KnowledgeSessionDefinitionParser.java	2010-07-16 10:25:48 UTC (rev 33935)
@@ -4,6 +4,9 @@
 
 import java.util.List;
 
+import org.drools.ClockType;
+import org.drools.RuleBaseConfiguration;
+import org.drools.SessionConfiguration;
 import org.drools.command.CommandFactory;
 import org.drools.command.runtime.SetGlobalCommand;
 import org.drools.command.runtime.process.SignalEventCommand;
@@ -11,11 +14,13 @@
 import org.drools.command.runtime.rule.FireAllRulesCommand;
 import org.drools.command.runtime.rule.FireUntilHaltCommand;
 import org.drools.command.runtime.rule.InsertObjectCommand;
+import org.drools.conf.EventProcessingOption;
 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.drools.runtime.conf.ClockTypeOption;
 import org.springframework.beans.PropertyValue;
 import org.springframework.beans.factory.config.BeanDefinition;
 import org.springframework.beans.factory.config.RuntimeBeanReference;
@@ -43,6 +48,13 @@
     private static final String EXECUTION_NODE_ATTRIBUTE = "node";
     private static final String TYPE_ATTRIBUTE           = "type";
 
+    private static final String KEEP_RERENCE             = "keep-reference";
+    private static final String CLOCK_TYPE               = "clock-type";
+    
+    private static final String WORK_ITEMS               = "work-item-handlers";
+    
+    private static final String WORK_ITEM                = "work-item-handler";    
+    
     protected AbstractBeanDefinition parseInternal(Element element,
                                                    ParserContext parserContext) {
     	
@@ -86,45 +98,71 @@
             						  id );        	
         }
         
-        Element persistenceElm = DomUtils.getChildElementByTagName(element, "jpa-persistence");
-        if ( persistenceElm != null) {
-            BeanDefinitionBuilder beanBuilder = BeanDefinitionBuilder.genericBeanDefinition( JpaConfiguration.class );
-            
-            String loadId = persistenceElm.getAttribute( "load" );
-            if ( StringUtils.hasText( loadId ) ) {
-                beanBuilder.addPropertyValue( "id", Long.parseLong( loadId ) );
+        Element ksessionConf = DomUtils.getChildElementByTagName(element, "configuration");
+        if ( ksessionConf != null ) {
+            Element persistenceElm = DomUtils.getChildElementByTagName(ksessionConf, "jpa-persistence");
+            if ( persistenceElm != null) {
+                BeanDefinitionBuilder beanBuilder = BeanDefinitionBuilder.genericBeanDefinition( JpaConfiguration.class );
+                
+                String loadId = persistenceElm.getAttribute( "load" );
+                if ( StringUtils.hasText( loadId ) ) {
+                    beanBuilder.addPropertyValue( "id", Long.parseLong( loadId ) );
+                }
+                
+                Element tnxMng = DomUtils.getChildElementByTagName(persistenceElm, TX_MANAGER_ATTRIBUTE);
+                String ref = tnxMng.getAttribute( "ref" );
+                
+                beanBuilder.addPropertyReference( "platformTransactionManager", ref );
+                
+                Element emf = DomUtils.getChildElementByTagName(persistenceElm, EMF_ATTRIBUTE);
+                ref = emf.getAttribute( "ref" );
+                beanBuilder.addPropertyReference( "entityManagerFactory", ref ); 
+                
+                Element variablePersisters = DomUtils.getChildElementByTagName(persistenceElm, "variable-persisters");
+                if ( variablePersisters != null && variablePersisters.hasChildNodes() ) {
+                    List<Element> childPersisterElems = DomUtils.getChildElementsByTagName(variablePersisters, "persister");
+                    ManagedMap persistors = new ManagedMap( childPersisterElems.size() );
+                    for ( Element persisterElem : childPersisterElems) {
+                        String forClass = persisterElem.getAttribute( FORCLASS_ATTRIBUTE );
+                        String implementation = persisterElem.getAttribute( IMPLEMENTATION_ATTRIBUTE );
+                        if ( !StringUtils.hasText( forClass ) ) {                        
+                            throw new RuntimeException( "persister element must have valid for-class attribute" );
+                        }
+                        if ( !StringUtils.hasText( implementation ) ) {                        
+                            throw new RuntimeException( "persister element must have valid implementation attribute" );
+                        }                    
+                        persistors.put( forClass,
+                                        implementation );                    
+                    }
+                    beanBuilder.addPropertyValue( "variablePersisters", persistors );
+                }
+                
+                factory.addPropertyValue( "jpaConfiguration", beanBuilder.getBeanDefinition() );                                           
             }
+            BeanDefinitionBuilder rbaseConfBuilder = BeanDefinitionBuilder.rootBeanDefinition( SessionConfiguration.class );
+            Element e = DomUtils.getChildElementByTagName(ksessionConf, KEEP_RERENCE);
+            if ( e != null && StringUtils.hasText( e.getAttribute( "enabled" ) )) {
+                rbaseConfBuilder.addPropertyValue( "keepReference", Boolean.parseBoolean( e.getAttribute( "enabled" ) ) );
+            }   
             
-            Element tnxMng = DomUtils.getChildElementByTagName(persistenceElm, TX_MANAGER_ATTRIBUTE);
-            String ref = tnxMng.getAttribute( "ref" );
+            e = DomUtils.getChildElementByTagName(ksessionConf, CLOCK_TYPE);
+            if ( e != null && StringUtils.hasText( e.getAttribute( "type" ) )) {
+                rbaseConfBuilder.addPropertyValue( "clockType", ClockType.resolveClockType( e.getAttribute( "type" ) ) );
+            }                
+            factory.addPropertyValue( "conf", rbaseConfBuilder.getBeanDefinition() );   
             
-            beanBuilder.addPropertyReference( "platformTransactionManager", ref );
-            
-            Element emf = DomUtils.getChildElementByTagName(persistenceElm, EMF_ATTRIBUTE);
-            ref = emf.getAttribute( "ref" );
-            beanBuilder.addPropertyReference( "entityManagerFactory", ref ); 
-            
-            Element variablePersisters = DomUtils.getChildElementByTagName(persistenceElm, "variable-persisters");
-            if ( variablePersisters != null && variablePersisters.hasChildNodes() ) {
-                List<Element> childPersisterElems = DomUtils.getChildElementsByTagName(variablePersisters, "persister");
-                ManagedMap persistors = new ManagedMap( childPersisterElems.size() );
-                for ( Element persisterElem : childPersisterElems) {
-                    String forClass = persisterElem.getAttribute( FORCLASS_ATTRIBUTE );
-                    String implementation = persisterElem.getAttribute( IMPLEMENTATION_ATTRIBUTE );
-                    if ( !StringUtils.hasText( forClass ) ) {                        
-                        throw new RuntimeException( "persister element must have valid for-class attribute" );
+            e = DomUtils.getChildElementByTagName(ksessionConf, WORK_ITEMS);
+            if ( e != null ) {
+                List<Element> children = DomUtils.getChildElementsByTagName( e, WORK_ITEM );
+                if ( children != null && !children.isEmpty() ) {
+                    ManagedMap workDefs = new ManagedMap();
+                    for ( Element child : children ) {
+                        workDefs.put(  child.getAttribute( "name" ),
+                                       new RuntimeBeanReference( child.getAttribute( "ref" ) ) );
                     }
-                    if ( !StringUtils.hasText( implementation ) ) {                        
-                        throw new RuntimeException( "persister element must have valid implementation attribute" );
-                    }                    
-                    persistors.put( forClass,
-                                    implementation );                    
+                    factory.addPropertyValue( "workItems", workDefs );                    
                 }
-                beanBuilder.addPropertyValue( "variablePersisters", persistors );
-            }
-            
-            factory.addPropertyValue( "jpaConfiguration", beanBuilder.getBeanDefinition() );
-            
+            }            
         }
         
         Element script = DomUtils.getChildElementByTagName(element, "script");

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 10:10:10 UTC (rev 33934)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring.xsd	2010-07-16 10:25:48 UTC (rev 33935)
@@ -26,6 +26,15 @@
 		</xsd:complexType>
 	</xsd:element>	
 	
+	<xsd:element name="resources">
+		<xsd:complexType>
+			<xsd:choice  minOccurs="0" maxOccurs="unbounded">
+				<xsd:element ref="resource" />
+				<xsd:element ref="resource-ref" />
+			</xsd:choice>
+		</xsd:complexType>	
+	</xsd:element>
+	
 	<xsd:element name="resource">
 		<xsd:complexType>
 			<xsd:complexContent>
@@ -35,13 +44,58 @@
 			</xsd:complexContent>
 		</xsd:complexType>
 	</xsd:element>	
+	
+	<xsd:element name="resource-ref" type="resourceRefType" />
 
 	<xsd:element name="kbase">
 		<xsd:complexType>
-			<xsd:choice  minOccurs="0" maxOccurs="unbounded">
-				<xsd:element name="resource" type="resourceType"/>
-				<xsd:element name="resource-ref" type="resourceRefType"/>
-			</xsd:choice>
+		    <xsd:all minOccurs="0">
+			    <xsd:element ref="resources"  minOccurs="0" maxOccurs="1" />
+			    
+				<xsd:element name="configuration" minOccurs="0" maxOccurs="1">
+					<xsd:complexType>
+						<xsd:all minOccurs="0">
+	                        <xsd:element name="advanced-process-rule-integration" minOccurs="0">
+							    <xsd:complexType>
+							        <xsd:attribute name="enabled" type="xsd:boolean"/>
+							    </xsd:complexType>	                        
+	                        </xsd:element>
+	                        
+	                        <xsd:element name="multithread" minOccurs="0">
+							    <xsd:complexType>
+							        <xsd:attribute name="enabled" type="xsd:boolean"/>
+							        <xsd:attribute name="max-threads" type="xsd:positiveInteger"/>
+							    </xsd:complexType>	                        
+	                        </xsd:element>
+	                        	                        
+	                        <xsd:element name="mbeans" minOccurs="0">
+				                <xsd:complexType>
+							        <xsd:attribute name="enabled" type="xsd:boolean"/>
+							    </xsd:complexType>	                        
+	                        </xsd:element>	                        
+	                        
+	                        <xsd:element name="event-processing-mode" minOccurs="0">
+				                <xsd:complexType>
+							        <xsd:attribute name="mode" type="cloudModeEnum"/>
+							    </xsd:complexType>	                        
+	                        </xsd:element>	
+
+	                        <xsd:element name="work-item-definitions" minOccurs="0">
+				                <xsd:complexType>
+				                    <xsd:choice>
+				                	    <xsd:element name="work-item-definition" minOccurs="0" maxOccurs="unbounded">
+					                	    <xsd:complexType>
+					                	        <xsd:attribute name="name" use="required" type="xsd:string"/>
+					                	        <xsd:attribute name="ref" use="required" type="xsd:string"/>
+					                	    </xsd:complexType>
+				                	    </xsd:element>				                	    
+				                	</xsd:choice>
+							    </xsd:complexType>	                        
+	                        </xsd:element>	                        	                        
+						</xsd:all>
+					</xsd:complexType>				
+				</xsd:element>	
+			</xsd:all>
 			<xsd:attribute name="id" use="optional" type="xsd:ID"/>
 			<xsd:attribute name="node" use="optional" type="xsd:string"/>
 		</xsd:complexType>
@@ -49,11 +103,9 @@
 	
 	<xsd:element name="kagent">
 		<xsd:complexType>
-			<xsd:choice   minOccurs="0" maxOccurs="unbounded">
-				<xsd:element name="resource" type="resourceType"/>
-				<xsd:element name="resource-ref" type="resourceRefType"/>
-			</xsd:choice>
-					
+		    <xsd:all>
+			    <xsd:element ref="resources"  minOccurs="0" maxOccurs="1" />
+			</xsd:all>		
 			<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"/>
@@ -64,7 +116,7 @@
 
 	<xsd:element name="ksession">
 		<xsd:complexType>
-			<xsd:all>
+			<xsd:all minOccurs="0">
 				<xsd:element name="script" minOccurs="0" maxOccurs="1">
 					<xsd:complexType>
 						<xsd:sequence>
@@ -73,7 +125,39 @@
 					</xsd:complexType>				
 				</xsd:element>
 				
-				<xsd:element ref="persistence" minOccurs="0" maxOccurs="1" />				
+				<xsd:element name="configuration" minOccurs="0" maxOccurs="1">
+					<xsd:complexType>
+						<xsd:all minOccurs="0">
+	                        <xsd:element ref="persistence" minOccurs="0"/>
+	                        
+	                        <xsd:element name="keep-reference" minOccurs="0">
+				                <xsd:complexType>
+							        <xsd:attribute name="enabled" type="xsd:boolean"/>
+							    </xsd:complexType>	                        
+	                        </xsd:element>	                        
+	                        
+	                        <xsd:element name="clock-type" minOccurs="0">
+				                <xsd:complexType>
+							        <xsd:attribute name="type" type="clockTypeEnum"/>
+							    </xsd:complexType>	                        
+	                        </xsd:element>		
+	                        
+	                        <xsd:element name="work-item-handlers" minOccurs="0">
+				                <xsd:complexType>
+				                    <xsd:choice>
+				                	    <xsd:element name="work-item-handler" minOccurs="0" maxOccurs="unbounded">
+					                	    <xsd:complexType>
+					                	        <xsd:attribute name="name" use="required" type="xsd:string"/>
+					                	        <xsd:attribute name="ref" use="required" type="xsd:string"/>
+					                	    </xsd:complexType>
+				                	    </xsd:element>				                	    
+				                	</xsd:choice>
+							    </xsd:complexType>	                        
+	                        </xsd:element>		                                                
+						</xsd:all>
+					</xsd:complexType>				
+				</xsd:element>				
+								
 			</xsd:all>	
 				
 			<xsd:attribute name="type" use="required" type="knowledgeSessionTypeEnum"/>
@@ -124,6 +208,21 @@
 		</xsd:restriction>
 	</xsd:simpleType>	
 	
+	<xsd:simpleType name="cloudModeEnum">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="STREAM" />
+			<xsd:enumeration value="CLOUD" />
+		</xsd:restriction>
+	</xsd:simpleType>	
+	
+	<xsd:simpleType name="clockTypeEnum">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="REALTIME" />
+			<xsd:enumeration value="PSEUDO" />
+		</xsd:restriction>
+	</xsd:simpleType>		
+	
+	
 	<xsd:complexType name="resourceType">
 		<xsd:choice minOccurs="0" maxOccurs="1">
 			<xsd:element name="decisiontable-conf">

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 10:10:10 UTC (rev 33934)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/SpringDroolsTest.java	2010-07-16 10:25:48 UTC (rev 33935)
@@ -6,15 +6,21 @@
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 import junit.framework.TestCase;
 
 import org.apache.log4j.lf5.util.StreamUtils;
+import org.drools.ClockType;
 import org.drools.KnowledgeBase;
 import org.drools.Person;
+import org.drools.RuleBaseConfiguration;
+import org.drools.SessionConfiguration;
 import org.drools.agent.KnowledgeAgent;
 import org.drools.agent.impl.KnowledgeAgentImpl;
 import org.drools.builder.DirectoryLookupFactoryService;
+import org.drools.common.InternalRuleBase;
+import org.drools.conf.EventProcessingOption;
 import org.drools.core.util.FileManager;
 import org.drools.grid.ExecutionNode;
 import org.drools.impl.KnowledgeBaseImpl;
@@ -23,8 +29,12 @@
 import org.drools.io.ResourceChangeScanner;
 import org.drools.io.ResourceFactory;
 import org.drools.io.impl.ResourceChangeScannerImpl;
+import org.drools.process.core.WorkDefinition;
+import org.drools.process.instance.impl.humantask.HumanTaskHandler;
+import org.drools.reteoo.ReteooRuleBase;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.StatelessKnowledgeSession;
+import org.drools.runtime.process.WorkItemHandler;
 import org.drools.server.KnowledgeService;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
@@ -151,17 +161,51 @@
                       list.size() );
     }
 
-//    public void FIXME_testBeansConstructions() {
-//        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "org/drools/container/spring/beans.xml" );
-//        assertNotNull( context.getBean( "connection1" ) );
-//        assertNotNull( context.getBean( "node1" ) );
-//        KnowledgeBase bean = (KnowledgeBase) context.getBean( "kbase1" );
-//        assertNotNull( bean );
-//        KnowledgeServiceConfiguration kserviceConf1 = (KnowledgeServiceConfiguration) context.getBean( "service-conf-1" );
-//        assertNotNull( kserviceConf1 );
-//        assertEquals( "XSTREAM",
-//                      kserviceConf1.getMarshaller() );
-//        KnowledgeService kservice = (KnowledgeService) context.getBean( "service" );
-//        assertNotNull( kservice );
-//    }
+    public void testConfiguration() {
+        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "org/drools/container/spring/session-conf-beans.xml" );
+        KnowledgeBaseImpl kbase1 = ( KnowledgeBaseImpl ) context.getBean( "kbase1" );
+        RuleBaseConfiguration rconf = ((InternalRuleBase)kbase1.getRuleBase()).getConfiguration();
+        assertTrue( rconf.isAdvancedProcessRuleIntegration() );
+        assertTrue( rconf.isMultithreadEvaluation() );
+        assertEquals( 5, rconf.getMaxThreads() );
+        assertEquals( EventProcessingOption.STREAM, rconf.getEventProcessingMode() );
+        Map<String, WorkDefinition> wds = rconf.getProcessWorkDefinitions();
+        assertEquals( 4, wds.size() );
+        assertTrue( wds.containsKey( "Email" ));
+        assertTrue( wds.containsKey( "Log" ));
+        assertTrue( wds.containsKey( "wid1" ));
+        assertTrue( wds.containsKey( "wid2" ));
+        assertNotSame(  wds.get( "wid1" ), wds.get( "wid2" ));
+        assertEquals( org.drools.process.core.impl.WorkDefinitionImpl.class, wds.get( "wid1" ).getClass() );
+        assertEquals( org.drools.process.core.impl.WorkDefinitionImpl.class, wds.get( "wid2" ).getClass() );
+        
+        KnowledgeBaseImpl kbase2 = ( KnowledgeBaseImpl ) context.getBean( "kbase2" );
+        rconf = ((InternalRuleBase)kbase2.getRuleBase()).getConfiguration();
+        assertFalse( rconf.isAdvancedProcessRuleIntegration() );
+        assertFalse( rconf.isMultithreadEvaluation() );
+        assertEquals( 3, rconf.getMaxThreads() );
+        assertEquals( EventProcessingOption.CLOUD, rconf.getEventProcessingMode() );
+        
+        StatefulKnowledgeSessionImpl ksession1 = ( StatefulKnowledgeSessionImpl ) context.getBean( "ksession1" );
+        SessionConfiguration sconf = ksession1.session.getSessionConfiguration();
+        assertTrue( sconf.isKeepReference() );
+        assertEquals( ClockType.REALTIME_CLOCK , sconf.getClockType() );
+        Map<String, WorkItemHandler> wih = sconf.getWorkItemHandlers();
+        System.out.println( wih );
+        assertEquals( 4, wih.size() );
+        assertTrue( wih.containsKey( "wih1" ));
+        assertTrue( wih.containsKey( "wih2" ));
+        assertTrue( wih.containsKey( "Human Task" ));
+        assertTrue( wih.containsKey( "MyWork" ));        
+        assertNotSame(  wih.get( "wih1" ), wih.get( "wih2" ));
+        assertEquals( HumanTaskHandler.class, wih.get( "wih1" ).getClass() );
+        assertEquals( HumanTaskHandler.class, wih.get( "wih2" ).getClass() );
+  
+        StatefulKnowledgeSessionImpl ksession2 = ( StatefulKnowledgeSessionImpl ) context.getBean( "ksession2" );
+        sconf = ksession2.session.getSessionConfiguration();
+        assertFalse( sconf.isKeepReference() );
+        assertEquals( ClockType.PSEUDO_CLOCK, sconf.getClockType() );        
+        
+        
+    }
 }

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/beans.xml
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/beans.xml	2010-07-16 10:10:10 UTC (rev 33934)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/beans.xml	2010-07-16 10:25:48 UTC (rev 33935)
@@ -18,10 +18,12 @@
 	<drools:execution-node id="node1" connection="connection1" />
 
 	<drools:kbase id="kbProcessWorkItems" node="node1">
-		<drools:resource type="PKG" source="file:///${temp.dir}/processWorkItems.pkg" />
-		<drools:resource type="PKG" source="file:///${temp.dir}/processSubProcess.pkg" />
-		<drools:resource type="PKG" source="file:///${temp.dir}/processTimer.pkg" />
-		<drools:resource type="PKG" source="file:///${temp.dir}/processTimer2.pkg" />
+	    <drools:resources>
+			<drools:resource type="PKG" source="file:///${temp.dir}/processWorkItems.pkg" />
+			<drools:resource type="PKG" source="file:///${temp.dir}/processSubProcess.pkg" />
+			<drools:resource type="PKG" source="file:///${temp.dir}/processTimer.pkg" />
+			<drools:resource type="PKG" source="file:///${temp.dir}/processTimer2.pkg" />
+		</drools:resources>
 	</drools:kbase>
 	
 	<bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
@@ -36,10 +38,12 @@
 	<drools:kstore id="kstore1" />	
 	    
 	<drools:ksession id="jpaSingleSessionCommandService" type="stateful"  kbase="kbProcessWorkItems">
-		<drools:jpa-persistence>
-            <drools:transaction-manager ref="txManager" />
-            <drools:entity-manager-factory ref="myEmf" />   	    
-	    </drools:jpa-persistence>		    
+	    <drools:configuration>
+			<drools:jpa-persistence>
+	            <drools:transaction-manager ref="txManager" />
+	            <drools:entity-manager-factory ref="myEmf" />   	    
+		    </drools:jpa-persistence>
+	    </drools:configuration>		    
 	</drools:ksession>
 	
 </beans>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/beansVarPersistence.xml
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/beansVarPersistence.xml	2010-07-16 10:10:10 UTC (rev 33934)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans/persistence/beansVarPersistence.xml	2010-07-16 10:25:48 UTC (rev 33935)
@@ -15,7 +15,9 @@
 	<drools:execution-node id="node1" connection="connection1" /> -->
 
 	<drools:kbase id="kbase1">
-		<drools:resource type="DRF" source="classpath:org/drools/container/spring/beans/persistence/VariablePersistenceStrategyProcess.rf" />
+		<drools:resources>
+			<drools:resource type="DRF" source="classpath:org/drools/container/spring/beans/persistence/VariablePersistenceStrategyProcess.rf" />
+		</drools:resources>
 	</drools:kbase>
 	
 	<bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
@@ -27,26 +29,19 @@
 		<property name="entityManagerFactory" ref="myEmf" />
 	</bean>
 	
-	<drools:kstore id="kstore1" />
+	<drools:kstore id="kstore1" />	
 	
-	<!--drools:jpaSessionServiceFactory id="jpaSingleSessionCommandService" kbase="kbase1" 
-			entityManagerFactory="myEmf" transactionManager="txManager">
-		<drools:variablePersisters>
-			<drools:persister forClass="javax.persistence.Entity" implementation="org.drools.persistence.processinstance.persisters.JPAVariablePersister"/>
-			<drools:persister forClass="java.lang.String" implementation="org.drools.container.spring.beans.persistence.StringVariablePersister"/>
-			<drools:persister forClass="java.io.Serializable" implementation="org.drools.persistence.processinstance.persisters.SerializableVariablePersister"/>
-		</drools:variablePersisters>
-	</drools:jpaSessionServiceFactory--> 
-	
 	<drools:ksession id="jpaSingleSessionCommandService" type="stateful"  kbase="kbase1">
-		<drools:jpa-persistence>
-            <drools:transaction-manager ref="txManager" />
-            <drools:entity-manager-factory ref="myEmf" />
-			<drools:variable-persisters>
-				<drools:persister for-class="javax.persistence.Entity" implementation="org.drools.persistence.processinstance.persisters.JPAVariablePersister"/>
-				<drools:persister for-class="java.lang.String" implementation="org.drools.container.spring.beans.persistence.StringVariablePersister"/>
-				<drools:persister for-class="java.io.Serializable" implementation="org.drools.persistence.processinstance.persisters.SerializableVariablePersister"/>
-			</drools:variable-persisters>               	    
-	    </drools:jpa-persistence>    
+	    <drools:configuration>
+			<drools:jpa-persistence>
+	            <drools:transaction-manager ref="txManager" />
+	            <drools:entity-manager-factory ref="myEmf" />
+				<drools:variable-persisters>
+					<drools:persister for-class="javax.persistence.Entity" implementation="org.drools.persistence.processinstance.persisters.JPAVariablePersister"/>
+					<drools:persister for-class="java.lang.String" implementation="org.drools.container.spring.beans.persistence.StringVariablePersister"/>
+					<drools:persister for-class="java.io.Serializable" implementation="org.drools.persistence.processinstance.persisters.SerializableVariablePersister"/>
+				</drools:variable-persisters>               	    
+		    </drools:jpa-persistence>
+	    </drools:configuration>    
 	</drools:ksession>	
 </beans>
\ No newline at end of file

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	2010-07-16 10:10:10 UTC (rev 33934)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans.xml	2010-07-16 10:25:48 UTC (rev 33935)
@@ -13,15 +13,17 @@
 	<drools:resource id="resource1" type="DRL" source="classpath:org/drools/container/spring/testSpring.drl"/>
 	
 	<drools:kbase id="kbase1" node="node1">
-		<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:resource-ref id="resource1"/>
-		
-		<drools:resource source="classpath:org/drools/container/spring/model.xsd" type="XSD">
-		   <drools:jaxb-conf system-id="xsd" />
-		</drools:resource>						
+	    <drools:resources>
+			<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:resource-ref id="resource1"/>
+			
+			<drools:resource source="classpath:org/drools/container/spring/model.xsd" type="XSD">
+			   <drools:jaxb-conf system-id="xsd" />
+			</drools:resource>
+		</drools:resources>						
 	</drools:kbase>
 	
 	

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 10:10:10 UTC (rev 33934)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/kagents-beans.xml	2010-07-16 10:25:48 UTC (rev 33935)
@@ -18,8 +18,10 @@
 	
 	<drools:ksession id="ksession2" type="stateful"  kbase="kbase1"/>	
 	
-	<drools:kbase id="kbase1" node="node1">						
-		<drools:resource type="DRL" source="classpath:org/drools/container/spring/testSpring.drl"/>	
+	<drools:kbase id="kbase1" node="node1">			
+	    <drools:resources>			
+			<drools:resource type="DRL" source="classpath:org/drools/container/spring/testSpring.drl"/>
+		</drools:resources>	
 	</drools:kbase>
 	
 	<drools:kbase id="kbase2" node="node1">							
@@ -31,7 +33,9 @@
 	<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:resources>
+	    	<drools:resource type="DRL" source="classpath:org/drools/container/spring/drl" />
+	    </drools:resources>
 	</drools:kagent>
 	
 	<drools:kagent id="kagent3" kbase="kbase3" new-instance="true" />

Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/no-node-beans.xml
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/no-node-beans.xml	2010-07-16 10:10:10 UTC (rev 33934)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/no-node-beans.xml	2010-07-16 10:25:48 UTC (rev 33935)
@@ -10,22 +10,14 @@
                            http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
 
 	<drools:kbase id="kbase1">
-	   <drools:resource type="DRL" source="classpath:org/drools/container/spring/testSpring.drl"/>
+	   <drools:resources>
+	       <drools:resource type="DRL" source="classpath:org/drools/container/spring/testSpring.drl"/>
+	   </drools:resources>
 	</drools:kbase>
 	
 	<drools:ksession id="ksession1" type="stateless" kbase="kbase1"/>
 	
 	<drools:ksession id="ksession2" type="stateful"  kbase="kbase1"/>
-	
-	<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
-		<!-- org.h2.jdbcx.JdbcDataSource -->
-		<property name="driverClassName" value="org.h2.Driver" />
-		<!-- jdbc:h2:mem:mydb 
-		jdbc:h2:tcp://localhost/DroolsFlow-->
-		<property name="url" value="jdbc:h2:tcp://localhost/DroolsFlow" />
-		<property name="username" value="sa" />
-		<property name="password" value="" />
-	</bean>	
 
 	<drools:ksession id="ksession3" type="stateful"  kbase="kbase1">	    
 

Added: labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/session-conf-beans.xml
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/session-conf-beans.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/session-conf-beans.xml	2010-07-16 10:25:48 UTC (rev 33935)
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       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">
+
+   <bean id="rwid1" class="org.drools.process.core.impl.WorkDefinitionImpl">
+       <property name="name" value="wid1" />
+   </bean>
+   
+   <bean id="rwid2" class="org.drools.process.core.impl.WorkDefinitionImpl">
+       <property name="name" value="wid2" />
+   </bean> 
+   
+   <bean id="rwih1" class="org.drools.process.instance.impl.humantask.HumanTaskHandler" />
+   
+   <bean id="rwih2" class="org.drools.process.instance.impl.humantask.HumanTaskHandler" />  
+
+	<drools:kbase id="kbase1">
+	   <drools:resources>
+	      <drools:resource type="DRL" source="classpath:org/drools/container/spring/testSpring.drl"/>
+	   </drools:resources>
+	   
+	   <drools:configuration>
+	      <drools:advanced-process-rule-integration enabled="true" />
+	      
+	      <drools:multithread enabled="true" max-threads="5" />
+	      
+	      <drools:mbeans enabled="true" />
+	      
+	      <drools:event-processing-mode mode="STREAM" />
+	      
+	      <drools:work-item-definitions>
+	          <drools:work-item-definition name="wid1" ref="rwid1" />
+	          <drools:work-item-definition name="wid2" ref="rwid2" />
+	      </drools:work-item-definitions>
+	      
+	   </drools:configuration>
+	</drools:kbase>
+	
+	<drools:kbase id="kbase2">
+	   <drools:resources>
+	      <drools:resource type="DRL" source="classpath:org/drools/container/spring/testSpring.drl"/>
+	   </drools:resources>
+	   
+	   <drools:configuration>
+	      <drools:advanced-process-rule-integration enabled="false" />
+	      
+	      <drools:multithread enabled="false" />
+	      
+	      <drools:mbeans enabled="false" />
+	      
+	      <drools:event-processing-mode mode="CLOUD" />	      
+	   </drools:configuration>
+	</drools:kbase>	
+	
+	
+	<drools:ksession id="ksession1" type="stateful"  kbase="kbase1" >
+	   <drools:configuration>
+		    <drools:work-item-handlers>
+		        <drools:work-item-handler name="wih1" ref="rwih1" />
+		        <drools:work-item-handler name="wih2" ref="rwih2" />
+		    </drools:work-item-handlers>
+		    <drools:keep-reference enabled="true" />	
+		    <drools:clock-type type="REALTIME"  /> 
+	   </drools:configuration>		    
+	</drools:ksession>
+	
+	<drools:ksession id="ksession2" type="stateful"  kbase="kbase1" >
+	   <drools:configuration>
+		    <drools:keep-reference enabled="false" />	
+		    <drools:clock-type type="PSEUDO"  /> 
+	   </drools:configuration>		    
+	</drools:ksession>	
+	
+</beans>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java	2010-07-16 10:10:10 UTC (rev 33934)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java	2010-07-16 10:25:48 UTC (rev 33935)
@@ -12,6 +12,7 @@
 import java.util.Map;
 
 import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
 import org.drools.RuleBase;
 import org.drools.SessionConfiguration;
 import org.drools.command.CommandService;



More information about the jboss-svn-commits mailing list