[jboss-svn-commits] JBL Code SVN: r29780 - in labs/jbossrules/trunk/drools-container/drools-spring: src/main/java/org/drools/container/spring and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Oct 23 00:08:16 EDT 2009
Author: mark.proctor at jboss.com
Date: 2009-10-23 00:08:12 -0400 (Fri, 23 Oct 2009)
New Revision: 29780
Added:
labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/ServiceManagerDefinitionParser.java
Modified:
labs/jbossrules/trunk/drools-container/drools-spring/.classpath
labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/SpringDroolsFactory.java
labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/SpringDroolsHandler.java
labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/drools-spring.xsd
labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/SpringDroolsTest.java
labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans.xml
Log:
JBRULES-1434 Drools Spring
-Added support for ServiceManager
Modified: labs/jbossrules/trunk/drools-container/drools-spring/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/.classpath 2009-10-23 01:37:51 UTC (rev 29779)
+++ labs/jbossrules/trunk/drools-container/drools-spring/.classpath 2009-10-23 04:08:12 UTC (rev 29780)
@@ -31,5 +31,6 @@
<classpathentry combineaccessrules="false" kind="src" path="/drools-core"/>
<classpathentry combineaccessrules="false" kind="src" path="/drools-decisiontables"/>
<classpathentry combineaccessrules="false" kind="src" path="/drools-templates"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/drools-vsm"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
Added: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/ServiceManagerDefinitionParser.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/ServiceManagerDefinitionParser.java (rev 0)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/ServiceManagerDefinitionParser.java 2009-10-23 04:08:12 UTC (rev 29780)
@@ -0,0 +1,89 @@
+package org.drools.container.spring;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.drools.KnowledgeBase;
+import org.drools.builder.DecisionTableInputType;
+import org.drools.builder.ResourceType;
+import org.drools.builder.impl.DecisionTableConfigurationImpl;
+import org.drools.io.InternalResource;
+import org.drools.io.Resource;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.io.impl.KnowledgeResource;
+import org.drools.io.impl.UrlResource;
+import org.drools.vsm.ServiceManager;
+import org.drools.xml.ExtensibleXmlParser;
+import org.springframework.beans.factory.config.ConstructorArgumentValues;
+import org.springframework.beans.factory.config.RuntimeBeanReference;
+import org.springframework.beans.factory.support.AbstractBeanDefinition;
+import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.support.ManagedMap;
+import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
+import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
+import org.springframework.beans.factory.xml.ParserContext;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+public class ServiceManagerDefinitionParser extends AbstractSingleBeanDefinitionParser {
+ protected Class getBeanClass(Element element) {
+ return ServiceManager.class;
+ }
+
+ protected void doParse(Element element, BeanDefinitionBuilder bean) {
+ bean.getRawBeanDefinition().setBeanClassName( "org.drools.container.spring.SpringDroolsFactory" );
+ bean.getRawBeanDefinition().setFactoryMethodName( "buildServiceManager" );
+
+// List<Resource> resources = new ArrayList<Resource>();
+
+ //Collection<RegistryEntry> registryEntries = new ArrayList<RegistryEntry>();
+
+ ManagedMap map = new ManagedMap();
+ NodeList registryList = element.getChildNodes();
+ for ( int i = 0, registryListLength = registryList.getLength(); i < registryListLength; i++ ) {
+ Node resourceNode = registryList.item( i );
+ if ( resourceNode.getNodeType() == Node.ELEMENT_NODE ) {
+ Element resourceElement = ( Element ) resourceNode;
+ String name = resourceElement.getAttribute( "name" );
+ String ref = resourceElement.getAttribute( "ref" );
+
+ emptyAttributeCheck( "resource",
+ "ref",
+ ref );
+
+ if ( name == null || name.trim().length() == 0 ) {
+ map.put(ref, new RuntimeBeanReference( ref ) );
+ } else {
+ map.put( name, new RuntimeBeanReference( ref ) );
+ }
+ }
+
+ }
+
+ ConstructorArgumentValues values = new ConstructorArgumentValues();
+ values.addGenericArgumentValue( map );
+
+ bean.getRawBeanDefinition().setConstructorArgumentValues( values );
+ }
+
+ public void emptyAttributeCheck(final String element,
+ final String attributeName,
+ final String attribute) {
+ if ( attribute == null || attribute.trim().equals( "" ) ) {
+ throw new IllegalArgumentException( "<" + element + "> requires a '" + attributeName + "' attribute" );
+ }
+ }
+
+// protected AbstractBeanDefinition parseInternal(Element elm,
+// ParserContext ctx) {
+// System.out.println( elm.getAttribute( "value" ) );
+//
+//
+// return elm.getAttribute( "value" );
+// }
+
+}
Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/SpringDroolsFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/SpringDroolsFactory.java 2009-10-23 01:37:51 UTC (rev 29779)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/SpringDroolsFactory.java 2009-10-23 04:08:12 UTC (rev 29780)
@@ -1,7 +1,10 @@
package org.drools.container.spring;
import java.io.IOException;
+import java.rmi.activation.ActivationGroupDesc.CommandEnvironment;
import java.util.Collection;
+import java.util.Map;
+import java.util.Map.Entry;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
@@ -9,8 +12,11 @@
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.io.InternalResource;
import org.drools.io.Resource;
+import org.drools.runtime.CommandExecutor;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.StatelessKnowledgeSession;
+import org.drools.vsm.ServiceManager;
+import org.drools.vsm.local.ServiceManagerLocalClient;
public class SpringDroolsFactory {
private static KnowledgeBase buildKnowledgeBase(Collection<Resource> resources) {
@@ -36,5 +42,15 @@
private static StatelessKnowledgeSession newStatelessKnowledgeSession(KnowledgeBase kbase) {
return kbase.newStatelessKnowledgeSession();
- }
+ }
+
+ private static ServiceManager buildServiceManager(Map<String, CommandExecutor> map) {
+ ServiceManagerLocalClient sm = new ServiceManagerLocalClient();
+ for ( Entry<String, CommandExecutor> entry : map.entrySet() ) {
+ sm.register( entry.getKey(), entry.getValue() );
+ }
+ return sm;
+ }
+
+
}
Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/SpringDroolsHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/SpringDroolsHandler.java 2009-10-23 01:37:51 UTC (rev 29779)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/java/org/drools/container/spring/SpringDroolsHandler.java 2009-10-23 04:08:12 UTC (rev 29780)
@@ -8,7 +8,9 @@
registerBeanDefinitionParser("kbase", new KnowledgeBaseDefinitionParser());
registerBeanDefinitionParser("ksession", new KnowledgeSessionDefinitionParser());
+
+ registerBeanDefinitionParser("serviceManager", new ServiceManagerDefinitionParser());
}
-}
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/drools-spring.xsd
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/drools-spring.xsd 2009-10-23 01:37:51 UTC (rev 29779)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/drools-spring.xsd 2009-10-23 04:08:12 UTC (rev 29780)
@@ -34,5 +34,19 @@
<xsd:attribute name="id" use="required" />
</xsd:complexType>
</xsd:element>
+
+ <xsd:element name="serviceManager">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="register" maxOccurs="unbounded">
+ <xsd:complexType>
+ <xsd:attribute name="name" use="optional" />
+ <xsd:attribute name="ref" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ <xsd:attribute name="id" use="required" />
+ </xsd:complexType>
+ </xsd:element>
</xsd:schema>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/SpringDroolsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/SpringDroolsTest.java 2009-10-23 01:37:51 UTC (rev 29779)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/java/org/drools/container/spring/SpringDroolsTest.java 2009-10-23 04:08:12 UTC (rev 29780)
@@ -8,6 +8,7 @@
import org.drools.Person;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.StatelessKnowledgeSession;
+import org.drools.vsm.ServiceManager;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringDroolsTest extends TestCase {
@@ -28,4 +29,24 @@
kstateful.fireAllRules();
assertEquals( 2, list.size() );
}
+
+ public void test2() {
+ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "org/drools/container/spring/beans.xml" );
+
+ ServiceManager sm = (ServiceManager)context.getBean( "sm1" );
+
+ List list = new ArrayList();
+ StatelessKnowledgeSession kstateless = (StatelessKnowledgeSession)sm.lookup( "stateless1" );
+ kstateless.setGlobal( "list", list );
+ kstateless.execute( new Person( "Darth", "Cheddar", 50 ) );
+ assertEquals( 2, list.size() );
+
+
+ list = new ArrayList();
+ StatefulKnowledgeSession kstateful = ( StatefulKnowledgeSession ) sm.lookup( "ksession2" );
+ kstateful.setGlobal( "list", list );
+ kstateful.insert( new Person( "Darth", "Cheddar", 50 ) );
+ kstateful.fireAllRules();
+ assertEquals( 2, list.size() );
+ }
}
Modified: labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans.xml
===================================================================
--- labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans.xml 2009-10-23 01:37:51 UTC (rev 29779)
+++ labs/jbossrules/trunk/drools-container/drools-spring/src/test/resources/org/drools/container/spring/beans.xml 2009-10-23 04:08:12 UTC (rev 29780)
@@ -15,4 +15,9 @@
<drools:ksession id="ksession1" type="stateless" kbase="kbase1" />
<drools:ksession id="ksession2" type="stateful" kbase="kbase1" />
+
+ <drools:serviceManager id="sm1">
+ <drools:register name="stateless1" ref="ksession1" />
+ <drools:register ref="ksession2" />
+ </drools:serviceManager>
</beans>
\ No newline at end of file
More information about the jboss-svn-commits
mailing list