[jboss-svn-commits] JBL Code SVN: r27378 - in labs/jbossrules/trunk/drools-process: drools-ode and 20 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Jul 1 06:39:48 EDT 2009
Author: KrisVerlaenen
Date: 2009-07-01 06:39:47 -0400 (Wed, 01 Jul 2009)
New Revision: 27378
Added:
labs/jbossrules/trunk/drools-process/drools-ode/
labs/jbossrules/trunk/drools-process/drools-ode/.classpath
labs/jbossrules/trunk/drools-process/drools-ode/.project
labs/jbossrules/trunk/drools-process/drools-ode/pom.xml
labs/jbossrules/trunk/drools-process/drools-ode/src/
labs/jbossrules/trunk/drools-process/drools-ode/src/main/
labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/
labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/
labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/apache/
labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/apache/ode/
labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/apache/ode/store/
labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/apache/ode/store/BPELResourceTypeBuilder.java
labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/apache/ode/store/DroolsProcessStore.java
labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/
labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/
labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/core/
labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/core/BPELNode.java
labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/core/BPELProcess.java
labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/
labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/BPELEventListener.java
labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/BPELNodeInstance.java
labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/BPELProcessInstance.java
labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/BPELProcessInstanceFactory.java
labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/EmbeddedBPELServer.java
labs/jbossrules/trunk/drools-process/drools-ode/src/main/resources/
labs/jbossrules/trunk/drools-process/drools-ode/src/main/resources/META-INF/
labs/jbossrules/trunk/drools-process/drools-ode/src/main/resources/META-INF/ODEProcessInstanceFactory.conf
labs/jbossrules/trunk/drools-process/drools-ode/src/main/resources/META-INF/drools.rulebase.conf
labs/jbossrules/trunk/drools-process/drools-ode/src/test/
labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/
labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/org/
labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/org/drools/
labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/org/drools/ode/
labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/org/drools/ode/DroolsBPELGuvnorTest.java
labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/org/drools/ode/DroolsBPELTest.java
labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/org/drools/ode/DroolsBPELTest2.java
labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/org/drools/ode/MockBPELServerTest.java
labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/
labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/ChangeSet.xml
labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/HelloWorld3.bpel.jar
labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/HelloWorld3/
labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/HelloWorld3/HelloWorld3.bpel
labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/HelloWorld3/HelloWorld3.wsdl
labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/HelloWorld3/deploy.xml
labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/log4j.properties
Log:
JBRULES-2153: ODE integration
- initial implementation
Added: labs/jbossrules/trunk/drools-process/drools-ode/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/.classpath (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/.classpath 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+ <classpathentry excluding="**/*.java" including="**" kind="src" output="target/test-classes" path="src/test/resources"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/bpel-runtime"/>
+ <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/annogen/annogen/0.1.0/annogen-0.1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.1/antlr-runtime-3.1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/avalon-framework/avalon-framework/4.1.3/avalon-framework-4.1.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ws/commons/axiom/axiom-api/1.2.5/axiom-api-1.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ws/commons/axiom/axiom-dom/1.2.5/axiom-dom-1.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ws/commons/axiom/axiom-impl/1.2.5/axiom-impl-1.2.5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/axis2/axis2-kernel/1.3/axis2-kernel-1.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/backport-util-concurrent/backport-util-concurrent/2.2/backport-util-concurrent-2.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-codec/commons-codec/1.2/commons-codec-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.2/commons-collections-3.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-fileupload/commons-fileupload/1.2.1/commons-fileupload-1.2.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-httpclient/commons-httpclient/3.0.1/commons-httpclient-3.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-io/commons-io/1.4/commons-io-1.4.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-lang/commons-lang/2.3/commons-lang-2.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-pool/commons-pool/1.3/commons-pool-1.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
+ <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-api/5.1.0.SNAPSHOT/drools-api-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-api/5.1.0.SNAPSHOT/drools-api-5.1.0.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-compiler/5.1.0.SNAPSHOT/drools-compiler-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-compiler/5.1.0.SNAPSHOT/drools-compiler-5.1.0.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-core/5.1.0.SNAPSHOT/drools-core-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-core/5.1.0.SNAPSHOT/drools-core-5.1.0.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-j2ee-connector_1.5_spec/1.1.1/geronimo-j2ee-connector_1.5_spec-1.1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jms_1.1_spec/1.1/geronimo-jms_1.1_spec-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jpa_3.0_spec/1.0/geronimo-jpa_3.0_spec-1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jta_1.1_spec/1.1/geronimo-jta_1.1_spec-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/components/geronimo-transaction/2.0.1/geronimo-transaction-2.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/objectweb/howl/howl/1.0.1-1/howl-1.0.1-1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/hsqldb/hsqldb/1.8.0.7/hsqldb-1.8.0.7.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/httpcomponents/httpcore/4.0-alpha5/httpcore-4.0-alpha5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/httpcomponents/httpcore-nio/4.0-alpha5/httpcore-nio-4.0-alpha5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/httpcomponents/httpcore-niossl/4.0-alpha5/httpcore-niossl-4.0-alpha5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/ibm/icu/icu4j/2.6.1/icu4j-2.6.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
+ <classpathentry kind="var" path="M2_REPO/jaxen/jaxen/1.1.1/jaxen-1.1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/jdom/jdom/1.0/jdom-1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.6/joda-time-1.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.1/jta-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar"/>
+ <classpathentry kind="var" path="M2_REPO/logkit/logkit/1.0.1/logkit-1.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/mail/mail/1.4/mail-1.4.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.10/mvel2-2.0.10.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/neethi/neethi/2.0.2/neethi-2.0.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ode/ode-axis2/1.2/ode-axis2-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ode/ode-bpel-api/1.2/ode-bpel-api-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ode/ode-bpel-compiler/1.2/ode-bpel-compiler-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ode/ode-bpel-dao/1.2/ode-bpel-dao-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ode/ode-bpel-epr/1.2/ode-bpel-epr-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ode/ode-bpel-obj/1.2/ode-bpel-obj-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ode/ode-bpel-runtime/1.2/ode-bpel-runtime-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ode/ode-bpel-schemas/1.2/ode-bpel-schemas-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ode/ode-bpel-store/1.2/ode-bpel-store-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ode/ode-dao-jpa/1.2/ode-dao-jpa-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ode/ode-jacob/1.2/ode-jacob-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ode/ode-utils/1.2/ode-utils-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/openjpa/openjpa/1.1.0/openjpa-1.1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/net/sf/saxon/saxon/8.7/saxon-8.7.jar"/>
+ <classpathentry kind="var" path="M2_REPO/net/sf/saxon/saxon-dom/8.7/saxon-dom-8.7.jar"/>
+ <classpathentry kind="var" path="M2_REPO/net/sf/saxon/saxon-xpath/8.7/saxon-xpath-8.7.jar"/>
+ <classpathentry kind="var" path="M2_REPO/net/sourceforge/serp/serp/1.13.1/serp-1.13.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/stax/stax-api/1.0.1/stax-api-1.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/woden/woden/1.0-incubating-M7b/woden-1.0-incubating-M7b.jar"/>
+ <classpathentry kind="var" path="M2_REPO/wsdl4j/wsdl4j/1.6.1/wsdl4j-1.6.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/woodstox/wstx-asl/3.2.1/wstx-asl-3.2.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xalan/xalan/2.7.0/xalan-2.7.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.9.0/xercesImpl-2.9.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/xmlbeans/xmlbeans/2.3.0/xmlbeans-2.3.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xerces/xmlParserAPIs/2.6.2/xmlParserAPIs-2.6.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ws/commons/schema/XmlSchema/1.3.2/XmlSchema-1.3.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xom/xom/1.0/xom-1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.3.1/xstream-1.3.1.jar"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
Added: labs/jbossrules/trunk/drools-process/drools-ode/.project
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/.project (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/.project 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,13 @@
+<projectDescription>
+ <name>drools-ode</name>
+ <comment>A rule production system</comment>
+ <projects/>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-ode/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/pom.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/pom.xml 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>drools</artifactId>
+ <groupId>org.drools</groupId>
+ <version>5.1.0.SNAPSHOT</version>
+ </parent>
+
+ <artifactId>drools-ode</artifactId>
+ <packaging>jar</packaging>
+ <name>Drools :: Process :: ODE</name>
+
+ <build/>
+
+ <dependencies>
+
+ <!-- Internal dependencies -->
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-compiler</artifactId>
+ </dependency>
+
+ <!-- External dependencies -->
+ <dependency>
+ <groupId>com.thoughtworks.xstream</groupId>
+ <artifactId>xstream</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.ode</groupId>
+ <artifactId>ode-bpel-api</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.ode</groupId>
+ <artifactId>ode-bpel-compiler</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.ode</groupId>
+ <artifactId>ode-bpel-runtime</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.ode</groupId>
+ <artifactId>ode-bpel-api</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.ode</groupId>
+ <artifactId>ode-bpel-dao</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.ode</groupId>
+ <artifactId>ode-dao-jpa</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.ode</groupId>
+ <artifactId>ode-bpel-epr</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.ode</groupId>
+ <artifactId>ode-bpel-store</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.ode</groupId>
+ <artifactId>ode-utils</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.ode</groupId>
+ <artifactId>ode-utils</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.ode</groupId>
+ <artifactId>ode-bpel-schemas</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.ode</groupId>
+ <artifactId>ode-bpel-obj</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.ode</groupId>
+ <artifactId>ode-jacob</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.ode</groupId>
+ <artifactId>ode-axis2</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.axis2</groupId>
+ <artifactId>axis2-kernel</artifactId>
+ <version>1.3</version>
+ </dependency>
+ <dependency>
+ <groupId>wsdl4j</groupId>
+ <artifactId>wsdl4j</artifactId>
+ <version>1.6.1</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.transaction</groupId>
+ <artifactId>jta</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>hsqldb</groupId>
+ <artifactId>hsqldb</artifactId>
+ <version>1.8.0.7</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.geronimo.components</groupId>
+ <artifactId>geronimo-transaction</artifactId>
+ <version>2.0.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.openjpa</groupId>
+ <artifactId>openjpa</artifactId>
+ <version>1.1.0</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.xmlbeans</groupId>
+ <artifactId>xmlbeans</artifactId>
+ <version>2.3.0</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>xerces</groupId>
+ <artifactId>xercesImpl</artifactId>
+ <version>2.9.0</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>xalan</groupId>
+ <artifactId>xalan</artifactId>
+ <version>2.7.0</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>jaxen</groupId>
+ <artifactId>jaxen</artifactId>
+ <version>1.1.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>net.sf.saxon</groupId>
+ <artifactId>saxon</artifactId>
+ <version>8.7</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>net.sf.saxon</groupId>
+ <artifactId>saxon-dom</artifactId>
+ <version>8.7</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>net.sf.saxon</groupId>
+ <artifactId>saxon-xpath</artifactId>
+ <version>8.7</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+</project>
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/apache/ode/store/BPELResourceTypeBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/apache/ode/store/BPELResourceTypeBuilder.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/apache/ode/store/BPELResourceTypeBuilder.java 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,217 @@
+package org.apache.ode.store;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+import javax.xml.namespace.QName;
+
+import org.apache.ode.bpel.compiler.api.CompilationException;
+import org.apache.ode.bpel.dd.DeployDocument;
+import org.apache.ode.bpel.dd.TDeployment;
+import org.apache.ode.bpel.iapi.ContextException;
+import org.apache.ode.bpel.iapi.Endpoint;
+import org.apache.ode.bpel.iapi.EndpointReference;
+import org.apache.ode.bpel.iapi.EndpointReferenceContext;
+import org.apache.ode.bpel.iapi.ProcessConf;
+import org.apache.ode.bpel.iapi.ProcessState;
+import org.apache.ode.utils.DOMUtils;
+import org.drools.builder.ResourceConfiguration;
+import org.drools.builder.ResourceType;
+import org.drools.compiler.DroolsParserException;
+import org.drools.compiler.PackageBuilder;
+import org.drools.compiler.ResourceTypeBuilder;
+import org.drools.compiler.RuleFlowLoadError;
+import org.drools.io.InternalResource;
+import org.drools.io.Resource;
+import org.drools.ode.core.BPELProcess;
+import org.drools.util.StringUtils;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+public class BPELResourceTypeBuilder implements ResourceTypeBuilder {
+
+ private PackageBuilder packageBuilder;
+
+ public void addKnowledgeResource(Resource resource, ResourceType type, ResourceConfiguration configuration) {
+ try {
+ generatePackage();
+ System.out.println("Adding BPEL resource " + resource);
+ URL url = ((InternalResource) resource).getURL();
+ File file = null;
+ if ( "file".equals( url.getProtocol() ) ) {
+ file = new File( StringUtils.toURI( url.toString() ).getSchemeSpecificPart() );
+ } else {
+ throw new IllegalArgumentException("ODE BPEL resource is not a file! " + resource);
+ }
+ if ( ((InternalResource) resource).isDirectory() ) {
+ List<BPELProcess> processes = readProcesses(file);
+ for (BPELProcess process: processes) {
+ packageBuilder.getPackage().addProcess(process);
+ }
+
+ } else {
+ List<BPELProcess> processes = readProcessesFromJar(resource.getInputStream(), file.getName());
+ byte[] bytes = getBytesFromFile(file);
+ for (BPELProcess process: processes) {
+ process.setBPELJar(bytes);
+ packageBuilder.getPackage().addProcess(process);
+ }
+ }
+ // TODO: handle exceptions
+ // throw new IllegalArgumentException("ODE BPEL resource is not a directory! " + resource);
+ } catch (Exception e) {
+ packageBuilder.getErrors().add(new RuleFlowLoadError("Exception while loading BPEL resource " + resource, e));
+ }
+ }
+
+ private void generatePackage() {
+ try {
+ packageBuilder.addPackageFromDrl(new StringReader("package org.drools.ode"));
+ } catch (DroolsParserException e) {
+ // should never occur
+ e.printStackTrace( System.err );
+ } catch (IOException e) {
+ // should never occur
+ e.printStackTrace( System.err );
+ }
+ }
+
+ public static List<BPELProcess> readProcessesFromJar(InputStream input, String name) throws IOException {
+ // unzip file in temp dir
+ ZipInputStream inputStream = new ZipInputStream(input);
+ ZipEntry ze = null;
+ String tmpDirName =
+ System.getProperty("java.io.tmpdir") + File.separator +
+ "Drools_ODE" + File.separator + name + File.separator;
+ File tmpDir = new File(tmpDirName);
+ tmpDir.mkdirs();
+ List<File> tmpFiles = new ArrayList<File>();
+ while ((ze = inputStream.getNextEntry()) != null) {
+ String tmpFileName = ze.getName();
+ int index = tmpFileName.lastIndexOf(File.separator);
+ if (index != -1) {
+ tmpFileName = tmpFileName.substring(index + 1);
+ }
+ File tmpFile = new File(tmpDirName + tmpFileName);
+ tmpFile.createNewFile();
+ FileOutputStream fout = new FileOutputStream(tmpFile);
+ for (int c = inputStream.read(); c != -1; c = inputStream.read()) {
+ fout.write(c);
+ }
+ inputStream.closeEntry();
+ fout.close();
+ tmpFiles.add(tmpFile);
+ }
+ inputStream.close();
+ // parse processes
+ return readProcesses(tmpDir);
+ }
+
+ private static List<BPELProcess> readProcesses(File dir) {
+ List<ProcessConf> processes = deploy(dir);
+ List<BPELProcess> result = new ArrayList<BPELProcess>();
+ for (ProcessConf ODEprocess: processes) {
+ BPELProcess process = new BPELProcess();
+ process.setId(ODEprocess.getProcessId().toString());
+ for (Endpoint endpoint: ODEprocess.getProvideEndpoints().values()) {
+ process.setName(endpoint.serviceName.toString());
+ process.setPackageName(endpoint.serviceName.getNamespaceURI());
+ }
+ process.setProcessConf(ODEprocess);
+ System.out.println("Adding process " + process.getId());
+ result.add(process);
+ }
+ return result;
+ }
+
+ public void setPackageBuilder(PackageBuilder packageBuilder) {
+ this.packageBuilder = packageBuilder;
+ }
+
+ private static List<ProcessConf> deploy(File deploymentUnitDirectory) {
+ int version = 1;
+ // Create the DU and compile/scan it before acquiring lock.
+ final DeploymentUnitDir du = new DeploymentUnitDir(deploymentUnitDirectory);
+ try {
+ du.compile();
+ } catch (CompilationException ce) {
+ throw new ContextException("Deployment failed due to compile errors", ce);
+ }
+
+ du.scan();
+ final DeployDocument dd = du.getDeploymentDescriptor();
+ final List<ProcessConf> processes = new ArrayList<ProcessConf>();
+
+ for (TDeployment.Process processDD : dd.getDeploy().getProcessList()) {
+ QName pid = toPid(processDD.getName(), version);
+ ProcessConfImpl pconf = new ProcessConfImpl(
+ pid, processDD.getName(), version, du, processDD, new Date(),
+ calcInitialProperties(processDD), ProcessState.ACTIVE,
+ new EndpointReferenceContext() {
+ public EndpointReference resolveEndpointReference(Element element) {
+ return null;
+ }
+ public EndpointReference convertEndpoint(QName qName, Element element) {
+ return null;
+ }
+ @SuppressWarnings("unchecked")
+ public Map getConfigLookup(EndpointReference epr) {
+ return Collections.EMPTY_MAP;
+ }
+ }
+ );
+ processes.add(pconf);
+ }
+ return processes;
+ }
+
+ public static Map<QName, Node> calcInitialProperties(TDeployment.Process dd) {
+ HashMap<QName, Node> ret = new HashMap<QName, Node>();
+ if (dd.getPropertyList().size() > 0) {
+ for (TDeployment.Process.Property property : dd.getPropertyList()) {
+ Element elmtContent = DOMUtils.getElementContent(property.getDomNode());
+ if (elmtContent != null) {
+ // We'll need DOM Level 3
+ Document doc = DOMUtils.newDocument();
+ doc.appendChild(doc.importNode(elmtContent, true));
+ ret.put(property.getName(), doc.getDocumentElement());
+ } else
+ ret.put(property.getName(), property.getDomNode().getFirstChild());
+
+ }
+ }
+ return ret;
+ }
+
+ private static QName toPid(QName processType, long version) {
+ return new QName(processType.getNamespaceURI(), processType.getLocalPart() + "-" + version);
+ }
+
+ public static byte[] getBytesFromFile(File file) throws IOException {
+ InputStream is = new FileInputStream(file);
+ long length = file.length();
+ byte[] bytes = new byte[(int)length];
+ int offset = 0;
+ int numRead = 0;
+ while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
+ offset += numRead;
+ }
+ is.close();
+ return bytes;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/apache/ode/store/DroolsProcessStore.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/apache/ode/store/DroolsProcessStore.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/apache/ode/store/DroolsProcessStore.java 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,182 @@
+package org.apache.ode.store;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+
+import org.apache.ode.bpel.iapi.ProcessConf;
+import org.apache.ode.bpel.iapi.ProcessState;
+import org.apache.ode.bpel.iapi.ProcessStore;
+import org.apache.ode.bpel.iapi.ProcessStoreListener;
+import org.drools.RuleBase;
+import org.drools.definition.process.Process;
+import org.drools.ode.core.BPELProcess;
+import org.drools.ode.instance.EmbeddedBPELServer;
+import org.drools.rule.Package;
+import org.w3c.dom.Node;
+
+public class DroolsProcessStore implements ProcessStore {
+
+ private Map<QName, ProcessConf> processes = new HashMap<QName, ProcessConf>();
+ private Map<String, DeploymentUnitDir> deploymentUnits = new HashMap<String, DeploymentUnitDir>();
+ private EmbeddedBPELServer server;
+
+ public DroolsProcessStore(EmbeddedBPELServer server) {
+ this.server = server;
+ }
+
+ public ProcessConf getProcessConfiguration(QName processId) {
+ return processes.get(processId);
+ }
+
+ public List<QName> getProcesses() {
+ return new ArrayList<QName>(processes.keySet());
+ }
+
+ public void setKnowledgeBase(RuleBase ruleBase) {
+ for (Package kpackage: ruleBase.getPackages()) {
+ for (Process process: kpackage.getRuleFlows().values()) {
+ if (BPELProcess.ODE_TYPE.equals(process.getType())) {
+ BPELProcess bpelProcess = (BPELProcess) process;
+ ProcessConf processConf = bpelProcess.getProcessConf();
+ if (bpelProcess.getProcessConf() == null) {
+ try {
+ List<BPELProcess> processes = BPELResourceTypeBuilder.readProcessesFromJar(
+ new ByteArrayInputStream(bpelProcess.getBPELJar()), process.getName());
+ for (BPELProcess p: processes) {
+ if (p.getId().equals(bpelProcess.getId())) {
+ processConf = p.getProcessConf();
+ bpelProcess.setProcessConf(processConf);
+ break;
+ }
+ }
+ } catch (Throwable t) {
+ System.err.println("Could not initialize BPEL process " + process.getId());
+ t.printStackTrace();
+ }
+ }
+ if (processConf != null) {
+ processes.put(processConf.getProcessId(), processConf);
+ server.register(processConf);
+ } else {
+ System.err.println("BPEL process not found: " + process.getId());
+ }
+ }
+ }
+ }
+ // TODO: add listener for dynamically added processes
+ }
+
+// protected List<ProcessConfImpl> load(DeploymentUnitDAO dudao) {
+// File dudir = new File(dudao.getDeploymentUnitDir());
+// if (dudir == null || !dudir.exists()) {
+// throw new IllegalArgumentException("Deployed directory " + dudir + " no longer there!");
+// }
+// DeploymentUnitDir dud = new DeploymentUnitDir(dudir);
+// dud.scan();
+//
+// ArrayList<ProcessConfImpl> loaded = new ArrayList<ProcessConfImpl>();
+// deploymentUnits.put(dud.getName(), dud);
+// long version = 0;
+// for (ProcessConfDAO p : dudao.getProcesses()) {
+// TDeployment.Process pinfo = dud.getProcessDeployInfo(p.getType());
+// if (pinfo == null) {
+// System.err.println("Cannot load " + p.getPID() + "; cannot find descriptor.");
+// continue;
+// }
+// Map<QName, Node> props = calcInitialProperties(pinfo);
+// ProcessConfImpl pconf = new ProcessConfImpl(
+// p.getPID(), p.getType(), p.getVersion(), dud, pinfo,
+// dudao.getDeployDate(), props, p.getState(), null);
+// version = p.getVersion();
+// processes.put(pconf.getProcessId(), pconf);
+// loaded.add(pconf);
+// }
+// // All processes and the DU have the same version
+// dud.setVersion(version);
+// return loaded;
+// }
+//
+// public static Map<QName, Node> calcInitialProperties(TDeployment.Process dd) {
+// HashMap<QName, Node> ret = new HashMap<QName, Node>();
+// if (dd.getPropertyList().size() > 0) {
+// for (TDeployment.Process.Property property : dd.getPropertyList()) {
+// Element elmtContent = DOMUtils.getElementContent(property.getDomNode());
+// if (elmtContent != null) {
+// // We'll need DOM Level 3
+// Document doc = DOMUtils.newDocument();
+// doc.appendChild(doc.importNode(elmtContent, true));
+// ret.put(property.getName(), doc.getDocumentElement());
+// } else
+// ret.put(property.getName(), property.getDomNode().getFirstChild());
+//
+// }
+// }
+// return ret;
+// }
+
+ public List<QName> listProcesses(String packageName) {
+ DeploymentUnitDir du = deploymentUnits.get(packageName);
+ if (du == null) {
+ return null;
+ }
+ return toPids(du.getProcessNames(), du.getVersion());
+ }
+
+ public Collection<String> getPackages() {
+ return new ArrayList<String>(deploymentUnits.keySet());
+ }
+
+ private List<QName> toPids(Collection<QName> processTypes, long version) {
+ ArrayList<QName> result = new ArrayList<QName>();
+ for (QName pqName : processTypes) {
+ result.add(toPid(pqName, version));
+ }
+ return result;
+ }
+
+ private QName toPid(QName processType, long version) {
+ return new QName(processType.getNamespaceURI(), processType.getLocalPart() + "-" + version);
+ }
+
+ public void registerListener(ProcessStoreListener listener) {
+ }
+
+ public void unregisterListener(ProcessStoreListener arg0) {
+ }
+
+ public Collection<QName> deploy(File arg0) {
+ throw new UnsupportedOperationException();
+ }
+
+ public long getCurrentVersion() {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setProperty(QName arg0, QName arg1, String arg2) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setProperty(QName arg0, QName arg1, Node arg2) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setRetiredPackage(String arg0, boolean arg1) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setState(QName arg0, ProcessState arg1) {
+ throw new UnsupportedOperationException();
+ }
+
+ public Collection<QName> undeploy(File arg0) {
+ throw new UnsupportedOperationException();
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/core/BPELNode.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/core/BPELNode.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/core/BPELNode.java 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,9 @@
+package org.drools.ode.core;
+
+import org.drools.workflow.core.impl.NodeImpl;
+
+public class BPELNode extends NodeImpl {
+
+ private static final long serialVersionUID = 4L;
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/core/BPELProcess.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/core/BPELProcess.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/core/BPELProcess.java 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,39 @@
+package org.drools.ode.core;
+
+import org.apache.ode.bpel.iapi.ProcessConf;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.workflow.core.impl.WorkflowProcessImpl;
+
+public class BPELProcess extends WorkflowProcessImpl {
+
+ public static final String ODE_TYPE = "ODE";
+
+ private static final long serialVersionUID = 4L;
+
+ private byte[] bpelJar;
+ private transient ProcessConf processConf;
+
+ public BPELProcess() {
+ setType(ODE_TYPE);
+ VariableScope variableScope = new VariableScope();
+ addContext(variableScope);
+ setDefaultContext(variableScope);
+ }
+
+ public ProcessConf getProcessConf() {
+ return processConf;
+ }
+
+ public void setProcessConf(ProcessConf processConf) {
+ this.processConf = processConf;
+ }
+
+ public byte[] getBPELJar() {
+ return bpelJar;
+ }
+
+ public void setBPELJar(byte[] bpelJar) {
+ this.bpelJar = bpelJar;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/BPELEventListener.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/BPELEventListener.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/BPELEventListener.java 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,126 @@
+package org.drools.ode.instance;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.ode.bpel.evt.ActivityExecEndEvent;
+import org.apache.ode.bpel.evt.ActivityExecStartEvent;
+import org.apache.ode.bpel.evt.BpelEvent;
+import org.apache.ode.bpel.evt.ProcessCompletionEvent;
+import org.apache.ode.bpel.evt.ProcessInstanceStartedEvent;
+import org.apache.ode.bpel.iapi.BpelEventListener;
+import org.drools.WorkingMemory;
+import org.drools.common.EventSupport;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.definition.process.Node;
+import org.drools.definition.process.NodeContainer;
+import org.drools.ode.core.BPELNode;
+import org.drools.runtime.process.NodeInstance;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.workflow.core.impl.NodeContainerImpl;
+import org.drools.workflow.instance.NodeInstanceContainer;
+
+public class BPELEventListener implements BpelEventListener {
+
+ private WorkingMemory workingMemory;
+ private Map<Long, Long> processInstanceIdMapping = new HashMap<Long, Long>();
+
+ public BPELEventListener(WorkingMemory workingMemory) {
+ this.workingMemory = workingMemory;
+ }
+
+ public void onEvent(BpelEvent event) {
+ try {
+ if (event instanceof ProcessInstanceStartedEvent) {
+ ProcessInstanceStartedEvent startEvent = (ProcessInstanceStartedEvent) event;
+ BPELProcessInstance processInstance = new BPELProcessInstance();
+ processInstance.setODEProcessInstanceIdODE(startEvent.getProcessInstanceId());
+ processInstance.setProcessId(startEvent.getProcessId().toString());
+ processInstance.internalSetState(ProcessInstance.STATE_ACTIVE);
+ processInstance.setWorkingMemory((InternalWorkingMemory) workingMemory);
+ ((InternalWorkingMemory) workingMemory).getProcessInstanceManager().addProcessInstance(processInstance);
+ processInstanceIdMapping.put(startEvent.getProcessInstanceId(), processInstance.getId());
+ ((EventSupport) workingMemory).getRuleFlowEventSupport().fireBeforeRuleFlowProcessStarted(processInstance, null);
+ ((EventSupport) workingMemory).getRuleFlowEventSupport().fireAfterRuleFlowProcessStarted(processInstance, null);
+ } else if (event instanceof ProcessCompletionEvent) {
+ ProcessCompletionEvent completionEvent = (ProcessCompletionEvent) event;
+ BPELProcessInstance processInstance = findProcessInstance(completionEvent.getProcessInstanceId());
+ processInstance.setState(ProcessInstance.STATE_COMPLETED);
+ } else if (event instanceof ActivityExecStartEvent) {
+ ActivityExecStartEvent execEvent = (ActivityExecStartEvent) event;
+ BPELProcessInstance processInstance = findProcessInstance(execEvent.getProcessInstanceId());
+ BPELNodeInstance nodeInstance = createNodeInstance(
+ processInstance, execEvent.getActivityId(),
+ execEvent.getActivityDeclarationId(),
+ execEvent.getActivityName());
+ ((EventSupport) workingMemory).getRuleFlowEventSupport().fireBeforeRuleFlowNodeTriggered(nodeInstance, null);
+ ((EventSupport) workingMemory).getRuleFlowEventSupport().fireAfterRuleFlowNodeTriggered(nodeInstance, null);
+ } else if (event instanceof ActivityExecEndEvent) {
+ ActivityExecEndEvent execEvent = (ActivityExecEndEvent) event;
+ BPELProcessInstance processInstance = findProcessInstance(execEvent.getProcessInstanceId());
+ BPELNodeInstance nodeInstance = createNodeInstance(
+ processInstance, execEvent.getActivityId(),
+ execEvent.getActivityDeclarationId(),
+ execEvent.getActivityName());
+ ((EventSupport) workingMemory).getRuleFlowEventSupport().fireBeforeRuleFlowNodeLeft(nodeInstance, null);
+ ((EventSupport) workingMemory).getRuleFlowEventSupport().fireAfterRuleFlowNodeLeft(nodeInstance, null);
+ }
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+ }
+
+ private BPELProcessInstance findProcessInstance(long id) {
+ Long processInstanceId = processInstanceIdMapping.get(id);
+ return (BPELProcessInstance) ((InternalWorkingMemory) workingMemory)
+ .getProcessInstanceManager().getProcessInstance(processInstanceId);
+ }
+
+ private BPELNodeInstance createNodeInstance(BPELProcessInstance processInstance, long id, long nodeId, final String nodeName) {
+ BPELNodeInstance result = new BPELNodeInstance();
+ result.setId(id);
+ result.setNodeId(nodeId);
+ result.setProcessInstance(processInstance);
+ result.setNodeInstanceContainer(new NodeInstanceContainer() {
+ public NodeContainer getNodeContainer() {
+ return new NodeContainerImpl() {
+ private static final long serialVersionUID = 4L;
+ public Node internalGetNode(long nodeId) {
+ BPELNode node = new BPELNode();
+ node.setId(nodeId);
+ node.setName(nodeName);
+ return node;
+ }
+ };
+ }
+ public Collection<NodeInstance> getNodeInstances() {
+ return null;
+ }
+ public void addNodeInstance(org.drools.workflow.instance.NodeInstance nodeInstance) {
+ }
+ public org.drools.workflow.instance.NodeInstance getFirstNodeInstance(long nodeId) {
+ return null;
+ }
+ public org.drools.workflow.instance.NodeInstance getNodeInstance(Node node) {
+ return null;
+ }
+ public Collection<org.drools.workflow.instance.NodeInstance> getNodeInstances(boolean recursive) {
+ return null;
+ }
+ public void removeNodeInstance(org.drools.workflow.instance.NodeInstance nodeInstance) {
+ }
+ public void nodeInstanceCompleted(org.drools.workflow.instance.NodeInstance nodeInstance, String outType) {
+ }
+ });
+ return result;
+ }
+
+ public void shutdown() {
+ }
+
+ public void startup(Properties p) {
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/BPELNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/BPELNodeInstance.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/BPELNodeInstance.java 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,14 @@
+package org.drools.ode.instance;
+
+import org.drools.runtime.process.NodeInstance;
+import org.drools.workflow.instance.impl.NodeInstanceImpl;
+
+public class BPELNodeInstance extends NodeInstanceImpl {
+
+ private static final long serialVersionUID = 4L;
+
+ public void internalTrigger(NodeInstance from, String type) {
+ throw new UnsupportedOperationException();
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/BPELProcessInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/BPELProcessInstance.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/BPELProcessInstance.java 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,28 @@
+package org.drools.ode.instance;
+
+import org.drools.ode.core.BPELProcess;
+import org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl;
+
+public class BPELProcessInstance extends WorkflowProcessInstanceImpl {
+
+ private static final long serialVersionUID = 4L;
+
+ private Long ODEProcessInstanceId;
+
+ public BPELProcess getBPELProcess() {
+ return (BPELProcess) getProcess();
+ }
+
+ public Long getODEProcessInstanceId() {
+ return ODEProcessInstanceId;
+ }
+
+ public void setODEProcessInstanceIdODE(Long ODEProcessInstanceId) {
+ this.ODEProcessInstanceId = ODEProcessInstanceId;
+ }
+
+ protected void internalStart() {
+ // Do nothing
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/BPELProcessInstanceFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/BPELProcessInstanceFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/BPELProcessInstanceFactory.java 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,78 @@
+package org.drools.ode.instance;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+
+import org.apache.ode.utils.DOMUtils;
+import org.drools.WorkingMemory;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.definition.process.Process;
+import org.drools.process.instance.ProcessInstance;
+import org.drools.process.instance.ProcessInstanceFactory;
+import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
+
+public class BPELProcessInstanceFactory implements ProcessInstanceFactory, Externalizable {
+
+ private static final long serialVersionUID = 4L;
+
+ private synchronized EmbeddedBPELServer initServer(WorkingMemory workingMemory) {
+ EmbeddedBPELServer server = (EmbeddedBPELServer)
+ workingMemory.getEnvironment().get("ODE-Server");
+ if (server == null) {
+ System.out.println("Initializing BPEL server");
+ server = new EmbeddedBPELServer(workingMemory);
+ BPELEventListener listener = new BPELEventListener(workingMemory);
+ server.addEventListener(listener);
+ workingMemory.getEnvironment().set("ODE-Server", server);
+ }
+ return server;
+ }
+
+ public ProcessInstance createProcessInstance(Process process,
+ WorkingMemory workingMemory,
+ Map<String, Object> parameters) {
+ EmbeddedBPELServer server = initServer(workingMemory);
+ BPELProcessInstance processInstance = new BPELProcessInstance();
+ processInstance.setWorkingMemory( (InternalWorkingMemory) workingMemory );
+ processInstance.setProcess( process );
+
+ String operation = (String) parameters.get("Operation");
+ String bodyString = (String) parameters.get("Body");
+ System.out.println("Starting BPEL process "
+ + process.getName() + " [" + process.getPackageName() + "]");
+ try {
+ Element body = DOMUtils.stringToDOM(bodyString);
+ QName processQName = new QName(process.getPackageName(),
+ process.getName().substring(process.getPackageName().length() + 2));
+ try {
+ server.invoke(processQName, operation, body);
+ server.waitForBlocking();
+ } catch (Exception e) {
+ System.err.println("Could not invoke service " + processQName
+ + " -> " + operation + " with " + bodyString);
+ e.printStackTrace();
+ }
+ } catch (SAXException e) {
+ System.err.println("Could not parse 'Body' " + bodyString);
+ e.printStackTrace();
+ } catch (IOException e) {
+ System.err.println("Could not parse 'Body' " + bodyString);
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ }
+
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/EmbeddedBPELServer.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/EmbeddedBPELServer.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/main/java/org/drools/ode/instance/EmbeddedBPELServer.java 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,368 @@
+package org.drools.ode.instance;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.ThreadFactory;
+
+import javax.sql.DataSource;
+import javax.transaction.TransactionManager;
+import javax.wsdl.Definition;
+import javax.wsdl.PortType;
+import javax.xml.namespace.QName;
+
+import org.apache.axis2.engine.AxisConfiguration;
+import org.apache.ode.axis2.ExternalService;
+import org.apache.ode.axis2.SoapExternalService;
+import org.apache.ode.axis2.httpbinding.HttpExternalService;
+import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
+import org.apache.ode.bpel.dao.BpelDAOConnectionFactoryJDBC;
+import org.apache.ode.bpel.engine.BpelServerImpl;
+import org.apache.ode.bpel.epr.EndpointFactory;
+import org.apache.ode.bpel.iapi.BindingContext;
+import org.apache.ode.bpel.iapi.BpelEventListener;
+import org.apache.ode.bpel.iapi.ContextException;
+import org.apache.ode.bpel.iapi.Endpoint;
+import org.apache.ode.bpel.iapi.EndpointReference;
+import org.apache.ode.bpel.iapi.EndpointReferenceContext;
+import org.apache.ode.bpel.iapi.Message;
+import org.apache.ode.bpel.iapi.MessageExchangeContext;
+import org.apache.ode.bpel.iapi.MyRoleMessageExchange;
+import org.apache.ode.bpel.iapi.PartnerRoleChannel;
+import org.apache.ode.bpel.iapi.PartnerRoleMessageExchange;
+import org.apache.ode.bpel.iapi.ProcessConf;
+import org.apache.ode.bpel.iapi.Scheduler;
+import org.apache.ode.bpel.memdao.BpelDAOConnectionFactoryImpl;
+import org.apache.ode.dao.jpa.BPELDAOConnectionFactoryImpl;
+import org.apache.ode.il.EmbeddedGeronimoFactory;
+import org.apache.ode.il.MockScheduler;
+import org.apache.ode.store.DroolsProcessStore;
+import org.apache.ode.utils.DOMUtils;
+import org.apache.ode.utils.GUID;
+import org.apache.ode.utils.wsdl.WsdlUtils;
+import org.drools.WorkingMemory;
+import org.hsqldb.jdbc.jdbcDataSource;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public class EmbeddedBPELServer {
+
+ private BpelServerImpl _server;
+ private DroolsProcessStore _store;
+ private TransactionManager _txManager;
+ private DataSource _dataSource;
+ private SchedulerWrapper _scheduler;
+ private BpelDAOConnectionFactory _daoCF;
+ private EndpointReferenceContext _eprContext;
+ private MessageExchangeContext _mexContext;
+ private BindingContext _bindContext;
+ private HashMap<String, QName> _activated = new HashMap<String, QName>();
+ protected ExecutorService _executorService;
+
+ public EmbeddedBPELServer(WorkingMemory workingMemory) {
+ try {
+ _server = new BpelServerImpl();
+ createTransactionManager();
+ createDataSource();
+ createDAOConnection();
+ createScheduler();
+ if (_daoCF == null) {
+ throw new RuntimeException("No DAO");
+ }
+ _server.setDaoConnectionFactory(_daoCF);
+ _server.setInMemDaoConnectionFactory(new BpelDAOConnectionFactoryImpl(_scheduler));
+ if (_scheduler == null)
+ throw new RuntimeException("No scheduler");
+ _store = new DroolsProcessStore(this);
+ _server.setScheduler(_scheduler);
+ _server.setEndpointReferenceContext(createEndpointReferenceContext());
+ _server.setMessageExchangeContext(createMessageExchangeContext());
+ _server.setBindingContext(createBindingContext());
+ ThreadFactory threadFactory = new ThreadFactory() {
+ int threadNumber = 0;
+ public Thread newThread(Runnable r) {
+ threadNumber += 1;
+ Thread t = new Thread(r, "ODEServer-"+threadNumber);
+ t.setDaemon(true);
+ return t;
+ }
+ };
+ _executorService = Executors.newCachedThreadPool(threadFactory);
+ _server.init();
+ _server.start();
+ _store.setKnowledgeBase(workingMemory.getRuleBase());
+ } catch (Exception except) {
+ System.err.println(except.getMessage());
+ except.printStackTrace(System.err);
+ throw new RuntimeException(except);
+ }
+ }
+
+ public Collection<QName> deploy(File deploymentUnitDirectory) {
+ Collection<QName> pids = _store.deploy(deploymentUnitDirectory);
+ for (QName pid: pids)
+ _server.register(_store.getProcessConfiguration(pid));
+ return pids;
+ }
+
+ public void register(ProcessConf processConf) {
+ _server.register(processConf);
+ }
+
+ public void invoke(QName serviceName, String opName, Element body) throws Exception {
+ try {
+ String messageId = new GUID().toString();
+ MyRoleMessageExchange mex;
+
+ _txManager.begin();
+ mex = _server.getEngine().createMessageExchange("" + messageId, serviceName, opName);
+ if (mex.getOperation() == null)
+ throw new Exception("Did not find operation " + opName + " on service " + serviceName);
+ Message request = mex.createMessage(mex.getOperation().getInput().getMessage().getQName());
+ request.setMessage(body);
+ mex.invoke(request);
+ mex.complete();
+ _txManager.commit();
+ } catch (Exception except) {
+ _txManager.rollback();
+ throw except;
+ }
+ }
+
+ public TransactionManager getTransactionManager() {
+ return _txManager;
+ }
+
+ public void waitForBlocking() {
+ try {
+ long delay = 1000;
+ while (true) {
+ // Be warned: ugly hack and not safe for slow CPUs.
+ long cutoff = System.currentTimeMillis() - delay;
+ if (_scheduler._nextSchedule < cutoff)
+ break;
+ Thread.sleep(delay);
+ }
+ } catch (InterruptedException except) { }
+ }
+
+ public void shutdown() throws Exception {
+ _server.stop();
+ _scheduler.stop();
+ _scheduler.shutdown();
+ }
+
+ protected TransactionManager createTransactionManager() throws Exception {
+ EmbeddedGeronimoFactory factory = new EmbeddedGeronimoFactory();
+ _txManager = factory.getTransactionManager();
+ _txManager.setTransactionTimeout(30);
+ return _txManager;
+ }
+
+ protected DataSource createDataSource() throws Exception {
+ jdbcDataSource hsqlds = new jdbcDataSource();
+ hsqlds.setDatabase("jdbc:hsqldb:mem:" + new GUID().toString());
+ hsqlds.setUser("sa");
+ hsqlds.setPassword("");
+ _dataSource = hsqlds;
+ return _dataSource;
+ }
+
+ protected Scheduler createScheduler() throws Exception {
+ if (_server == null)
+ throw new RuntimeException("No BPEL server");
+ if (_txManager == null)
+ throw new RuntimeException("No transaction manager");
+ if (_dataSource == null)
+ throw new RuntimeException("No data source");
+ _scheduler = new SchedulerWrapper(_server, _txManager, _dataSource);
+ return _scheduler;
+ }
+
+ protected BpelDAOConnectionFactory createDAOConnection() throws Exception {
+ if (_txManager == null)
+ throw new RuntimeException("No transaction manager");
+ if (_dataSource == null)
+ throw new RuntimeException("No data source");
+
+ BpelDAOConnectionFactoryJDBC daoCF = new BPELDAOConnectionFactoryImpl();
+ daoCF.setDataSource(_dataSource);
+ daoCF.setTransactionManager(_txManager);
+ Properties props = new Properties();
+ props.put("openjpa.Log", "log4j");
+ props.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=false)");
+ daoCF.init(props);
+ _daoCF = daoCF;
+
+ return _daoCF;
+ }
+
+ protected EndpointReferenceContext createEndpointReferenceContext() {
+ _eprContext = new EndpointReferenceContext() {
+ public EndpointReference resolveEndpointReference(Element element) {
+ return EndpointFactory.createEndpoint(element);
+ }
+ public EndpointReference convertEndpoint(QName qName, Element element) {
+ System.out.println("convertEndpoint " + qName + " " + element);
+ return null;
+ }
+ @SuppressWarnings("unchecked")
+ public Map getConfigLookup(EndpointReference epr) {
+ System.out.println("getConfigLookup " + epr);
+ return Collections.EMPTY_MAP;
+ }
+ };
+ return _eprContext;
+ }
+
+ protected MessageExchangeContext createMessageExchangeContext() {
+ _mexContext = new MessageExchangeContext() {
+ public void invokePartner(PartnerRoleMessageExchange mex) {
+ ExternalService service = (ExternalService) mex.getChannel();
+ System.out.println("The service to invoke is the external service " + service.getServiceName()+":"+service.getPortName());
+ service.invoke(mex);
+ }
+ public void onAsyncReply(MyRoleMessageExchange myRoleMex) { }
+ };
+ return _mexContext;
+ }
+
+ protected BindingContext createBindingContext() {
+ _bindContext = new BindingContext() {
+ public EndpointReference activateMyRoleEndpoint(QName processId, Endpoint myRoleEndpoint) {
+ final Document doc = DOMUtils.newDocument();
+ Element serviceRef = doc.createElementNS(EndpointReference.SERVICE_REF_QNAME.getNamespaceURI(),
+ EndpointReference.SERVICE_REF_QNAME.getLocalPart());
+ serviceRef.appendChild(doc.createTextNode(myRoleEndpoint.serviceName.toString()));
+ doc.appendChild(serviceRef);
+ _activated.put(myRoleEndpoint.toString(), processId);
+ return new EndpointReference() {
+ public Document toXML() { return doc; }
+ };
+ }
+
+ public void deactivateMyRoleEndpoint(Endpoint myRoleEndpoint) {
+ _activated.remove(myRoleEndpoint);
+ }
+
+ public PartnerRoleChannel createPartnerRoleChannel(QName processId, PortType portType,
+ final Endpoint initialPartnerEndpoint) {
+ System.out.println("createPartnerRoleChannel " + initialPartnerEndpoint);
+ ProcessConf pconf = _store.getProcessConfiguration(processId);
+ Definition wsdl = pconf.getDefinitionForService(initialPartnerEndpoint.serviceName);
+ if (wsdl == null) {
+ throw new ContextException("Cannot find definition for service " + initialPartnerEndpoint.serviceName
+ + " in the context of process "+processId);
+ }
+ return createExternalService(pconf, initialPartnerEndpoint.serviceName, initialPartnerEndpoint.portName);
+//
+// final EndpointReference epr = new EndpointReference() {
+// public Document toXML() {
+// Document doc = DOMUtils.newDocument();
+// Element serviceRef = doc.createElementNS(EndpointReference.SERVICE_REF_QNAME.getNamespaceURI(),
+// EndpointReference.SERVICE_REF_QNAME.getLocalPart());
+// serviceRef.appendChild(doc.createTextNode(initialPartnerEndpoint.serviceName.toString()));
+// doc.appendChild(serviceRef);
+// return doc;
+// }
+// };
+// _endpoints.put(initialPartnerEndpoint.serviceName.toString(), epr);
+// return new PartnerRoleChannel() {
+// public EndpointReference getInitialEndpointReference() { return epr; }
+// public void close() { };
+// };
+ }
+ };
+ return _bindContext;
+ }
+
+ public ExternalService createExternalService(ProcessConf pconf, QName serviceName, String portName) throws ContextException {
+ ExternalService extService = null;
+ Definition def = pconf.getDefinitionForService(serviceName);
+ try {
+ if (WsdlUtils.useHTTPBinding(def, serviceName, portName)) {
+ extService = new HttpExternalService(
+ pconf, serviceName, portName, _executorService, _scheduler, _server);
+ } else if (WsdlUtils.useSOAPBinding(def, serviceName, portName)) {
+ extService = new SoapExternalService(
+ pconf, serviceName, portName, _executorService, new AxisConfiguration(), _scheduler, _server);
+ }
+ } catch (Exception ex) {
+ throw new ContextException("Error creating external service! name:"+serviceName+", port:"+portName, ex);
+ }
+
+ // if not SOAP nor HTTP binding
+ if (extService==null) {
+ throw new ContextException("Only SOAP and HTTP binding supported!");
+ }
+ return extService;
+ }
+
+ public void addEventListener(BpelEventListener listener) {
+ _server.registerBpelEventListener(listener);
+ }
+
+
+ private class SchedulerWrapper implements Scheduler {
+
+ MockScheduler _scheduler;
+ long _nextSchedule;
+
+ SchedulerWrapper(BpelServerImpl server, TransactionManager txManager, DataSource dataSource) {
+ ExecutorService executorService = Executors.newCachedThreadPool();
+ _scheduler = new MockScheduler(_txManager);
+ _scheduler.setExecutorSvc(executorService);
+ _scheduler.setJobProcessor(server);
+ }
+
+ public String schedulePersistedJob(Map<String,Object>jobDetail,Date when) throws ContextException {
+ String jobId = _scheduler.schedulePersistedJob(jobDetail, when);
+ _nextSchedule = when == null ? System.currentTimeMillis() : when.getTime();
+ return jobId;
+ }
+
+ public String scheduleVolatileJob(boolean transacted, Map<String,Object> jobDetail) throws ContextException {
+ String jobId = _scheduler.scheduleVolatileJob(transacted, jobDetail);
+ _nextSchedule = System.currentTimeMillis();
+ return jobId;
+ }
+
+ public void cancelJob(String jobId) throws ContextException {
+ _scheduler.cancelJob(jobId);
+ }
+
+ public <T> T execTransaction(Callable<T> transaction) throws Exception, ContextException {
+ return _scheduler.execTransaction(transaction);
+ }
+
+ public <T> Future<T> execIsolatedTransaction(Callable<T> transaction) throws Exception, ContextException {
+ return _scheduler.execIsolatedTransaction(transaction);
+ }
+
+ public boolean isTransacted() {
+ return _scheduler.isTransacted();
+ }
+
+ public void start() { _scheduler.start(); }
+ public void stop() { _scheduler.stop(); }
+ public void shutdown() { _scheduler.shutdown(); }
+
+ public void registerSynchronizer(Synchronizer synch) throws ContextException {
+ _scheduler.registerSynchronizer(synch);
+ }
+
+ public void setJobProcessor(JobProcessor processor) throws ContextException {
+ _scheduler.setJobProcessor(processor);
+
+ }
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/main/resources/META-INF/ODEProcessInstanceFactory.conf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/main/resources/META-INF/ODEProcessInstanceFactory.conf (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/main/resources/META-INF/ODEProcessInstanceFactory.conf 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,7 @@
+// we use MVEL to configure our process, simply populate a map, which will be added to the main registry
+import org.drools.ode.core.BPELProcess;
+import org.drools.ode.instance.BPELProcessInstanceFactory;
+
+[
+ BPELProcess : new BPELProcessInstanceFactory(),
+]
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/main/resources/META-INF/drools.rulebase.conf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/main/resources/META-INF/drools.rulebase.conf (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/main/resources/META-INF/drools.rulebase.conf 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1 @@
+processInstanceFactoryRegistry=ODEProcessInstanceFactory.conf
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/org/drools/ode/DroolsBPELGuvnorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/org/drools/ode/DroolsBPELGuvnorTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/org/drools/ode/DroolsBPELGuvnorTest.java 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,51 @@
+package org.drools.ode;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.apache.ode.store.BPELResourceTypeBuilder;
+import org.drools.KnowledgeBase;
+import org.drools.agent.KnowledgeAgent;
+import org.drools.agent.KnowledgeAgentFactory;
+import org.drools.builder.ResourceType;
+import org.drools.compiler.ResourceTypeBuilderRegistry;
+import org.drools.io.ResourceFactory;
+import org.drools.logger.KnowledgeRuntimeLogger;
+import org.drools.logger.KnowledgeRuntimeLoggerFactory;
+import org.drools.ode.core.BPELProcess;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+/**
+ * This is a sample file to launch a process.
+ */
+public class DroolsBPELGuvnorTest extends TestCase {
+
+ public void testDroolsBPELProcess() throws Exception {
+ KnowledgeBase kbase = readKnowledgeBase();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ KnowledgeRuntimeLogger logger =
+ KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "audit");
+ // start a new process instance
+ Map<String, Object> parameters = new HashMap<String, Object>();
+ parameters.put("Operation", "hello");
+ parameters.put("Body",
+ "<ns1:hello xmlns:ns1=\"http://ode/bpel/unit-test.wsdl\">\n" +
+ " <TestPart xmlns=\"\">Hello</TestPart>\n" +
+ "</ns1:hello>");
+ ksession.startProcess("{http://ode/bpel/unit-test}HelloWorld3-1", parameters);
+ Thread.sleep(3000);
+ logger.close();
+ }
+
+ private static KnowledgeBase readKnowledgeBase() throws Exception {
+ ResourceType bpelType = new ResourceType(BPELProcess.ODE_TYPE, "ODE BPEL Process");
+ ResourceTypeBuilderRegistry.getInstance().register(
+ bpelType, new BPELResourceTypeBuilder());
+ KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent("Guvnor");
+ kagent.applyChangeSet(ResourceFactory.newClassPathResource("ChangeSet.xml"));
+ return kagent.getKnowledgeBase();
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/org/drools/ode/DroolsBPELTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/org/drools/ode/DroolsBPELTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/org/drools/ode/DroolsBPELTest.java 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,63 @@
+package org.drools.ode;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.apache.ode.store.BPELResourceTypeBuilder;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderError;
+import org.drools.builder.KnowledgeBuilderErrors;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.compiler.ResourceTypeBuilderRegistry;
+import org.drools.io.ResourceFactory;
+import org.drools.logger.KnowledgeRuntimeLogger;
+import org.drools.logger.KnowledgeRuntimeLoggerFactory;
+import org.drools.ode.core.BPELProcess;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+/**
+ * This is a sample file to launch a process.
+ */
+public class DroolsBPELTest extends TestCase {
+
+ public void testDroolsBPELProcess() throws Exception {
+ KnowledgeBase kbase = readKnowledgeBase();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ KnowledgeRuntimeLogger logger =
+ KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "audit");
+ // start a new process instance
+ Map<String, Object> parameters = new HashMap<String, Object>();
+ parameters.put("Operation", "hello");
+ parameters.put("Body",
+ "<ns1:hello xmlns:ns1=\"http://ode/bpel/unit-test.wsdl\">\n" +
+ " <TestPart xmlns=\"\">Hello</TestPart>\n" +
+ "</ns1:hello>");
+ ksession.startProcess("{http://ode/bpel/unit-test}HelloWorld3-1", parameters);
+ Thread.sleep(3000);
+ logger.close();
+ }
+
+ private static KnowledgeBase readKnowledgeBase() throws Exception {
+ ResourceType bpelType = new ResourceType(BPELProcess.ODE_TYPE, "ODE BPEL Process");
+ ResourceTypeBuilderRegistry.getInstance().register(
+ bpelType, new BPELResourceTypeBuilder());
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add(ResourceFactory.newClassPathResource("HelloWorld3"), bpelType);
+ KnowledgeBuilderErrors errors = kbuilder.getErrors();
+ if (errors.size() > 0) {
+ for (KnowledgeBuilderError error: errors) {
+ System.err.println(error);
+ }
+ throw new IllegalArgumentException("Could not parse knowledge.");
+ }
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+ return kbase;
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/org/drools/ode/DroolsBPELTest2.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/org/drools/ode/DroolsBPELTest2.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/org/drools/ode/DroolsBPELTest2.java 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,63 @@
+package org.drools.ode;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.apache.ode.store.BPELResourceTypeBuilder;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderError;
+import org.drools.builder.KnowledgeBuilderErrors;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.compiler.ResourceTypeBuilderRegistry;
+import org.drools.io.ResourceFactory;
+import org.drools.logger.KnowledgeRuntimeLogger;
+import org.drools.logger.KnowledgeRuntimeLoggerFactory;
+import org.drools.ode.core.BPELProcess;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+/**
+ * This is a sample file to launch a process.
+ */
+public class DroolsBPELTest2 extends TestCase {
+
+ public void testDroolsBPELProcess() throws Exception {
+ KnowledgeBase kbase = readKnowledgeBase();
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ KnowledgeRuntimeLogger logger =
+ KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "audit");
+ // start a new process instance
+ Map<String, Object> parameters = new HashMap<String, Object>();
+ parameters.put("Operation", "hello");
+ parameters.put("Body",
+ "<ns1:hello xmlns:ns1=\"http://ode/bpel/unit-test.wsdl\">\n" +
+ " <TestPart xmlns=\"\">Hello</TestPart>\n" +
+ "</ns1:hello>");
+ ksession.startProcess("{http://ode/bpel/unit-test}HelloWorld3-1", parameters);
+ Thread.sleep(3000);
+ logger.close();
+ }
+
+ private static KnowledgeBase readKnowledgeBase() throws Exception {
+ ResourceType bpelType = new ResourceType(BPELProcess.ODE_TYPE, "ODE BPEL Process");
+ ResourceTypeBuilderRegistry.getInstance().register(
+ bpelType, new BPELResourceTypeBuilder());
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add(ResourceFactory.newClassPathResource("HelloWorld3.bpel.jar"), bpelType);
+ KnowledgeBuilderErrors errors = kbuilder.getErrors();
+ if (errors.size() > 0) {
+ for (KnowledgeBuilderError error: errors) {
+ System.err.println(error);
+ }
+ throw new IllegalArgumentException("Could not parse knowledge.");
+ }
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+ return kbase;
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/org/drools/ode/MockBPELServerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/org/drools/ode/MockBPELServerTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/test/java/org/drools/ode/MockBPELServerTest.java 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,61 @@
+package org.drools.ode;
+
+import java.io.File;
+import java.net.URI;
+import java.util.Properties;
+
+import javax.xml.namespace.QName;
+
+import junit.framework.TestCase;
+
+import org.apache.ode.bpel.evt.BpelEvent;
+import org.apache.ode.bpel.iapi.BpelEventListener;
+import org.apache.ode.utils.DOMUtils;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.compiler.PackageBuilder;
+import org.drools.ode.instance.EmbeddedBPELServer;
+
+public class MockBPELServerTest extends TestCase {
+
+ private EmbeddedBPELServer server;
+
+ protected void setUp() throws Exception {
+ PackageBuilder kbuilder = new PackageBuilder();
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackages(kbuilder.getPackages());
+
+ server = new EmbeddedBPELServer(ruleBase.newStatefulSession());
+ server.addEventListener(new BpelEventListener() {
+ public void onEvent(BpelEvent e) {
+ System.out.println(e);
+ }
+ public void startup(Properties arg0) {
+ }
+ public void shutdown() {
+ }
+ });
+ server.deploy(new File(new URI(this.getClass().getResource("/HelloWorld3").toString())));
+ }
+
+ protected void tearDown() throws Exception {
+ server.shutdown();
+ server = null;
+ }
+
+ public void testStartProcess() throws Exception {
+ String bodyString =
+ "<ns1:hello xmlns:ns1=\"http://ode/bpel/unit-test.wsdl\">\n" +
+ " <TestPart xmlns=\"\">Hello</TestPart>\n" +
+ "</ns1:hello>";
+ final String nameSpace = "http://ode/bpel/unit-test.wsdl";
+ QName processQName = new QName(nameSpace, "HelloService");
+ String operation = "hello";
+ System.out.println("operation = " + operation);
+ System.out.println("body = " + bodyString);
+ System.out.println("service = " + processQName);
+ server.invoke(processQName, operation, DOMUtils.stringToDOM(bodyString));
+ server.waitForBlocking();
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/ChangeSet.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/ChangeSet.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/ChangeSet.xml 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,7 @@
+<change-set xmlns='http://drools.org/drools-5.0/change-set'
+ xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'
+ xs:schemaLocation='http://drools.org/drools-5.0/change-set drools-change-set-5.0.xsd' >
+ <add>
+ <resource source='http://localhost:8080/drools-guvnor/org.drools.guvnor.Guvnor/package/default/LATEST' type='PKG' />
+ </add>
+</change-set>
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/HelloWorld3/HelloWorld3.bpel
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/HelloWorld3/HelloWorld3.bpel (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/HelloWorld3/HelloWorld3.bpel 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,68 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you 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.
+ -->
+<process name="HelloWorld3"
+ targetNamespace="http://ode/bpel/unit-test"
+ xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
+ xmlns:tns="http://ode/bpel/unit-test"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:test="http://ode/bpel/unit-test.wsdl"
+ queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"
+ expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0">
+
+ <import location="HelloWorld3.wsdl"
+ namespace="http://ode/bpel/unit-test.wsdl"
+ importType="http://schemas.xmlsoap.org/wsdl/" />
+
+ <partnerLinks>
+ <partnerLink name="helloPartnerLink"
+ partnerLinkType="test:HelloPartnerLinkType"
+ myRole="me" />
+ </partnerLinks>
+
+ <variables>
+ <variable name="myVar" messageType="test:HelloMessage"/>
+ <variable name="tmpVar" type="xsd:string"/>
+ </variables>
+
+ <sequence name="sequence">
+ <receive
+ name="start"
+ partnerLink="helloPartnerLink"
+ portType="test:HelloPortType"
+ operation="hello"
+ variable="myVar"
+ createInstance="yes"/>
+
+ <assign name="assign1">
+ <copy>
+ <from variable="myVar" part="TestPart"/>
+ <to variable="tmpVar"/>
+ </copy>
+ <copy>
+ <from>concat($tmpVar,' World')</from>
+ <to variable="myVar" part="TestPart"/>
+ </copy>
+ </assign>
+ <reply name="end"
+ partnerLink="helloPartnerLink"
+ portType="test:HelloPortType"
+ operation="hello"
+ variable="myVar"/>
+ </sequence>
+</process>
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/HelloWorld3/HelloWorld3.wsdl
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/HelloWorld3/HelloWorld3.wsdl (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/HelloWorld3/HelloWorld3.wsdl 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you 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.
+ -->
+
+<wsdl:definitions
+ targetNamespace="http://ode/bpel/unit-test.wsdl"
+ xmlns="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:tns="http://ode/bpel/unit-test.wsdl"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype">
+
+ <wsdl:message name="HelloMessage">
+ <wsdl:part name="TestPart" type="xsd:string"/>
+ </wsdl:message>
+
+ <wsdl:portType name="HelloPortType">
+ <wsdl:operation name="hello">
+ <wsdl:input message="tns:HelloMessage" name="TestIn"/>
+ <wsdl:output message="tns:HelloMessage" name="TestOut"/>
+ </wsdl:operation>
+ </wsdl:portType>
+
+ <wsdl:binding name="HelloSoapBinding" type="tns:HelloPortType">
+ <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="hello">
+ <soap:operation soapAction="" style="rpc"/>
+ <wsdl:input>
+ <soap:body
+ namespace="http://ode/bpel/unit-test.wsdl"
+ use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body
+ namespace="http://ode/bpel/unit-test.wsdl"
+ use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="HelloService">
+ <wsdl:port name="HelloPort" binding="tns:HelloSoapBinding">
+ <soap:address location="http://localhost:8080/ode/processes/helloWorld"/>
+ </wsdl:port>
+ </wsdl:service>
+
+ <plnk:partnerLinkType name="HelloPartnerLinkType">
+ <plnk:role name="me" portType="tns:HelloPortType"/>
+ <plnk:role name="you" portType="tns:HelloPortType"/>
+ </plnk:partnerLinkType>
+</wsdl:definitions>
+
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/HelloWorld3/deploy.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/HelloWorld3/deploy.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/HelloWorld3/deploy.xml 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,30 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you 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.
+ -->
+<deploy xmlns="http://www.apache.org/ode/schemas/dd/2007/03"
+ xmlns:pns="http://ode/bpel/unit-test"
+ xmlns:wns="http://ode/bpel/unit-test.wsdl">
+
+
+ <process name="pns:HelloWorld3">
+ <active>true</active>
+ <provide partnerLink="helloPartnerLink">
+ <service name="wns:HelloService" port="HelloPort"/>
+ </provide>
+ </process>
+</deploy>
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/HelloWorld3.bpel.jar
===================================================================
(Binary files differ)
Property changes on: labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/HelloWorld3.bpel.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/log4j.properties
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/log4j.properties (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-ode/src/test/resources/log4j.properties 2009-07-01 10:39:47 UTC (rev 27378)
@@ -0,0 +1,33 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+#
+
+# Set root logger level to WARN and its only appender to CONSOLE
+log4j.rootLogger=WARN, CONSOLE
+
+# log4j properties to work with commandline tools.
+log4j.category.org.mortbay=ERROR
+log4j.category.org.hibernate.type=WARN
+log4j.category.org.objectweb=ERROR
+log4j.category.org.apache.ode.axis2=DEBUG
+log4j.category.org.apache.ode.bpel.engine=DEBUG
+log4j.category.org.apache.ode.daohib.bpel.CorrelatorDaoImpl=DEBUG
+log4j.category.org.apache.ode.bpel.epr=INFO
+
+# Console appender
+log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
+log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
+log4j.appender.CONSOLE.layout.ConversionPattern=%p - %C{1}.%M(%L) | %m%n
More information about the jboss-svn-commits
mailing list