[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