[seam-commits] Seam SVN: r11431 - in branches/community/Seam_2_2_Drools5/src/main/org/jboss/seam: drools and 1 other directory.
seam-commits at lists.jboss.org
seam-commits at lists.jboss.org
Wed Aug 26 15:12:36 EDT 2009
Author: tsurdilovic
Date: 2009-08-26 15:12:36 -0400 (Wed, 26 Aug 2009)
New Revision: 11431
Added:
branches/community/Seam_2_2_Drools5/src/main/org/jboss/seam/drools/StatelessKnowledgeSession.java
Modified:
branches/community/Seam_2_2_Drools5/src/main/org/jboss/seam/drools-2.2.xsd
Log:
Drools5 Integration.
Added: branches/community/Seam_2_2_Drools5/src/main/org/jboss/seam/drools/StatelessKnowledgeSession.java
===================================================================
--- branches/community/Seam_2_2_Drools5/src/main/org/jboss/seam/drools/StatelessKnowledgeSession.java (rev 0)
+++ branches/community/Seam_2_2_Drools5/src/main/org/jboss/seam/drools/StatelessKnowledgeSession.java 2009-08-26 19:12:36 UTC (rev 11431)
@@ -0,0 +1,158 @@
+package org.jboss.seam.drools;
+
+import java.io.InputStream;
+import java.util.Properties;
+
+import org.drools.KnowledgeBaseFactory;
+import org.drools.event.process.ProcessEventListener;
+import org.drools.event.rule.AgendaEventListener;
+import org.drools.event.rule.WorkingMemoryEventListener;
+import org.drools.logger.KnowledgeRuntimeLogger;
+import org.drools.logger.KnowledgeRuntimeLoggerFactory;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.spi.GlobalResolver;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.Destroy;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Unwrap;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+import org.jboss.seam.core.ResourceLoader;
+import org.jboss.seam.core.Expressions.ValueExpression;
+import org.jboss.seam.log.LogProvider;
+import org.jboss.seam.log.Logging;
+
+/**
+ * A conversation-scoped Drools StatelessKnowledgeSession for a named KnowledgeBase
+ *
+ * @author Tihomir Surdilovic
+ *
+ */
+ at Scope(ScopeType.CONVERSATION)
+ at BypassInterceptors
+public class StatelessKnowledgeSession
+{
+ private static final LogProvider log = Logging.getLogProvider(org.jboss.seam.drools.StatelessKnowledgeSession.class);
+
+ private ValueExpression<org.drools.KnowledgeBase> knowledgeBase;
+ private String[] eventListeners;
+ private String knowledgeSessionConfig;
+ private String auditLog;
+
+ private org.drools.runtime.StatelessKnowledgeSession ksession;
+ private KnowledgeRuntimeLogger krLogger;
+
+ @Unwrap
+ public org.drools.runtime.StatelessKnowledgeSession getStatelessKnowledgeSession() throws Exception {
+ if(ksession == null) {
+ KnowledgeSessionConfiguration ksessionconfig;
+ if(knowledgeSessionConfig != null) {
+ Properties ksessionProp = new Properties();
+ InputStream stream = ResourceLoader.instance().getResourceAsStream(knowledgeSessionConfig);
+ if (stream==null) {
+ throw new IllegalStateException("could not locate knowledgeSession configuration: " + knowledgeSessionConfig);
+ }
+ ksessionProp.load(stream);
+ log.info("loading knowledge session config properties: " + ksessionProp.toString());
+ stream.close();
+ ksessionconfig = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(ksessionProp);
+ } else {
+ ksessionconfig = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
+ }
+
+ ksession = knowledgeBase.getValue().newStatelessKnowledgeSession(ksessionconfig);
+
+ ksession.getGlobals().setDelegate(new SeamDelegate());
+
+ if(eventListeners != null) {
+ for(String eventListener : eventListeners) {
+ setEventListener(ksession, eventListener);
+ }
+ }
+
+ if(auditLog != null) {
+ auditLog+=System.currentTimeMillis();
+ log.info("Setting auding log: " + auditLog);
+ krLogger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, auditLog);
+ }
+ }
+
+ return ksession;
+ }
+
+ protected GlobalResolver createGlobalResolver(GlobalResolver delegate)
+ {
+ return new SeamGlobalResolver(delegate);
+ }
+
+ protected void setEventListener(org.drools.runtime.StatelessKnowledgeSession ksession, String eventListener) {
+ try {
+ Class eventListenerClass = Class.forName(eventListener);
+ Object eventListenerObject = eventListenerClass.newInstance();
+
+ if(eventListenerObject instanceof WorkingMemoryEventListener) {
+ ksession.addEventListener((WorkingMemoryEventListener) eventListenerObject);
+ } else if(eventListenerObject instanceof AgendaEventListener) {
+ ksession.addEventListener((AgendaEventListener) eventListenerObject);
+ } else if(eventListenerObject instanceof ProcessEventListener) {
+ ksession.addEventListener((ProcessEventListener) eventListenerObject);
+ } else {
+ log.warn("event Listener " + eventListener + " is not of valid type");
+ }
+ } catch(Exception e) {
+ log.warn("error adding event listener " + eventListener);
+ }
+ }
+
+ public boolean clearDirty()
+ {
+ return true;
+ }
+
+ @Destroy
+ public void destroy()
+ {
+ if(krLogger != null) {
+ krLogger.close();
+ }
+ }
+
+ public ValueExpression<org.drools.KnowledgeBase> getKnowledgeBase()
+ {
+ return knowledgeBase;
+ }
+
+ public void setKnowledgeBase(ValueExpression<org.drools.KnowledgeBase> knowledgeBase)
+ {
+ this.knowledgeBase = knowledgeBase;
+ }
+
+ public String[] getEventListeners()
+ {
+ return eventListeners;
+ }
+
+ public void setEventListeners(String[] eventListeners)
+ {
+ this.eventListeners = eventListeners;
+ }
+
+ public String getKnowledgeSessionConfig()
+ {
+ return knowledgeSessionConfig;
+ }
+
+ public void setKnowledgeSessionConfig(String knowledgeSessionConfig)
+ {
+ this.knowledgeSessionConfig = knowledgeSessionConfig;
+ }
+
+ public String getAuditLog()
+ {
+ return auditLog;
+ }
+
+ public void setAuditLog(String auditLog)
+ {
+ this.auditLog = auditLog;
+ }
+}
Modified: branches/community/Seam_2_2_Drools5/src/main/org/jboss/seam/drools-2.2.xsd
===================================================================
--- branches/community/Seam_2_2_Drools5/src/main/org/jboss/seam/drools-2.2.xsd 2009-08-26 10:59:14 UTC (rev 11430)
+++ branches/community/Seam_2_2_Drools5/src/main/org/jboss/seam/drools-2.2.xsd 2009-08-26 19:12:36 UTC (rev 11431)
@@ -105,7 +105,26 @@
<xs:attribute name="fact-provider" type="components:expressionType"/>
<xs:attribute name="audit-log" type="components:string"/>
</xs:attributeGroup>
- <xs:element name="globals" type="components:multiValuedProperty" />
+
+ <xs:element name="stateless-knowledge-session">
+ <xs:annotation>
+ <xs:documentation>Drools StatelessKnowledgeSession</xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element minOccurs="0" maxOccurs="1"
+ ref="drools:event-listeners" />
+ </xs:choice>
+ <xs:attributeGroup ref="components:attlist.component" />
+ <xs:attributeGroup ref="drools:attlist.StatelessKnowledgeSession" />
+ </xs:complexType>
+ </xs:element>
+ <xs:attributeGroup name="attlist.StatelessKnowledgeSession">
+ <xs:attribute name="knowledge-base" type="components:expressionType" />
+ <xs:attribute name="event-listeners" type="components:string" />
+ <xs:attribute name="knowledge-session-config" type="components:string" />
+ <xs:attribute name="audit-log" type="components:string"/>
+ </xs:attributeGroup>
<xs:element name="knowledge-agent">
<xs:annotation>
More information about the seam-commits
mailing list