[jboss-svn-commits] JBL Code SVN: r36013 - in labs/jbossrules/trunk: drools-camel/src/main/java/org/drools/jax/soap and 18 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Nov 19 11:38:09 EST 2010
Author: salaboy21
Date: 2010-11-19 11:38:06 -0500 (Fri, 19 Nov 2010)
New Revision: 36013
Added:
labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/cxf/CxfRestTestWithLookup.java
labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/cxf/CxfSoapTestWithLookup.java
labs/jbossrules/trunk/drools-camel/src/test/resources/log4j.bak.properties
labs/jbossrules/trunk/drools-camel/src/test/resources/org/drools/camel/component/CxfRsSpringWithoutSession.xml
labs/jbossrules/trunk/drools-camel/src/test/resources/org/drools/camel/component/CxfSoapSpringWithoutSession.xml
labs/jbossrules/trunk/drools-camel/src/test/resources/org/drools/camel/component/testSpring2.drl
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/GetFactCountCommand.java
labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/remote/WorkItemManagerRemoteClient.java
labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/remote/command/GetWorkItemManagerCommand.java
labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/test/java/org/drools/grid/remote/
labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/test/java/org/drools/grid/remote/commands/
labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/test/java/org/drools/grid/remote/commands/BaseRemoteTest.java
labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/test/java/org/drools/grid/remote/commands/RemoteProcessCommandTests.java
labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/test/java/org/drools/grid/remote/commands/RemoteSessionCommandTests.java
labs/jbossrules/trunk/drools-server/src/main/resources/META-INF/
labs/jbossrules/trunk/drools-server/src/main/resources/META-INF/orm.xml
labs/jbossrules/trunk/drools-server/src/main/resources/META-INF/persistence.xml
labs/jbossrules/trunk/drools-server/src/main/resources/camel-server-grid.xml
labs/jbossrules/trunk/drools-server/src/main/resources/knowledge-services-grid.xml
labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/CxfSoapClientServerGridTest.java
labs/jbossrules/trunk/drools-server/src/test/resources/beans-test-grid.xml
labs/jbossrules/trunk/drools-server/src/test/resources/camel-embedded-server-test-grid.xml
Modified:
labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/DroolsPolicy.java
labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/DroolsProducer.java
labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/jax/soap/PostCxfSoapProcessor.java
labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/XStreamBatchExecutionTest.java
labs/jbossrules/trunk/drools-camel/src/test/resources/org/drools/camel/component/testSpring.drl
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/GetFactHandleCommand.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/GetFactHandlesCommand.java
labs/jbossrules/trunk/drools-grid/drools-grid-impl/pom.xml
labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/impl/GridNodeServer.java
labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/remote/GridNodeRemoteClient.java
labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/remote/StatefulKnowledgeSessionRemoteClient.java
labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/test/java/org/drools/grid/NodeTests.java
labs/jbossrules/trunk/drools-server/pom.xml
labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/CxfRsClientServerTest.java
labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/CxfSoapClientServerTest.java
Log:
JBRULES-2803: Drools Grid Impl2 - Drools Server integration
- adding test that show the integration between drools grid and drools-server (CxfSoapClientServerGridTest.java)
- Adding test for remote interactions in drools-grid/drools-grid-impl
- Adding test in camel for CXF Soap Interaction (take a look at DroolsPolicy and PostCxfSoapProcessor). It looks that it's a problem with CFXProducer in camel, so I add a hack to make it work for now.
Modified: labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/DroolsPolicy.java
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/DroolsPolicy.java 2010-11-19 14:34:30 UTC (rev 36012)
+++ labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/DroolsPolicy.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -281,7 +281,12 @@
}
public void process(Exchange exchange) throws Exception {
+ //Bad Hack - Need to remote it and fix it in Camel (if it's a camel problem)
+ //I need to copy the body of the exachange because for some reason
+ // the getContext().getEndpoint() erase the content/or loose the reference
+ String body = exchange.getIn().getBody( String.class );
if ( dep == null ) {
+
this.dep = exchange.getContext().getEndpoint( this.droolsUri,
DroolsEndpoint.class );
}
@@ -299,20 +304,20 @@
String lookup = exchange.getIn().getHeader( DroolsComponent.DROOLS_LOOKUP,
String.class );
if ( StringUtils.isEmpty( lookup ) ) {
- lookup = dep.getLookup( exchange.getIn().getBody( String.class ) );
+ //Bad Hack - Need to remote it and fix it in Camel (if it's a camel problem)
+ lookup = dep.getLookup( body );
+ //lookup = dep.getLookup( exchange.getIn().getBody( String.class ) );
}
if ( StringUtils.isEmpty( lookup ) ) {
throw new RuntimeException( "No Executor defined and no lookup information available for uri " + this.dep.getEndpointUri() );
}
-
exec = dep.getCommandExecutor( lookup );
}
if ( exec == null ) {
throw new RuntimeException( "CommandExecutor cannot be found for uri " + this.dep.getEndpointUri() );
}
-
ClassLoader localClassLoader = dep.getClassLoader( exec );
if ( localClassLoader == null ) {
throw new RuntimeException( "CommandExecutor Classloader cannot be null for uri " + this.dep.getEndpointUri() );
@@ -326,13 +331,17 @@
exchange.setProperty( "drools-context",
context );
+ //Bad Hack - Need to remote it and fix it in Camel (if it's a camel problem)
+ // I need to re set the Body because the exchange loose the content at
+ // the begining of the method
+ exchange.getIn().setBody(body);
boolean soap = false;
if ( !augmented && exchange.getFromEndpoint() instanceof CxfSpringEndpoint ) {
new PreCxfTransportSoapProcessor().process( exchange );
soap = true;
}
- processor.process( exchange );
+ processor.process( exchange );
if ( soap ) {
new PostCxfTransportSoapProcessor().process( exchange );
}
Modified: labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/DroolsProducer.java
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/DroolsProducer.java 2010-11-19 14:34:30 UTC (rev 36012)
+++ labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/DroolsProducer.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -44,6 +44,7 @@
import org.drools.grid.GridNode;
import org.drools.runtime.CommandExecutor;
import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.impl.ExecutionResultImpl;
public class DroolsProducer extends DefaultProducer {
@@ -57,20 +58,9 @@
public void process(Exchange exchange) throws Exception {
- try {
- Command cmd = null;
- // if ( de.dataFormat != null ) {
- // String str = exchange.getIn().getBody( String.class );
- // ByteArrayInputStream bais = new ByteArrayInputStream( str.getBytes() );
- // cmd = (Command) de.dataFormat.unmarshal( exchange,
- // bais );
- // } else {
- // // no data format set, so we assume it's already concrete
- // cmd = exchange.getIn().getBody( Command.class );
- // }
-
- cmd = exchange.getIn().getBody( Command.class );
-
+ Command cmd = exchange.getIn().getBody( Command.class );
+
+
if ( cmd == null ) {
throw new RuntimeCamelException( "Body of in message not of the expected type 'org.drools.command.Command' for uri" + de.getEndpointUri() );
}
@@ -108,22 +98,8 @@
if ( exec == null ) {
throw new RuntimeException( "No defined ksession for uri" + de.getEndpointUri() );
}
-
+
ExecutionResults results = exec.execute( (BatchExecutionCommandImpl) cmd );;
-
- // if ( de.dataFormat != null ) {
- // ByteArrayOutputStream baos = new ByteArrayOutputStream();
- // de.dataFormat.marshal( exchange,
- // results,
- // baos );
- // exchange.getOut().setBody( baos.toByteArray() );
- // } else {
- // exchange.getOut().setBody( results );
- // }
- exchange.getOut().setBody( results );
- } finally {
- // we must restore the ClassLoader
- // Thread.currentThread().setContextClassLoader( originalClassLoader );
- }
+ exchange.getOut().setBody( results );
}
}
Modified: labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/jax/soap/PostCxfSoapProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/jax/soap/PostCxfSoapProcessor.java 2010-11-19 14:34:30 UTC (rev 36012)
+++ labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/jax/soap/PostCxfSoapProcessor.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -38,6 +38,9 @@
public void process(Exchange exchange) throws Exception {
InputStream is = (InputStream) exchange.getIn().getBody();
+ //Bad Hack - Need to remote it and fix it in Camel (if it's a camel problem)
+ //I need to copy the results here because I loose them at the end of the method
+ String results = StringUtils.toString( is );
if ( is != null ) {
SOAPMessage soapMessage = MessageFactory.newInstance().createMessage();
SOAPBody body = soapMessage.getSOAPPart().getEnvelope().getBody();
@@ -49,7 +52,9 @@
"ns1" );
SOAPBodyElement payload = body.addBodyElement( payloadName );
SOAPElement response = payload.addChildElement( responseName );
- response.addTextNode( StringUtils.toString( is ) );
+ //Bad Hack - Need to remote it and fix it in Camel (if it's a camel problem)
+ // response.addTextNode( StringUtils.toString( is ) );
+ response.addTextNode( results );
exchange.getOut().setBody( soapMessage );
}
}
Modified: labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/XStreamBatchExecutionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/XStreamBatchExecutionTest.java 2010-11-19 14:34:30 UTC (rev 36012)
+++ labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/XStreamBatchExecutionTest.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -72,10 +72,15 @@
import org.xml.sax.SAXException;
import com.thoughtworks.xstream.XStream;
+import org.drools.command.impl.CommandBasedStatefulKnowledgeSession;
+import org.drools.impl.KnowledgeBaseImpl;
+import org.drools.impl.StatelessKnowledgeSessionImpl;
+import org.drools.reteoo.ReteooRuleBase;
public class XStreamBatchExecutionTest extends ContextTestSupport {
protected GridNode node;
protected CommandExecutor exec;
+ protected CommandExecutor exec2;
protected Context createJndiContext() throws Exception {
Context context = super.createJndiContext();
@@ -84,10 +89,14 @@
grid.addService( WhitePages.class,
new WhitePagesImpl() );
node = grid.createGridNode( "local" );
+
+ node.set( "ksession1",
+ this.exec );
+
+
+
context.bind( "node",
node );
- node.set( "ksession1",
- this.exec );
return context;
}
@@ -111,6 +120,14 @@
throw new RuntimeException( e );
}
}
+ public void setExec2(CommandExecutor exec) {
+ this.exec2 = exec;
+ try {
+ super.setUp();
+ } catch ( Exception e ) {
+ throw new RuntimeException( e );
+ }
+ }
@Override
public void setUp() throws Exception {
@@ -1908,62 +1925,148 @@
public void testExecutionNodeLookup() throws Exception {
String str = "";
- str += "package org.drools \n";
- str += "import org.drools.Cheese \n";
+ str += "package org.drools \n"
+ + "declare Cheese1\n"
+ + " type : String\n"
+ + " price : int\n"
+ + " oldPrice : int\n"
+ + "end \n";
+
str += "rule rule1 \n";
str += " when \n";
- str += " $c : Cheese() \n";
+ str += " $c : Cheese1() \n";
str += " \n";
str += " then \n";
str += " $c.setPrice( $c.getPrice() + 5 ); \n";
str += "end\n";
-
+ //System.out.println("STR = "+str);
+ String str2 = "";
+ str2 += "package org.drools \n"
+ + "declare Cheese2\n"
+ + " type : String\n"
+ + " price : int\n"
+ + " oldPrice : int\n"
+ + "end \n";
+ str2 += "rule rule2 \n";
+ str2 += " when \n";
+ str2 += " $c : Cheese2() \n";
+ str2 += " \n";
+ str2 += " then \n";
+ str2 += " $c.setPrice( $c.getPrice() + 10 ); \n";
+ str2 += "end\n";
+ //System.out.println("STR2 = "+str2);
String inXml = "";
inXml += "<batch-execution lookup=\"ksession1\" >";
inXml += " <insert out-identifier='outStilton'>";
- inXml += " <org.drools.Cheese>";
+ inXml += " <org.drools.Cheese1>";
inXml += " <type>stilton</type>";
inXml += " <price>25</price>";
inXml += " <oldPrice>0</oldPrice>";
- inXml += " </org.drools.Cheese>";
+ inXml += " </org.drools.Cheese1>";
inXml += " </insert>";
inXml += " <fire-all-rules />";
inXml += "</batch-execution>";
+
+ String inXml2 = "";
+ inXml2 += "<batch-execution lookup=\"ksession2\" >";
+ inXml2 += " <insert out-identifier='outStilton'>";
+ inXml2 += " <org.drools.Cheese2>";
+ inXml2 += " <type>stilton</type>";
+ inXml2 += " <price>25</price>";
+ inXml2 += " <oldPrice>0</oldPrice>";
+ inXml2 += " </org.drools.Cheese2>";
+ inXml2 += " </insert>";
+ inXml2 += " <fire-all-rules />";
+ inXml2 += "</batch-execution>";
StatefulKnowledgeSession ksession = getStatefulKnowledgeSession( ResourceFactory.newByteArrayResource( str.getBytes() ) );
setExec( ksession );
+
+ StatefulKnowledgeSession ksession2 = getStatefulKnowledgeSession( ResourceFactory.newByteArrayResource( str2.getBytes() ) );
+
+ setExec2( ksession2 );
+ node.set( "ksession2",
+ this.exec2 );
+
String outXml = template.requestBody( "direct:execWithLookup",
inXml,
String.class );
+ ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+
+ Thread.currentThread().setContextClassLoader( getClassLoader(ksession) );
ExecutionResults result = template.requestBody( "direct:unmarshal",
outXml,
ExecutionResults.class );
- Cheese stilton = (Cheese) result.getValue( "outStilton" );
- assertEquals( 30,
- stilton.getPrice() );
+ org.drools.definition.type.FactType fT = ksession.getKnowledgeBase().getFactType("org.drools","Cheese1");
+
+ int price = (Integer)fT.get(result.getValue( "outStilton" ), "price");
+ assertEquals( 30,
+ price );
FactHandle factHandle = (FactHandle) result.getFactHandle( "outStilton" );
- stilton = (Cheese) ksession.getObject( factHandle );
- assertEquals( 30,
- stilton.getPrice() );
-
+// stilton = (Cheese) ksession.getObject( factHandle );
+// assertEquals( 30,
+// stilton.getPrice() );
+
+ String outXml2 = template.requestBody( "direct:execWithLookup",
+ inXml2,
+ String.class );
+
+
+ Thread.currentThread().setContextClassLoader( getClassLoader(ksession2) );
+ ExecutionResults result2 = template.requestBody( "direct:unmarshal",
+ outXml2,
+ ExecutionResults.class );
+
+ org.drools.definition.type.FactType fT2 = ksession2.getKnowledgeBase().getFactType("org.drools","Cheese2");
+
+ int price2 = (Integer)fT2.get(result2.getValue( "outStilton" ), "price");
+ assertEquals( 35, price2 );
+
+// Cheese2 stilton2 = (Cheese2) result2.getValue( "outStilton" );
+// assertEquals( 35,
+// stilton2.getPrice() );
+//
+ factHandle = (FactHandle) result2.getFactHandle( "outStilton" );
+// stilton2 = (Cheese2) ksession2.getObject( factHandle );
+// assertEquals( 35,
+// stilton2.getPrice() );
+
+
+ Thread.currentThread().setContextClassLoader( originalClassLoader );
+
String expectedXml = "";
expectedXml += "<execution-results>\n";
expectedXml += " <result identifier=\"outStilton\">\n";
- expectedXml += " <org.drools.Cheese>\n";
+ expectedXml += " <org.drools.Cheese1>\n";
expectedXml += " <type>stilton</type>\n";
expectedXml += " <oldPrice>0</oldPrice>\n";
expectedXml += " <price>30</price>\n";
- expectedXml += " </org.drools.Cheese>\n";
+ expectedXml += " </org.drools.Cheese1>\n";
expectedXml += " </result>\n";
expectedXml += " <fact-handle identifier=\"outStilton\" external-form=\"" + ((InternalFactHandle) result.getFactHandle( "outStilton" )).toExternalForm() + "\" /> \n";
expectedXml += "</execution-results>\n";
+
+ String expectedXml2 = "";
+ expectedXml2 += "<execution-results>\n";
+ expectedXml2 += " <result identifier=\"outStilton\">\n";
+ expectedXml2 += " <org.drools.Cheese2>\n";
+ expectedXml2 += " <type>stilton</type>\n";
+ expectedXml2 += " <oldPrice>0</oldPrice>\n";
+ expectedXml2 += " <price>35</price>\n";
+ expectedXml2 += " </org.drools.Cheese2>\n";
+ expectedXml2 += " </result>\n";
+ expectedXml2 += " <fact-handle identifier=\"outStilton\" external-form=\"" + ((InternalFactHandle) result2.getFactHandle( "outStilton" )).toExternalForm() + "\" /> \n";
+ expectedXml2 += "</execution-results>\n";
assertXMLEqual( expectedXml,
outXml );
+
+ assertXMLEqual( expectedXml2,
+ outXml2 );
}
-
+
private StatelessKnowledgeSession getStatelessKnowledgeSession(Resource resource) throws Exception {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( resource,
@@ -2003,5 +2106,39 @@
return session;
}
+
+ private StatefulKnowledgeSession getStatefulKnowledgeSession2(Resource resource) throws Exception {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( resource,
+ ResourceType.DRL );
+ if ( kbuilder.hasErrors() ) {
+ System.out.println( kbuilder.getErrors() );
+ }
+
+ assertFalse( kbuilder.hasErrors() );
+ Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+
+ kbase.addKnowledgePackages( pkgs );
+ StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+
+ return session;
+ }
+
+ public ClassLoader getClassLoader(CommandExecutor exec) {
+ ClassLoader cl = null;
+
+ if ( exec instanceof StatefulKnowledgeSessionImpl ) {
+ cl = ((ReteooRuleBase) ((StatefulKnowledgeSessionImpl) exec).getRuleBase()).getRootClassLoader();
+ } else if ( exec instanceof StatelessKnowledgeSessionImpl ) {
+ cl = ((ReteooRuleBase) ((StatelessKnowledgeSessionImpl) exec).getRuleBase()).getRootClassLoader();
+ } else if ( exec instanceof CommandBasedStatefulKnowledgeSession ) {
+ cl = ((ReteooRuleBase) ((KnowledgeBaseImpl) ((CommandBasedStatefulKnowledgeSession) exec).getKnowledgeBase()).getRuleBase()).getRootClassLoader();
+ }
+
+ return cl;
+ }
+
}
Copied: labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/cxf/CxfRestTestWithLookup.java (from rev 35991, labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/cxf/CxfRestTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/cxf/CxfRestTestWithLookup.java (rev 0)
+++ labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/cxf/CxfRestTestWithLookup.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -0,0 +1,61 @@
+/**
+ * Copyright 2010 JBoss Inc
+ *
+ * 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.
+ */
+
+package org.drools.camel.component.cxf;
+
+import org.apache.camel.test.CamelSpringTestSupport;
+import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class CxfRestTestWithLookup extends CamelSpringTestSupport {
+
+ @Override
+ protected AbstractXmlApplicationContext createApplicationContext() {
+ return new ClassPathXmlApplicationContext( "org/drools/camel/component/CxfRsSpringWithoutSession.xml" );
+ }
+
+ public void test1() throws Exception {
+ String cmd = "";
+ cmd += "<batch-execution lookup=\"ksession1\">\n";
+ cmd += " <insert out-identifier=\"salaboy\">\n";
+ cmd += " <org.drools.pipeline.camel.Person>\n";
+ cmd += " <name>salaboy</name>\n";
+ cmd += " </org.drools.pipeline.camel.Person>\n";
+ cmd += " </insert>\n";
+ cmd += " <fire-all-rules/>\n";
+ cmd += "</batch-execution>\n";
+
+ Object object = this.context.createProducerTemplate().requestBody( "direct://http",
+ cmd );
+ System.out.println( object );
+ assertTrue( object.toString().contains( "fact-handle identifier=\"salaboy\"" ) );
+ String cmd2 = "";
+ cmd2 += "<batch-execution lookup=\"ksession2\">\n";
+ cmd2 += " <insert out-identifier=\"salaboy\">\n";
+ cmd2 += " <org.drools.pipeline.camel.Person>\n";
+ cmd2 += " <name>salaboy</name>\n";
+ cmd2 += " </org.drools.pipeline.camel.Person>\n";
+ cmd2 += " </insert>\n";
+ cmd2 += " <fire-all-rules/>\n";
+ cmd2 += "</batch-execution>\n";
+
+ Object object2 = this.context.createProducerTemplate().requestBody( "direct://http",
+ cmd2 );
+ System.out.println( object2 );
+ assertTrue( object2.toString().contains( "fact-handle identifier=\"salaboy\"" ) );
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/cxf/CxfSoapTestWithLookup.java (from rev 35991, labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/cxf/CxfSoapTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/cxf/CxfSoapTestWithLookup.java (rev 0)
+++ labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/cxf/CxfSoapTestWithLookup.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -0,0 +1,121 @@
+/**
+ * Copyright 2010 JBoss Inc
+ *
+ * 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.
+ */
+
+package org.drools.camel.component.cxf;
+
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+
+
+import javax.xml.namespace.QName;
+import javax.xml.soap.MessageFactory;
+import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPMessage;
+
+
+
+import org.apache.camel.test.CamelSpringTestSupport;
+import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class CxfSoapTestWithLookup extends CamelSpringTestSupport {
+
+ @Override
+ protected AbstractXmlApplicationContext createApplicationContext() {
+ return new ClassPathXmlApplicationContext( "org/drools/camel/component/CxfSoapSpringWithoutSession.xml" );
+ }
+ // This test fails, I make it work with some hacks.
+ // Look for //Bad Hack - Need to remote it and fix it in Camel (if it's a camel problem)
+ // In DroolsPolicy and PostCxfSoapProcessor
+
+ // Watch out: this functionality affects Drools Server
+ //
+ // The problem seems to be related with the CXFProducer and the async processors,
+ // and it only appears when we do a lookup for different sessions.
+ // Using different sessions requires that camel switch classloader to execute commands
+ // in the existing sessions. That could be realted too..
+ // but in Drools Camel code I don't find any problem
+ // The rest endpoint is working ok
+ public void testCxfSoapSessionLookup() throws Exception {
+
+
+ SOAPMessage soapMessage = MessageFactory.newInstance().createMessage();
+ SOAPBody body = soapMessage.getSOAPPart().getEnvelope().getBody();
+ QName payloadName = new QName( "http://soap.jax.drools.org",
+ "execute",
+ "ns1" );
+
+ body.addBodyElement( payloadName );
+
+ String cmd = "";
+ cmd += "<batch-execution lookup=\"ksession1\">\n";
+ cmd += " <insert out-identifier=\"salaboy\" disconnected=\"true\">\n";
+ cmd += " <org.drools.springframework.Person2>\n";
+ cmd += " <name>salaboy</name>\n";
+ cmd += " <age>27</age>\n";
+ cmd += " </org.drools.springframework.Person2>\n";
+ cmd += " </insert>\n";
+ cmd += " <fire-all-rules/>\n";
+ cmd += "</batch-execution>\n";
+
+ body.addTextNode( cmd );
+
+ Object object = this.context.createProducerTemplate().requestBody( "direct://http",
+ soapMessage );
+
+ OutputStream out = new ByteArrayOutputStream();
+ out = new ByteArrayOutputStream();
+ soapMessage = (SOAPMessage) object;
+ soapMessage.writeTo( out );
+ String response = out.toString();
+ assertTrue( response.contains( "fact-handle identifier=\"salaboy\"" ) );
+
+
+
+ SOAPMessage soapMessage2 = MessageFactory.newInstance().createMessage();
+ SOAPBody body2 = soapMessage.getSOAPPart().getEnvelope().getBody();
+ QName payloadName2 = new QName( "http://soap.jax.drools.org",
+ "execute",
+ "ns1" );
+
+ body2.addBodyElement( payloadName2);
+
+ String cmd2 = "";
+ cmd2 += "<batch-execution lookup=\"ksession2\">\n";
+ cmd2 += " <insert out-identifier=\"salaboy\" disconnected=\"true\">\n";
+ cmd2 += " <org.drools.springframework.Person3>\n";
+ cmd2 += " <name>salaboy</name>\n";
+ cmd2 += " <age>27</age>\n";
+ cmd2 += " </org.drools.springframework.Person3>\n";
+ cmd2 += " </insert>\n";
+ cmd2 += " <fire-all-rules/>\n";
+ cmd2 += "</batch-execution>\n";
+
+ body2.addTextNode( cmd2 );
+
+ Object object2 = this.context.createProducerTemplate().requestBody( "direct://http",
+ soapMessage2 );
+
+ OutputStream out2 = new ByteArrayOutputStream();
+ out2 = new ByteArrayOutputStream();
+ soapMessage2 = (SOAPMessage) object2;
+ soapMessage2.writeTo( out2 );
+ String response2 = out2.toString();
+ assertTrue( response2.contains( "fact-handle identifier=\"salaboy\"" ) );
+
+ }
+
+}
Added: labs/jbossrules/trunk/drools-camel/src/test/resources/log4j.bak.properties
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/test/resources/log4j.bak.properties (rev 0)
+++ labs/jbossrules/trunk/drools-camel/src/test/resources/log4j.bak.properties 2010-11-19 16:38:06 UTC (rev 36013)
@@ -0,0 +1,8 @@
+log4j.rootLogger=INFO, out
+
+log4j.logger.org.apache.camel=DEBUG
+
+log4j.appender.out=org.apache.log4j.ConsoleAppender
+log4j.appender.out.layout=org.apache.log4j.PatternLayout
+log4j.appender.out.layout.ConversionPattern=[%30.30t] %-30.30c{1} %-5p %m%n
+#log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-camel/src/test/resources/org/drools/camel/component/CxfRsSpringWithoutSession.xml (from rev 35991, labs/jbossrules/trunk/drools-camel/src/test/resources/org/drools/camel/component/CxfRsSpring.xml)
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/test/resources/org/drools/camel/component/CxfRsSpringWithoutSession.xml (rev 0)
+++ labs/jbossrules/trunk/drools-camel/src/test/resources/org/drools/camel/component/CxfRsSpringWithoutSession.xml 2010-11-19 16:38:06 UTC (rev 36013)
@@ -0,0 +1,87 @@
+<?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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:cxf="http://camel.apache.org/schema/cxf"
+ xmlns:jaxrs="http://cxf.apache.org/jaxrs"
+ xmlns:drools="http://drools.org/schema/drools-spring"
+ xsi:schemaLocation="
+ http://drools.org/schema/drools-spring org/drools/container/spring/drools-spring-1.2.0.xsd
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+ http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd
+ http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
+ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+ ">
+
+ <drools:grid-node id="node1" />
+
+ <drools:kbase id="kbase1" node="node1">
+ <drools:resources>
+ <drools:resource type="DRL" source="classpath:org/drools/camel/component/testSpring.drl"/>
+ </drools:resources>
+ </drools:kbase>
+
+
+ <drools:ksession id="ksession1" type="stateful" name="ksession1" kbase="kbase1" node="node1">
+ <drools:script>
+ <drools:set-global identifier="list" >
+ <bean class="java.util.ArrayList" />
+ </drools:set-global>
+ </drools:script>
+ </drools:ksession>
+ <drools:ksession id="ksession2" type="stateful" name="ksession2" kbase="kbase1" node="node1">
+ <drools:script>
+ <drools:set-global identifier="list" >
+ <bean class="java.util.ArrayList" />
+ </drools:set-global>
+ </drools:script>
+
+ </drools:ksession>
+
+ <!-- Defined the server endpoint to create the cxf-rs consumer -->
+ <cxf:rsServer id="rsServer"
+ address="http://localhost:9002/rest"
+ serviceClass="org.drools.jax.rs.CommandExecutorImpl">
+ <cxf:providers>
+ <bean class="org.drools.jax.rs.CommandMessageBodyReader"/>
+ </cxf:providers>
+ </cxf:rsServer>
+
+ <bean id="droolsPolicy" class="org.drools.camel.component.DroolsPolicy" />
+
+ <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
+
+ <route>
+ <from uri="cxfrs://bean://rsServer"/>
+ <policy ref="droolsPolicy">
+ <unmarshal ref="xstream" />
+ <to uri="drools:node1" />
+ <marshal ref="xstream" />
+ </policy>
+ </route>
+
+ <route id="x1">
+ <from uri="direct://http"/>
+ <policy ref="droolsPolicy">
+ <to uri="cxfrs://http://localhost:9002/rest"/>
+ </policy>
+ </route>
+
+ </camelContext>
+
+</beans>
Copied: labs/jbossrules/trunk/drools-camel/src/test/resources/org/drools/camel/component/CxfSoapSpringWithoutSession.xml (from rev 35991, labs/jbossrules/trunk/drools-camel/src/test/resources/org/drools/camel/component/CxfSoapSpring.xml)
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/test/resources/org/drools/camel/component/CxfSoapSpringWithoutSession.xml (rev 0)
+++ labs/jbossrules/trunk/drools-camel/src/test/resources/org/drools/camel/component/CxfSoapSpringWithoutSession.xml 2010-11-19 16:38:06 UTC (rev 36013)
@@ -0,0 +1,95 @@
+<?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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:cxf="http://camel.apache.org/schema/cxf"
+ xmlns:jaxrs="http://cxf.apache.org/jaxrs"
+ xmlns:drools="http://drools.org/schema/drools-spring"
+ xsi:schemaLocation="
+ http://drools.org/schema/drools-spring org/drools/container/spring/drools-spring-1.2.0.xsd
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+ http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd
+ http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/cxfEndpoint.xsd
+ http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
+ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+ ">
+ <drools:grid-node id="node1" />
+
+ <drools:kbase id="kbase1" node="node1">
+ <drools:resources>
+ <drools:resource type="DRL" source="classpath:org/drools/camel/component/testSpring.drl"/>
+ </drools:resources>
+ </drools:kbase>
+
+ <drools:kbase id="kbase2" node="node1">
+ <drools:resources>
+ <drools:resource type="DRL" source="classpath:org/drools/camel/component/testSpring2.drl"/>
+ </drools:resources>
+ </drools:kbase>
+
+ <drools:ksession id="ksession1" type="stateful" name="ksession1" kbase="kbase1" node="node1">
+ <drools:script>
+ <drools:set-global identifier="list" >
+ <bean class="java.util.ArrayList" />
+ </drools:set-global>
+ </drools:script>
+ </drools:ksession>
+
+ <drools:ksession id="ksession2" type="stateful" name="ksession2" kbase="kbase2" node="node1">
+ <drools:script>
+ <drools:set-global identifier="list" >
+ <bean class="java.util.ArrayList" />
+ </drools:set-global>
+ </drools:script>
+ </drools:ksession>
+
+ <cxf:cxfEndpoint id="soapServer"
+ address="http://localhost:9002/soap"
+ serviceName="ns:CommandExecutor"
+ endpointName="ns:CommandExecutorPort"
+ wsdlURL="src/test/resources/org/drools/camel/component/soap.wsdl"
+ xmlns:ns="http://soap.jax.drools.org/" >
+ <cxf:properties>
+ <entry key="dataFormat" value="MESSAGE"/>
+ <entry key="defaultOperationName" value="execute"/>
+ </cxf:properties>
+ </cxf:cxfEndpoint>
+
+ <bean id="droolsPolicy" class="org.drools.camel.component.DroolsPolicy" />
+
+ <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
+
+ <route>
+ <from uri="cxf://bean://soapServer"/>
+ <policy ref="droolsPolicy">
+ <unmarshal ref="xstream" />
+ <to uri="drools:node1" />
+ <marshal ref="xstream" />
+ </policy>
+ </route>
+
+ <route id="x1">
+ <from uri="direct://http"/>
+ <policy ref="droolsPolicy">
+ <to uri="cxf://bean://soapServer"/>
+ </policy>
+ </route>
+
+ </camelContext>
+
+</beans>
Modified: labs/jbossrules/trunk/drools-camel/src/test/resources/org/drools/camel/component/testSpring.drl
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/test/resources/org/drools/camel/component/testSpring.drl 2010-11-19 14:34:30 UTC (rev 36012)
+++ labs/jbossrules/trunk/drools-camel/src/test/resources/org/drools/camel/component/testSpring.drl 2010-11-19 16:38:06 UTC (rev 36013)
@@ -16,13 +16,15 @@
package org.drools.springframework
-import org.drools.pipeline.camel.Person
+declare Person2
+ name : String
+end
global java.util.List list;
rule "rule 1"
when
- $p : Person();
+ $p : Person2();
then
list.add( $p );
end
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-camel/src/test/resources/org/drools/camel/component/testSpring2.drl (from rev 35991, labs/jbossrules/trunk/drools-camel/src/test/resources/org/drools/camel/component/testSpring.drl)
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/test/resources/org/drools/camel/component/testSpring2.drl (rev 0)
+++ labs/jbossrules/trunk/drools-camel/src/test/resources/org/drools/camel/component/testSpring2.drl 2010-11-19 16:38:06 UTC (rev 36013)
@@ -0,0 +1,32 @@
+/**
+ * Copyright 2010 JBoss Inc
+ *
+ * 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.
+ */
+
+package org.drools.springframework
+
+
+declare Person3
+ name : String
+end
+
+
+global java.util.List list;
+
+rule "rule 3"
+when
+ $p : Person3();
+then
+ list.add( $p );
+end
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/GetFactCountCommand.java (from rev 35977, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/DisposeCommand.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/GetFactCountCommand.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/GetFactCountCommand.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -0,0 +1,38 @@
+/**
+ * Copyright 2010 JBoss Inc
+ *
+ * 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.
+ */
+
+package org.drools.command.runtime;
+
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+public class GetFactCountCommand
+ implements
+ GenericCommand<Long> {
+
+ public Long execute(Context context) {
+ StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
+
+ return ksession.getFactCount();
+ }
+
+ public String toString() {
+ return "ksession.getFactCount();";
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/GetFactHandleCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/GetFactHandleCommand.java 2010-11-19 14:34:30 UTC (rev 36012)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/GetFactHandleCommand.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -43,7 +43,7 @@
public FactHandle execute(Context context) {
StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
FactHandle factHandle = ksession.getFactHandle( object );
- if ( disconnected ){
+ if ( factHandle != null && disconnected ){
((DefaultFactHandle)factHandle).disconnect();
}
return factHandle;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/GetFactHandlesCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/GetFactHandlesCommand.java 2010-11-19 14:34:30 UTC (rev 36012)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/GetFactHandlesCommand.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -21,9 +21,7 @@
import org.drools.command.Context;
import org.drools.command.impl.GenericCommand;
import org.drools.command.impl.KnowledgeCommandContext;
-import org.drools.impl.StatefulKnowledgeSessionImpl.ObjectStoreWrapper;
-import org.drools.reteoo.ReteooStatefulSession;
-import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.common.DefaultFactHandle;
import org.drools.runtime.ObjectFilter;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.rule.FactHandle;
@@ -33,6 +31,7 @@
GenericCommand<Collection<FactHandle>> {
private ObjectFilter filter = null;
+ private boolean disconnected = false;
public GetFactHandlesCommand() {
}
@@ -40,14 +39,30 @@
public GetFactHandlesCommand(ObjectFilter filter) {
this.filter = filter;
}
+ public GetFactHandlesCommand(ObjectFilter filter, boolean disconnected) {
+ this.filter = filter;
+ this.disconnected = disconnected;
+ }
public Collection<FactHandle> execute(Context context) {
StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
if ( filter != null ) {
- return ksession.getFactHandles( this.filter );
+ Collection<FactHandle> factHandles = ksession.getFactHandles( this.filter );
+ if(factHandles != null && disconnected){
+ for(FactHandle factHandle: factHandles){
+ ((DefaultFactHandle)factHandle).disconnect();
+ }
+ }
+ return factHandles;
} else {
- return ksession.getFactHandles( this.filter );
+ Collection<FactHandle> factHandles = ksession.getFactHandles( );
+ if(factHandles != null && disconnected){
+ for(FactHandle factHandle: factHandles){
+ ((DefaultFactHandle)factHandle).disconnect();
+ }
+ }
+ return factHandles;
}
}
Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl/pom.xml 2010-11-19 14:34:30 UTC (rev 36012)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl/pom.xml 2010-11-19 16:38:06 UTC (rev 36013)
@@ -104,6 +104,12 @@
<artifactId>btm</artifactId>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-bpmn2</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/impl/GridNodeServer.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/impl/GridNodeServer.java 2010-11-19 14:34:30 UTC (rev 36012)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/impl/GridNodeServer.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -63,7 +63,7 @@
Conversation con,
Message msg,
CommandImpl cmd) {
- GridNode gnode = (GridNode) object;
+
List list = cmd.getArguments();
GenericCommand command = (GenericCommand) list.get( 0 );
@@ -80,6 +80,21 @@
con.respond( result );
}
} );
+ put( "registerKsession",
+ new Exec() {
+ public void execute(Object object,
+ Conversation con,
+ Message msg,
+ CommandImpl cmd) {
+ GridNode gnode = (GridNode) object;
+ List list = cmd.getArguments();
+ String instanceId = (String)list.get(1);
+ // Set the already created session into the node localcontext
+ gnode.set((String) list.get(0), data.getTemp().get(instanceId));
+ // Respond nothing
+ con.respond( null );
+ }
+ } );
}
};
Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/remote/GridNodeRemoteClient.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/remote/GridNodeRemoteClient.java 2010-11-19 14:34:30 UTC (rev 36012)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/remote/GridNodeRemoteClient.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -17,19 +17,20 @@
package org.drools.grid.remote;
+import java.net.InetSocketAddress;
+import java.util.Arrays;
import java.util.Map;
+import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import org.drools.KnowledgeBaseFactoryService;
-import org.drools.SystemEventListenerFactory;
import org.drools.builder.KnowledgeBuilderFactoryService;
import org.drools.grid.Grid;
import org.drools.grid.GridNode;
import org.drools.grid.GridServiceDescription;
-import org.drools.grid.io.Connector;
-import org.drools.grid.io.ConnectorFactoryService;
import org.drools.grid.io.ConversationManager;
-import org.drools.grid.io.impl.ConversationManagerImpl;
+import org.drools.grid.io.impl.CommandImpl;
import org.drools.grid.remote.mina.MinaConnector;
+import org.drools.grid.service.directory.Address;
import org.drools.util.ServiceRegistry;
import org.drools.util.ServiceRegistryImpl;
@@ -71,7 +72,25 @@
public void set(String identifier,
Object object) {
- throw new UnsupportedOperationException( "Not supported yet." );
+ //We need a way to do it more generic, so we can set whatever we want.
+
+ if(object instanceof StatefulKnowledgeSessionRemoteClient){
+ String localId = UUID.randomUUID().toString();
+
+ CommandImpl cmd = new CommandImpl( "registerKsession",
+ Arrays.asList( new Object[]{identifier, ((StatefulKnowledgeSessionRemoteClient)object).getInstanceId()} ) );
+
+ ConversationManager connm = this.grid.get( ConversationManager.class );
+ ConversationUtil.sendMessage( connm,
+ (InetSocketAddress) ((Map<String, Address>)this.gsd.getAddresses()).get( "socket" ).getObject(),
+ this.gsd.getId(),
+ cmd );
+ } else{
+
+ throw new UnsupportedOperationException( "Not supported yet." );
+ }
+
+
}
public String getId() {
Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/remote/StatefulKnowledgeSessionRemoteClient.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/remote/StatefulKnowledgeSessionRemoteClient.java 2010-11-19 14:34:30 UTC (rev 36012)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/remote/StatefulKnowledgeSessionRemoteClient.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -27,6 +27,7 @@
import org.drools.command.GetSessionClockCommand;
import org.drools.command.KnowledgeContextResolveFromContextCommand;
import org.drools.command.runtime.DisposeCommand;
+import org.drools.command.runtime.GetFactCountCommand;
import org.drools.command.runtime.GetGlobalsCommand;
import org.drools.command.runtime.process.AbortProcessInstanceCommand;
import org.drools.command.runtime.process.GetProcessInstanceCommand;
@@ -49,6 +50,7 @@
import org.drools.grid.GridServiceDescription;
import org.drools.grid.io.ConversationManager;
import org.drools.grid.io.impl.CommandImpl;
+import org.drools.grid.remote.command.GetWorkItemManagerCommand;
import org.drools.grid.remote.command.GetWorkingMemoryEntryPointRemoteCommand;
import org.drools.runtime.Calendars;
import org.drools.runtime.Channel;
@@ -464,7 +466,20 @@
}
public long getFactCount() {
- throw new UnsupportedOperationException( "Not supported yet." );
+ String kresultsId = "kresults_" + this.gsd.getId();
+ CommandImpl cmd = new CommandImpl("execute",
+ Arrays.asList(new Object[]{ new KnowledgeContextResolveFromContextCommand( new GetFactCountCommand(),
+ null,
+ null,
+ this.instanceId,
+ kresultsId )}));
+
+ Object result = ConversationUtil.sendMessage(this.cm,
+ (InetSocketAddress) this.gsd.getAddresses().get("socket").getObject(),
+ this.gsd.getId(),
+ cmd);
+
+ return (Long)result;
}
public ProcessInstance startProcess(String processId) {
@@ -580,7 +595,29 @@
}
public WorkItemManager getWorkItemManager() {
- throw new UnsupportedOperationException( "Not supported yet." );
+
+ //This is not needed right??? or should I send the message to see if something is wrong..??
+
+// String kresultsId = "kresults_" + this.gsd.getId();
+//
+// CommandImpl cmd = new CommandImpl("execute",
+// Arrays.asList(new Object[]{ new KnowledgeContextResolveFromContextCommand(new GetWorkItemManagerCommand(),
+// null,
+// null,
+// this.instanceId,
+// kresultsId )}));
+//
+// ConversationUtil.sendMessage(this.cm,
+// (InetSocketAddress) this.gsd.getAddresses().get("socket").getObject(),
+// this.gsd.getId(),
+// cmd);
+
+
+
+
+ return new WorkItemManagerRemoteClient(this.instanceId, this.gsd, this.cm);
+
+
}
public void addEventListener(WorkingMemoryEventListener listener) {
@@ -619,4 +656,9 @@
throw new UnsupportedOperationException( "Not supported yet." );
}
+ public String getInstanceId() {
+ return instanceId;
+ }
+
+
}
Copied: labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/remote/WorkItemManagerRemoteClient.java (from rev 35977, labs/jbossrules/trunk/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/WorkItemManagerRemoteClient.java)
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/remote/WorkItemManagerRemoteClient.java (rev 0)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/remote/WorkItemManagerRemoteClient.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -0,0 +1,103 @@
+package org.drools.grid.remote;
+
+import java.io.Serializable;
+import java.net.InetSocketAddress;
+import java.util.Arrays;
+import java.util.Map;
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.runtime.process.AbortWorkItemCommand;
+import org.drools.command.runtime.process.CompleteWorkItemCommand;
+import org.drools.command.runtime.process.RegisterWorkItemHandlerCommand;
+import org.drools.grid.GridNode;
+import org.drools.grid.GridServiceDescription;
+
+import org.drools.grid.io.ConversationManager;
+import org.drools.grid.io.impl.CommandImpl;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+
+/**
+ *
+ * @author salaboy
+ */
+public class WorkItemManagerRemoteClient
+ implements
+ WorkItemManager,
+ Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+
+ private String instanceId;
+ private ConversationManager cm;
+ private GridServiceDescription<GridNode> gsd;
+
+ public WorkItemManagerRemoteClient(String instanceId, GridServiceDescription gsd, ConversationManager cm) {
+ this.instanceId = instanceId;
+ this.cm = cm;
+ this.gsd = gsd;
+ }
+
+
+
+ public void abortWorkItem(long id) {
+ String kresultsId = "kresults_" + this.gsd.getId();
+
+ CommandImpl cmd = new CommandImpl("execute",
+ Arrays.asList(new Object[]{ new KnowledgeContextResolveFromContextCommand( new AbortWorkItemCommand( id ),
+ null,
+ null,
+ this.instanceId,
+ kresultsId )}));
+
+ ConversationUtil.sendMessage(this.cm,
+ (InetSocketAddress) this.gsd.getAddresses().get("socket").getObject(),
+ this.gsd.getId(),
+ cmd);
+ }
+
+ public void completeWorkItem(long id,
+ Map<String, Object> results) {
+
+ String kresultsId = "kresults_" + this.gsd.getId();
+
+ CommandImpl cmd = new CommandImpl("execute",
+ Arrays.asList(new Object[]{ new KnowledgeContextResolveFromContextCommand( new CompleteWorkItemCommand( id,
+ results ),
+ null,
+ null,
+ this.instanceId,
+ kresultsId )}));
+
+ ConversationUtil.sendMessage(this.cm,
+ (InetSocketAddress) this.gsd.getAddresses().get("socket").getObject(),
+ this.gsd.getId(),
+ cmd);
+
+
+
+ }
+
+ public void registerWorkItemHandler(String workItemName,
+ WorkItemHandler handler) {
+
+ String kresultsId = "kresults_" + this.gsd.getId();
+
+ CommandImpl cmd = new CommandImpl("execute",
+ Arrays.asList(new Object[]{ new KnowledgeContextResolveFromContextCommand( new RegisterWorkItemHandlerCommand( workItemName,
+ handler ),
+ null,
+ null,
+ this.instanceId,
+ kresultsId )}));
+
+ ConversationUtil.sendMessage(this.cm,
+ (InetSocketAddress) this.gsd.getAddresses().get("socket").getObject(),
+ this.gsd.getId(),
+ cmd);
+
+ }
+
+
+
+}
Copied: labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/remote/command/GetWorkItemManagerCommand.java (from rev 35977, labs/jbossrules/trunk/drools-grid/drools-grid-remote-api/src/main/java/org/drools/grid/remote/internal/commands/GetWorkItemManagerCommand.java)
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/remote/command/GetWorkItemManagerCommand.java (rev 0)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/java/org/drools/grid/remote/command/GetWorkItemManagerCommand.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -0,0 +1,27 @@
+package org.drools.grid.remote.command;
+
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.runtime.process.WorkItemManager;
+
+/**
+ *
+ * @author salaboy
+ *
+ */
+public class GetWorkItemManagerCommand
+ implements
+ GenericCommand<WorkItemManager> {
+
+ private static final long serialVersionUID = 1L;
+
+ public WorkItemManager execute(Context context) {
+ WorkItemManager workItemManager = ((KnowledgeCommandContext) context).getWorkItemManager();
+ return workItemManager;
+ }
+
+
+
+
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/test/java/org/drools/grid/NodeTests.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/test/java/org/drools/grid/NodeTests.java 2010-11-19 14:34:30 UTC (rev 36012)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/test/java/org/drools/grid/NodeTests.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -17,7 +17,7 @@
package org.drools.grid;
-import java.io.Serializable;
+import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import org.drools.KnowledgeBase;
@@ -314,6 +314,29 @@
public void setName(String name) {
this.name = name;
}
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final MyObject other = (MyObject) obj;
+ if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = 7;
+ hash = 97 * hash + (this.name != null ? this.name.hashCode() : 0);
+ return hash;
+ }
+
}
}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/test/java/org/drools/grid/remote/commands/BaseRemoteTest.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/test/java/org/drools/grid/remote/commands/BaseRemoteTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/test/java/org/drools/grid/remote/commands/BaseRemoteTest.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -0,0 +1,223 @@
+/*
+ * Copyright 2010 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.grid.remote.commands;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.SystemEventListenerFactory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderError;
+import org.drools.builder.KnowledgeBuilderErrors;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.builder.ResourceType;
+import org.drools.grid.ConnectionFactoryService;
+import org.drools.grid.Grid;
+import org.drools.grid.GridConnection;
+import org.drools.grid.GridNode;
+import org.drools.grid.GridServiceDescription;
+import org.drools.grid.SocketService;
+import org.drools.grid.conf.GridPeerServiceConfiguration;
+import org.drools.grid.conf.impl.GridPeerConfiguration;
+import org.drools.grid.impl.GridImpl;
+import org.drools.grid.impl.MultiplexSocketServerImpl;
+import org.drools.grid.io.impl.MultiplexSocketServiceCongifuration;
+import org.drools.grid.remote.mina.MinaAcceptorFactoryService;
+import org.drools.grid.service.directory.WhitePages;
+import org.drools.grid.service.directory.impl.CoreServicesLookupConfiguration;
+import org.drools.grid.service.directory.impl.WhitePagesLocalConfiguration;
+import org.drools.grid.timer.impl.CoreServicesSchedulerConfiguration;
+import org.drools.io.impl.ByteArrayResource;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+
+/**
+ *
+ * @author salaboy
+ */
+public abstract class BaseRemoteTest {
+
+ private Map<String, GridServiceDescription> coreServicesMap;
+ protected Grid grid1;
+ protected GridNode remoteN1;
+
+ @Before
+ public void setUp() {
+ this.coreServicesMap = new HashMap();
+ createRemoteNode();
+ }
+
+ @After
+ public void tearDown() {
+ remoteN1.dispose();
+ grid1.get(SocketService.class).close();
+ }
+
+ private void createRemoteNode(){
+ grid1 = new GridImpl( new HashMap<String, Object>() );
+ configureGrid1( grid1,
+ 8000,
+ null );
+
+ Grid grid2 = new GridImpl( new HashMap<String, Object>() );
+ configureGrid1( grid2,
+ -1,
+ grid1.get( WhitePages.class ) );
+
+ GridNode n1 = grid1.createGridNode( "n1" );
+ grid1.get( SocketService.class ).addService( "n1", 8000, n1 );
+
+ GridServiceDescription<GridNode> n1Gsd = grid2.get( WhitePages.class ).lookup( "n1" );
+ GridConnection<GridNode> conn = grid2.get( ConnectionFactoryService.class ).createConnection( n1Gsd );
+ remoteN1 = conn.connect();
+
+ }
+
+ private void configureGrid1(Grid grid,
+ int port,
+ WhitePages wp) {
+
+ //Local Grid Configuration, for our client
+ GridPeerConfiguration conf = new GridPeerConfiguration();
+
+ //Configuring the Core Services White Pages
+ GridPeerServiceConfiguration coreSeviceWPConf = new CoreServicesLookupConfiguration( coreServicesMap );
+ conf.addConfiguration( coreSeviceWPConf );
+
+ //Configuring the Core Services Scheduler
+ GridPeerServiceConfiguration coreSeviceSchedulerConf = new CoreServicesSchedulerConfiguration();
+ conf.addConfiguration( coreSeviceSchedulerConf );
+
+ //Configuring the WhitePages
+ WhitePagesLocalConfiguration wplConf = new WhitePagesLocalConfiguration();
+ wplConf.setWhitePages( wp );
+ conf.addConfiguration( wplConf );
+
+// //Create a Local Scheduler
+// SchedulerLocalConfiguration schlConf = new SchedulerLocalConfiguration( "myLocalSched" );
+// conf.addConfiguration( schlConf );
+
+ if ( port >= 0 ) {
+ //Configuring the SocketService
+ MultiplexSocketServiceCongifuration socketConf = new MultiplexSocketServiceCongifuration( new MultiplexSocketServerImpl( "127.0.0.1",
+ new MinaAcceptorFactoryService(),
+ SystemEventListenerFactory.getSystemEventListener(),
+ grid) );
+ socketConf.addService( WhitePages.class.getName(), wplConf.getWhitePages(), port );
+// socketConf.addService( SchedulerService.class.getName(), schlConf.getSchedulerService(), port );
+
+ conf.addConfiguration( socketConf );
+ }
+ conf.configure( grid );
+
+ }
+
+ protected StatefulKnowledgeSession createSession(){
+ KnowledgeBuilder kbuilder = remoteN1.get( KnowledgeBuilderFactoryService.class ).newKnowledgeBuilder();
+
+ Assert.assertNotNull( kbuilder );
+
+ String rule = "package test\n"
+ + "import org.drools.grid.NodeTests.MyObject;\n"
+ + "global MyObject myGlobalObj;\n"
+ + "rule \"test\""
+ + " when"
+ + " $o: MyObject()"
+ + " then"
+ + " System.out.println(\"My Global Object -> \"+myGlobalObj.getName());"
+ + " System.out.println(\"Rule Fired! ->\"+$o.getName());"
+ + " end";
+
+ kbuilder.add( new ByteArrayResource( rule.getBytes() ),
+ ResourceType.DRL );
+
+ KnowledgeBuilderErrors errors = kbuilder.getErrors();
+ if ( errors != null && errors.size() > 0 ) {
+ for ( KnowledgeBuilderError error : errors ) {
+ System.out.println( "Error: " + error.getMessage() );
+
+ }
+ Assert.fail("KnowledgeBase did not build");
+ }
+
+ KnowledgeBase kbase = remoteN1.get( KnowledgeBaseFactoryService.class ).newKnowledgeBase();
+
+ Assert.assertNotNull( kbase );
+
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+ return session;
+
+ }
+
+
+ protected StatefulKnowledgeSession createProcessSession(){
+ KnowledgeBuilder kbuilder = remoteN1.get( KnowledgeBuilderFactoryService.class ).newKnowledgeBuilder();
+
+ Assert.assertNotNull( kbuilder );
+
+ String process = "<definitions id=\"Definition\" "
+ + "targetNamespace=\"http://www.example.org/MinimalExample\" "
+ + "typeLanguage=\"http://www.java.com/javaTypes\" "
+ + "expressionLanguage=\"http://www.mvel.org/2.0\" "
+ + "xmlns=\"http://www.omg.org/spec/BPMN/20100524/MODEL\" "
+ + "xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\" "
+ + "xs:schemaLocation=\"http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd\" "
+ + "xmlns:tns=\"http://www.jboss.org/drools\">"
+ + "<process id=\"Minimal\" name=\"Minimal Process\" tns:packageName=\"com.sample\">"
+ + "<startEvent id=\"_1\" name=\"StartProcess\"/>"
+ + "<sequenceFlow sourceRef=\"_1\" targetRef=\"_2\"/>"
+ + "<scriptTask id=\"_2\" name=\"Hello\">"
+ + "<script>System.out.println(\"Hello World\");</script>"
+ + "</scriptTask>"
+ + "<sequenceFlow sourceRef=\"_2\" targetRef=\"_3\"/>"
+ + "<endEvent id=\"_3\" name=\"EndProcess\">"
+ + "<terminateEventDefinition/>"
+ + "</endEvent>"
+ + "</process>"
+ + "</definitions>";
+ System.out.println("Process = "+process);
+
+ kbuilder.add( new ByteArrayResource( process.getBytes() ),
+ ResourceType.BPMN2 );
+
+ KnowledgeBuilderErrors errors = kbuilder.getErrors();
+ if ( errors != null && errors.size() > 0 ) {
+ for ( KnowledgeBuilderError error : errors ) {
+ System.out.println( "Error: " + error.getMessage() );
+
+ }
+ Assert.fail("KnowledgeBase did not build");
+ }
+
+ KnowledgeBase kbase = remoteN1.get( KnowledgeBaseFactoryService.class ).newKnowledgeBase();
+
+ Assert.assertNotNull( kbase );
+
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+ return session;
+
+ }
+
+}
Added: labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/test/java/org/drools/grid/remote/commands/RemoteProcessCommandTests.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/test/java/org/drools/grid/remote/commands/RemoteProcessCommandTests.java (rev 0)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/test/java/org/drools/grid/remote/commands/RemoteProcessCommandTests.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2010 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.grid.remote.commands;
+
+
+
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.ProcessInstance;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ *
+ * @author salaboy
+ */
+public class RemoteProcessCommandTests extends BaseRemoteTest{
+
+ public RemoteProcessCommandTests() {
+ }
+
+
+
+
+
+ @Test
+ public void startProcessTest() {
+ StatefulKnowledgeSession ksession = createProcessSession();
+
+ ProcessInstance processInstance = ksession.startProcess("Minimal");
+
+ Assert.assertNotNull(processInstance);
+
+ Assert.assertEquals("Minimal", processInstance.getProcessId());
+ }
+
+
+
+
+
+
+
+
+
+
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/test/java/org/drools/grid/remote/commands/RemoteSessionCommandTests.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/test/java/org/drools/grid/remote/commands/RemoteSessionCommandTests.java (rev 0)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/test/java/org/drools/grid/remote/commands/RemoteSessionCommandTests.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -0,0 +1,174 @@
+/*
+ * Copyright 2010 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.grid.remote.commands;
+
+
+
+import java.util.Collection;
+import org.drools.common.DefaultFactHandle;
+import org.drools.grid.NodeTests.MyObject;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.rule.FactHandle;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ *
+ * @author salaboy
+ */
+public class RemoteSessionCommandTests extends BaseRemoteTest{
+
+ public RemoteSessionCommandTests() {
+ }
+
+
+
+
+
+ @Test
+ public void insertTest() {
+ StatefulKnowledgeSession ksession = createSession();
+
+ ksession.setGlobal("myGlobalObj", new MyObject("myglobalObj"));
+
+ FactHandle handle = ksession.insert(new MyObject("obj1"));
+ Assert.assertNotNull(handle);
+ Assert.assertEquals(true, ((DefaultFactHandle)handle).isDisconnected());
+
+ int fired = ksession.fireAllRules();
+
+ Assert.assertEquals(fired, 1);
+
+ }
+
+ @Test
+ public void getGlobalTest() {
+ StatefulKnowledgeSession ksession = createSession();
+
+ ksession.setGlobal("myGlobalObj", new MyObject("myglobalObj"));
+
+ Assert.assertEquals("myglobalObj", ((MyObject)ksession.getGlobal("myGlobalObj")).getName());
+
+ }
+
+ @Test
+ public void retractTest() {
+ StatefulKnowledgeSession ksession = createSession();
+
+ ksession.setGlobal("myGlobalObj", new MyObject("myglobalObj"));
+
+ FactHandle handle = ksession.insert(new MyObject("obj1"));
+ Assert.assertNotNull(handle);
+ Assert.assertEquals(true, ((DefaultFactHandle)handle).isDisconnected());
+
+ int fired = ksession.fireAllRules();
+ Assert.assertEquals(fired, 1);
+
+ Assert.assertEquals(1, ksession.getFactCount());
+
+ ksession.retract(handle);
+
+ Assert.assertEquals(0, ksession.getFactCount());
+
+ }
+
+
+ @Test
+ public void updateTest() {
+ StatefulKnowledgeSession ksession = createSession();
+
+ ksession.setGlobal("myGlobalObj", new MyObject("myglobalObj"));
+
+ FactHandle handle = ksession.insert(new MyObject("obj1"));
+ Assert.assertNotNull(handle);
+ Assert.assertEquals(true, ((DefaultFactHandle)handle).isDisconnected());
+
+ int fired = ksession.fireAllRules();
+ Assert.assertEquals(fired, 1);
+
+ Assert.assertEquals(1, ksession.getFactCount());
+
+ ksession.update(handle, new MyObject("obj2"));
+
+ Assert.assertEquals(1, ksession.getFactCount());
+
+ fired = ksession.fireAllRules();
+ Assert.assertEquals(fired, 1);
+
+ }
+
+// @Test
+// public void getFactHandleTest() {
+// StatefulKnowledgeSession ksession = createSession();
+//
+// ksession.setGlobal("myGlobalObj", new MyObject("myglobalObj"));
+// MyObject obj1 = new MyObject("obj1");
+// FactHandle handle = ksession.insert(obj1);
+// Assert.assertNotNull(handle);
+// Assert.assertEquals(true, ((DefaultFactHandle)handle).isDisconnected());
+// // The session assertMap doesn't find the factHandle for this object
+// FactHandle newHandle = ksession.getFactHandle(obj1);
+//
+// Assert.assertEquals( newHandle, handle );
+//
+//
+// }
+
+
+// @Test
+// public void getFactHandlesTest() {
+// StatefulKnowledgeSession ksession = createSession();
+//
+// ksession.setGlobal("myGlobalObj", new MyObject("myglobalObj"));
+// MyObject obj1 = new MyObject("obj1");
+// FactHandle handle = ksession.insert(obj1);
+// Assert.assertNotNull(handle);
+// Assert.assertEquals(true, ((DefaultFactHandle)handle).isDisconnected());
+// //I'm having problems with ObjectStoreWrapper that it's not serializable
+// Collection<FactHandle> factHandles = ksession.getFactHandles();
+// Assert.assertEquals(1, factHandles.size());
+// Assert.assertEquals(handle, factHandles.iterator().next() );
+//
+//
+// }
+
+ @Test
+ public void getObjectTest() {
+ StatefulKnowledgeSession ksession = createSession();
+
+ ksession.setGlobal("myGlobalObj", new MyObject("myglobalObj"));
+ MyObject obj1 = new MyObject("obj1");
+ FactHandle handle = ksession.insert(obj1);
+ Assert.assertNotNull(handle);
+ Assert.assertEquals(true, ((DefaultFactHandle)handle).isDisconnected());
+
+ Object result = ksession.getObject(handle);
+
+ Assert.assertEquals(obj1, result);
+
+
+ }
+
+
+
+
+
+
+
+
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-server/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-server/pom.xml 2010-11-19 14:34:30 UTC (rev 36012)
+++ labs/jbossrules/trunk/drools-server/pom.xml 2010-11-19 16:38:06 UTC (rev 36013)
@@ -170,6 +170,12 @@
<scope>test</scope>
</dependency>
+ <!-- HSQLDB -->
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>h2</artifactId>
+
+ </dependency>
</dependencies>
</project>
Copied: labs/jbossrules/trunk/drools-server/src/main/resources/META-INF/orm.xml (from rev 35991, labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/resources/META-INF/orm.xml)
===================================================================
--- labs/jbossrules/trunk/drools-server/src/main/resources/META-INF/orm.xml (rev 0)
+++ labs/jbossrules/trunk/drools-server/src/main/resources/META-INF/orm.xml 2010-11-19 16:38:06 UTC (rev 36013)
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
+ version="1.0">
+ <entity class="org.drools.grid.service.directory.impl.AddressImpl" access="FIELD">
+ <table name="Address"/>
+
+ <attributes>
+ <id name="id">
+ <generated-value strategy="AUTO"/>
+ </id>
+ <many-to-one name="gridServiceDescription" target-entity="org.drools.grid.service.directory.impl.GridServiceDescriptionImpl" />
+ </attributes>
+ </entity>
+
+ <entity class="org.drools.grid.service.directory.impl.GridServiceDescriptionImpl" access="FIELD">
+ <table name="GridServiceDescription"/>
+
+ <attributes>
+ <id name="id" />
+ <one-to-many name="addresses" mapped-by="gridServiceDescription" target-entity="org.drools.grid.service.directory.impl.AddressImpl" fetch="EAGER" >
+ <map-key name="transport" />
+ <cascade>
+ <cascade-all/>
+ </cascade>
+ </one-to-many>
+
+ </attributes>
+ </entity>
+
+ <entity class="org.drools.grid.timer.impl.ScheduledJob" access="FIELD">
+ <table name="ScheduledJob"/>
+
+ <attributes>
+ <id name="id" />
+ <transient name="jobHandle" />
+ </attributes>
+ </entity>
+</entity-mappings>
Copied: labs/jbossrules/trunk/drools-server/src/main/resources/META-INF/persistence.xml (from rev 35991, labs/jbossrules/trunk/drools-grid/drools-grid-impl/src/main/resources/META-INF/persistence.xml)
===================================================================
--- labs/jbossrules/trunk/drools-server/src/main/resources/META-INF/persistence.xml (rev 0)
+++ labs/jbossrules/trunk/drools-server/src/main/resources/META-INF/persistence.xml 2010-11-19 16:38:06 UTC (rev 36013)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd">
+ <persistence-unit name="org.drools.grid">
+ <provider>org.hibernate.ejb.HibernatePersistence</provider>
+ <class>org.drools.grid.service.directory.impl.GridServiceDescriptionImpl</class>
+ <class>org.drools.grid.service.directory.impl.AddressImpl</class>
+ <class>java.lang.String</class>
+ <class>org.drools.grid.timer.impl.ScheduledJob</class>
+ <properties>
+ <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
+ <property name="hibernate.connection.driver_class" value="org.h2.Driver"/>
+ <property name="hibernate.connection.url" value="jdbc:h2:mem:mydb"/>
+ <!--property name="hibernate.connection.url" value="jdbc:h2:file:/h2/test;AUTO_SERVER=TRUE" /-->
+ <!-- property name="hibernate.connection.url" value="jdbc:h2:file:\dev\drools\trunk7\drools-process\drools-process-task\mydb"/ -->
+ <!-- <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>-->
+ <!-- <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/> -->
+ <!-- <property name="hibernate.connection.url" value="jdbc:postgresql://localhost/postgres"/>-->
+ <property name="hibernate.connection.username" value="sa"/>
+ <property name="hibernate.connection.password" value="sasa"/>
+ <property name="hibernate.connection.autocommit" value="false"/>
+ <property name="hibernate.max_fetch_depth" value="3"/>
+ <property name="hibernate.hbm2ddl.auto" value="create"/>
+ <property name="hibernate.show_sql" value="true"/>
+ </properties>
+ </persistence-unit>
+</persistence>
Copied: labs/jbossrules/trunk/drools-server/src/main/resources/camel-server-grid.xml (from rev 35991, labs/jbossrules/trunk/drools-server/src/main/resources/camel-server.xml)
===================================================================
--- labs/jbossrules/trunk/drools-server/src/main/resources/camel-server-grid.xml (rev 0)
+++ labs/jbossrules/trunk/drools-server/src/main/resources/camel-server-grid.xml 2010-11-19 16:38:06 UTC (rev 36013)
@@ -0,0 +1,95 @@
+<?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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:cxf="http://camel.apache.org/schema/cxf"
+ xmlns:jaxrs="http://cxf.apache.org/jaxrs"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+ http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd
+ http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
+ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+ ">
+
+ <import resource="classpath:META-INF/cxf/cxf.xml" />
+ <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml"/>
+ <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
+ <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
+
+ <!--
+ ! If you are running on JBoss you will need to copy a camel-jboss.jar into the lib and set this classloader configuration
+ | http://camel.apache.org/camel-jboss.html
+ <bean id="jbossResolver" class="org.apache.camel.jboss.JBossPackageScanClassResolver"/>
+ -->
+
+ <!--
+ ! Define the server end point.
+ ! Copy and paste this element, changing id and the address, to expose services on different urls.
+ ! Different Camel routes can handle different end point paths.
+ -->
+ <cxf:rsServer id="rsServer"
+ address="/rest"
+ serviceClass="org.drools.jax.rs.CommandExecutorImpl">
+ <cxf:providers>
+ <bean class="org.drools.jax.rs.CommandMessageBodyReader"/>
+ </cxf:providers>
+ </cxf:rsServer>
+
+ <cxf:cxfEndpoint id="soapServer"
+ address="/soap"
+ serviceName="ns:CommandExecutor"
+ endpointName="ns:CommandExecutorPort"
+ wsdlURL="soap.wsdl"
+ xmlns:ns="http://soap.jax.drools.org/" >
+ <cxf:properties>
+ <entry key="dataFormat" value="MESSAGE"/>
+ <entry key="defaultOperationName" value="execute"/>
+ </cxf:properties>
+ </cxf:cxfEndpoint>
+
+ <!-- Leave this, as it's needed to make Camel "drools" aware -->
+ <bean id="droolsPolicy" class="org.drools.camel.component.DroolsPolicy" />
+
+ <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
+ <!--
+ ! Routes incoming messages from end point id="rsServer".
+ ! Example route unmarshals the messages with xstream and executes against ksession1.
+ ! Copy and paste this element, changing marshallers and the 'to' uri, to target different sessions, as needed.
+ !-->
+
+ <route>
+ <from uri="cxfrs://bean://rsServer"/>
+ <policy ref="droolsPolicy">
+ <unmarshal ref="xstream" />
+ <to uri="drools:node1" />
+ <marshal ref="xstream" />
+ </policy>
+ </route>
+
+ <route>
+ <from uri="cxf://bean://soapServer"/>
+ <policy ref="droolsPolicy">
+ <unmarshal ref="xstream" />
+ <to uri="drools:node1" />
+ <marshal ref="xstream" />
+ </policy>
+ </route>
+
+ </camelContext>
+
+</beans>
Copied: labs/jbossrules/trunk/drools-server/src/main/resources/knowledge-services-grid.xml (from rev 35991, labs/jbossrules/trunk/drools-server/src/main/resources/knowledge-services.xml)
===================================================================
--- labs/jbossrules/trunk/drools-server/src/main/resources/knowledge-services-grid.xml (rev 0)
+++ labs/jbossrules/trunk/drools-server/src/main/resources/knowledge-services-grid.xml 2010-11-19 16:38:06 UTC (rev 36013)
@@ -0,0 +1,73 @@
+<?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.
+-->
+
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:drools="http://drools.org/schema/drools-spring"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+ http://drools.org/schema/drools-spring http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring-1.2.0.xsd">
+
+ <bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
+ <!-- org.h2.jdbcx.JdbcDataSource -->
+ <property name="driverClassName" value="org.h2.Driver" />
+ <property name="url" value="jdbc:h2:mem:mydb" />
+ <property name="username" value="sa" />
+ <property name="password" value="" />
+ </bean>
+
+ <bean id="myEmf" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
+ <property name="persistenceUnitName" value="org.drools.grid"/>
+ </bean>
+
+ <bean id="shared-map" class="java.util.HashMap" />
+
+ <bean id="localWhitePages" class="org.drools.grid.service.directory.impl.WhitePagesImpl" />
+
+ <drools:grid id="grid1">
+ <drools:core-services ref="shared-map" />
+
+ <drools:whitepages>
+ <drools:jpa-persistence>
+ <drools:entity-manager-factory ref="myEmf" />
+ </drools:jpa-persistence>
+ </drools:whitepages>
+
+ <drools:socket-service acceptor="mina" ip="127.0.0.1">
+ <drools:service name="org.drools.grid.service.directory.WhitePages" port="8000" />
+ </drools:socket-service>
+ </drools:grid>
+
+ <drools:grid id="grid2">
+ <drools:core-services ref="shared-map" />
+ </drools:grid>
+
+ <drools:grid-node id="node1" grid="grid1">
+ <drools:socket-service port="8000" />
+ </drools:grid-node>
+
+ <drools:kbase id="kbase1" node="node1">
+ <drools:resources>
+ <drools:resource type="DRL" source="classpath:test.drl"/>
+ </drools:resources>
+ </drools:kbase>
+
+ <drools:ksession id="ksession3" type="stateful" kbase="kbase1" node="node1"/>
+
+
+
+</beans>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/CxfRsClientServerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/CxfRsClientServerTest.java 2010-11-19 14:34:30 UTC (rev 36012)
+++ labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/CxfRsClientServerTest.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -40,6 +40,7 @@
assertTrue( response.contains( "execution-results" ) );
assertTrue( response.contains( "echo" ) );
+ springContext.stop();
}
}
Copied: labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/CxfSoapClientServerGridTest.java (from rev 35991, labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/CxfSoapClientServerTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/CxfSoapClientServerGridTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/CxfSoapClientServerGridTest.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -0,0 +1,170 @@
+/**
+ * Copyright 2010 JBoss Inc
+ *
+ * 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.
+ */
+
+package org.drools.server;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.xml.namespace.QName;
+import javax.xml.soap.MessageFactory;
+import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPMessage;
+
+import junit.framework.TestCase;
+
+import org.apache.camel.CamelContext;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderError;
+import org.drools.builder.KnowledgeBuilderErrors;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.builder.ResourceType;
+import org.drools.grid.ConnectionFactoryService;
+import org.drools.grid.GridConnection;
+import org.drools.grid.GridNode;
+import org.drools.grid.GridServiceDescription;
+import org.drools.grid.SocketService;
+import org.drools.grid.impl.GridImpl;
+import org.drools.grid.service.directory.WhitePages;
+import org.drools.io.impl.ByteArrayResource;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.junit.Assert;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class CxfSoapClientServerGridTest extends TestCase {
+
+ public void test1() throws Exception {
+ ClassPathXmlApplicationContext springContext = new ClassPathXmlApplicationContext( "classpath:beans-test-grid.xml" );
+
+ SOAPMessage soapMessage = createMessageForKsession("ksession3");
+
+ Test test = new Test();
+ String response = test.execute( soapMessage,
+ (CamelContext) springContext.getBean( "camel-client-ctx" ) );
+
+ //System.out.println("Response 1 = "+ response );
+ assertTrue( response.contains( "execution-results" ) );
+ assertTrue( response.contains( "echo" ) );
+
+
+ GridImpl grid2 = (GridImpl) springContext.getBean("grid2");
+ GridServiceDescription<GridNode> n1Gsd = grid2.get( WhitePages.class ).lookup( "node1" );
+ GridConnection<GridNode> conn = grid2.get( ConnectionFactoryService.class ).createConnection( n1Gsd );
+ GridNode remoteN1 = conn.connect();
+
+ KnowledgeBuilder kbuilder = remoteN1.get( KnowledgeBuilderFactoryService.class ).newKnowledgeBuilder();
+
+ Assert.assertNotNull( kbuilder );
+
+ String rule = "package org.grid.test\n"
+ + "declare Message2\n"
+ + "text : String\n"
+ + "end\n"
+ + "rule \"echo2\" \n"
+ + "dialect \"mvel\"\n"
+ + "when\n"
+ + " $m : Message2()\n"
+ + "then\n"
+ + "$m.text = \"echo2:\" + $m.text;\n"
+ + "end\n";
+ //System.out.println("Rule = "+rule);
+ kbuilder.add( new ByteArrayResource( rule.getBytes() ),
+ ResourceType.DRL );
+
+ KnowledgeBuilderErrors errors = kbuilder.getErrors();
+ if ( errors != null && errors.size() > 0 ) {
+ for ( KnowledgeBuilderError error : errors ) {
+ System.out.println( "Error: " + error.getMessage() );
+
+ }
+ fail("KnowledgeBase did not build");
+ }
+
+ KnowledgeBase kbase = remoteN1.get( KnowledgeBaseFactoryService.class ).newKnowledgeBase();
+
+ Assert.assertNotNull( kbase );
+
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+
+ Assert.assertNotNull( session );
+
+
+ remoteN1.set("ksession2", session);
+
+
+ soapMessage = createMessageForKsession("ksession2");
+
+ String response2 = test.execute( soapMessage,
+ (CamelContext) springContext.getBean( "camel-client-ctx" ) );
+
+ //System.out.println("Response 2 = "+response2 );
+ assertTrue( response2.contains( "execution-results" ) );
+ assertTrue( response2.contains( "echo2" ) );
+
+ remoteN1.dispose();
+ GridImpl grid1 = (GridImpl) springContext.getBean("grid1");
+ grid1.get(SocketService.class).close();
+
+ springContext.registerShutdownHook();
+ springContext.stop();
+
+ }
+
+ private SOAPMessage createMessageForKsession(String ksessionName) throws SOAPException{
+
+ SOAPMessage soapMessage = MessageFactory.newInstance().createMessage();
+ SOAPBody body = soapMessage.getSOAPPart().getEnvelope().getBody();
+ QName payloadName = new QName( "http://soap.jax.drools.org",
+ "execute",
+ "ns1" );
+
+ body.addBodyElement( payloadName );
+ String add="";
+ String packages = "org.test";
+ if(ksessionName.equals("ksession2")){
+ add="2";
+ packages = "org.grid.test";
+ }
+ String cmd = "";
+ cmd += "<batch-execution lookup=\""+ksessionName+"\">\n";
+ cmd += " <insert out-identifier=\"message\">\n";
+ cmd += " <"+packages+".Message"+add+">\n";
+ cmd += " <text>Helllo World"+ksessionName+"</text>\n";
+ cmd += " </"+packages+".Message"+add+">\n";
+ cmd += " </insert>\n";
+ cmd += " <fire-all-rules/>\n";
+ cmd += "</batch-execution>\n";
+
+ body.addTextNode( cmd );
+ OutputStream os = new ByteArrayOutputStream();
+ try {
+ soapMessage.writeTo(os);
+ } catch (IOException ex) {
+ Logger.getLogger(CxfSoapClientServerGridTest.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ //System.out.println("SOAP = "+os.toString());
+ return soapMessage;
+
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/CxfSoapClientServerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/CxfSoapClientServerTest.java 2010-11-19 14:34:30 UTC (rev 36012)
+++ labs/jbossrules/trunk/drools-server/src/test/java/org/drools/server/CxfSoapClientServerTest.java 2010-11-19 16:38:06 UTC (rev 36013)
@@ -27,7 +27,7 @@
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class CxfSoapClientServerTest extends TestCase {
-
+
public void test1() throws Exception {
ClassPathXmlApplicationContext springContext = new ClassPathXmlApplicationContext( "classpath:beans-test.xml" );
@@ -55,7 +55,8 @@
(CamelContext) springContext.getBean( "camel-client-ctx" ) );
assertTrue( response.contains( "execution-results" ) );
- assertTrue( response.contains( "echo" ) );
+ assertTrue( response.contains( "echo" ) );
+ springContext.stop();
}
}
Copied: labs/jbossrules/trunk/drools-server/src/test/resources/beans-test-grid.xml (from rev 35991, labs/jbossrules/trunk/drools-server/src/test/resources/beans-test.xml)
===================================================================
--- labs/jbossrules/trunk/drools-server/src/test/resources/beans-test-grid.xml (rev 0)
+++ labs/jbossrules/trunk/drools-server/src/test/resources/beans-test-grid.xml 2010-11-19 16:38:06 UTC (rev 36013)
@@ -0,0 +1,36 @@
+<?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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:cxf="http://camel.apache.org/schema/cxf"
+ xmlns:jaxrs="http://cxf.apache.org/jaxrs"
+ xmlns:drools="http://drools.org/schema/drools-spring"
+ xsi:schemaLocation="
+ http://drools.org/schema/drools-spring org/drools/container/spring/drools-spring-1.2.0.xsd
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+ http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd
+ http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
+ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
+
+ <import resource="classpath:knowledge-services-grid.xml" />
+
+ <import resource="classpath:camel-embedded-server-test-grid.xml" />
+
+ <import resource="classpath:camel-client-test.xml" />
+
+</beans>
Copied: labs/jbossrules/trunk/drools-server/src/test/resources/camel-embedded-server-test-grid.xml (from rev 35991, labs/jbossrules/trunk/drools-server/src/test/resources/camel-embedded-server-test.xml)
===================================================================
--- labs/jbossrules/trunk/drools-server/src/test/resources/camel-embedded-server-test-grid.xml (rev 0)
+++ labs/jbossrules/trunk/drools-server/src/test/resources/camel-embedded-server-test-grid.xml 2010-11-19 16:38:06 UTC (rev 36013)
@@ -0,0 +1,80 @@
+<?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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:cxf="http://camel.apache.org/schema/cxf"
+ xmlns:jaxrs="http://cxf.apache.org/jaxrs"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+ http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd
+ http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
+ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+ ">
+
+ <import resource="classpath:META-INF/cxf/cxf.xml"/>
+ <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml"/>
+ <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
+ <import resource="classpath:META-INF/cxf/cxf-extension-http-jetty.xml"/>
+
+ <cxf:rsServer id="rsServer"
+ address="http://localhost:9002/rest"
+ serviceClass="org.drools.jax.rs.CommandExecutorImpl">
+ <cxf:providers>
+ <bean class="org.drools.jax.rs.CommandMessageBodyReader"/>
+ </cxf:providers>
+ </cxf:rsServer>
+
+ <cxf:cxfEndpoint id="soapServer"
+ address="http://localhost:9002/soap"
+ serviceName="ns:CommandExecutor"
+ endpointName="ns:CommandExecutorPort"
+ wsdlURL="soap.wsdl"
+ xmlns:ns="http://soap.jax.drools.org/" >
+ <cxf:properties>
+ <entry key="dataFormat" value="MESSAGE"/>
+ <entry key="defaultOperationName" value="execute"/>
+ </cxf:properties>
+ </cxf:cxfEndpoint>
+
+ <!-- Leave this, as it's needed to make Camel "drools" aware -->
+ <bean id="droolsPolicy" class="org.drools.camel.component.DroolsPolicy" />
+
+ <camelContext id="camel-server-ctx" xmlns="http://camel.apache.org/schema/spring">
+
+
+ <route>
+ <from uri="cxfrs://bean://rsServer"/>
+ <policy ref="droolsPolicy">
+ <unmarshal ref="xstream" />
+ <to uri="drools:node1" />
+ <marshal ref="xstream" />
+ </policy>
+ </route>
+
+ <route>
+ <from uri="cxf://bean://soapServer"/>
+ <policy ref="droolsPolicy">
+ <unmarshal ref="xstream" />
+ <to uri="drools:node1" />
+ <marshal ref="xstream" />
+ </policy>
+ </route>
+
+ </camelContext>
+
+</beans>
More information about the jboss-svn-commits
mailing list