diff --git a/drools-mas-acl/pom.xml b/drools-mas-acl/pom.xml index 88d5d93..922f918 100644 --- a/drools-mas-acl/pom.xml +++ b/drools-mas-acl/pom.xml @@ -58,7 +58,7 @@ com.thoughtworks.xstream xstream - 1.2.2 + 1.4.1 org.codehaus.jettison diff --git a/drools-mas-core/src/main/java/org/drools/mas/core/DroolsAgentFactory.java b/drools-mas-core/src/main/java/org/drools/mas/core/DroolsAgentFactory.java index 9cded0e..66c41b5 100644 --- a/drools-mas-core/src/main/java/org/drools/mas/core/DroolsAgentFactory.java +++ b/drools-mas-core/src/main/java/org/drools/mas/core/DroolsAgentFactory.java @@ -110,12 +110,12 @@ public DroolsAgent spawn( DroolsAgentConfiguration config ) { SessionManager sm = SessionManager.create( config, descr, grid, true ); StatefulKnowledgeSession mindSet = sm.getStatefulKnowledgeSession(); - try{ - mindSet.setGlobal( "grid", grid ); - } catch (Exception e){ - //maybe 'grid' is not even defined in subsession - logger.debug("Global 'grid' not set on session '"+descr.getSessionId()+"' due to "+e.getMessage()); - } +// try{ +// mindSet.setGlobal( "grid", grid ); +// } catch (Exception e){ +// //maybe 'grid' is not even defined in subsession +// logger.debug("Global 'grid' not set on session '"+descr.getSessionId()+"' due to "+e.getMessage()); +// } mindSet.fireAllRules(); diff --git a/drools-mas-core/src/main/java/org/drools/mas/core/SessionManager.java b/drools-mas-core/src/main/java/org/drools/mas/core/SessionManager.java index 9bef196..9839a54 100644 --- a/drools-mas-core/src/main/java/org/drools/mas/core/SessionManager.java +++ b/drools-mas-core/src/main/java/org/drools/mas/core/SessionManager.java @@ -119,6 +119,10 @@ public static SessionManager create( String sessionId, DroolsAgentConfiguration // should indicate that someone else left an orphan row in the WP node = grid.claimGridNode( nodeId ); grid.get( SocketService.class ).addService( nodeId, port, node ); + + if ( forceRemote && ! node.isRemote() ) { + node = grid.asRemoteNode( node ); + } } @@ -127,8 +131,11 @@ public static SessionManager create( String sessionId, DroolsAgentConfiguration logger.debug( " ### Session Manager: Creating a new Local Node" ); } node = createLocalNode( grid, nodeId ); - grid.get( SocketService.class ).addService( nodeId, port, node ); + + if ( forceRemote && ! node.isRemote() ) { + node = grid.asRemoteNode( node ); + } } } else { diff --git a/drools-mas-core/src/main/resources/org/drools/mas/acl_common.drl b/drools-mas-core/src/main/resources/org/drools/mas/acl_common.drl index 7b31577..2417d4c 100644 --- a/drools-mas-core/src/main/resources/org/drools/mas/acl_common.drl +++ b/drools-mas-core/src/main/resources/org/drools/mas/acl_common.drl @@ -30,6 +30,7 @@ import org.drools.mas.util.LoggerHelper; import org.drools.mas.util.helper.SessionLocator; import org.drools.grid.Grid; +import org.drools.grid.helper.GridHelper; import org.drools.grid.api.impl.ResourceDescriptorImpl; import org.drools.grid.api.ResourceDescriptor; @@ -39,8 +40,8 @@ import org.drools.builder.ResourceType; global Grid grid; declare ResourceAdditionRequest - URL: URL - type: ResourceType + URL : URL + type : ResourceType end query queryIf( Object $o ) @@ -77,6 +78,16 @@ end //end +rule "Init Grid" +salience 999 +when +then + // need to initialize Grid in remote nodes + if ( kcontext.getKnowledgeRuntime().getGlobal( "grid" ) == null ) { + kcontext.getKnowledgeRuntime().setGlobal( "grid", GridHelper.createGrid() ); + } +end + rule "Add Resource" when $rar: ResourceAdditionRequest($url: URL, $type: type) @@ -88,10 +99,7 @@ then rd.setResourceURL($url); rd.setType($type); - //SessionManager.addResource(grid, $nodeId, $sessionId, rd); - - SessionManager.addResource(drools.getWorkingMemory(), rd); + SessionManager.addResource( grid, $nodeId, $sessionId, rd ); - retract($rar); end diff --git a/drools-mas-core/src/test/java/org/drools/mas/core/tests/TestAgent.java b/drools-mas-core/src/test/java/org/drools/mas/core/tests/TestAgent.java index ee44b38..83fc8a7 100644 --- a/drools-mas-core/src/test/java/org/drools/mas/core/tests/TestAgent.java +++ b/drools-mas-core/src/test/java/org/drools/mas/core/tests/TestAgent.java @@ -79,9 +79,9 @@ public void createAgents() { DroolsAgentConfiguration mainConfig = new DroolsAgentConfiguration(); mainConfig.setAgentId( "Mock Test Agent" ); mainConfig.setChangeset( "mainTestAgent_changeset.xml" ); - DroolsAgentConfiguration.SubSessionDescriptor subDescr1 = new DroolsAgentConfiguration.SubSessionDescriptor( "session1", "sub1.xml", "local-mock-test-agent" ); + DroolsAgentConfiguration.SubSessionDescriptor subDescr1 = new DroolsAgentConfiguration.SubSessionDescriptor( "session1", "sub1.xml", "mock-test-agent" ); mainConfig.addSubSession( subDescr1 ); - DroolsAgentConfiguration.SubSessionDescriptor subDescr2 = new DroolsAgentConfiguration.SubSessionDescriptor( "session2", "sub2.xml", "local-mock-test-agent" ); + DroolsAgentConfiguration.SubSessionDescriptor subDescr2 = new DroolsAgentConfiguration.SubSessionDescriptor( "session2", "sub2.xml", "mock-test-agent" ); mainConfig.addSubSession( subDescr2 ); mainConfig.setMindNodeLocation( "local-mock-test-agent" ); mainConfig.setPort( 7000 ); diff --git a/examples/drools-mas-emergency-agent/src/main/resources/META-INF/applicationContext.xml b/examples/drools-mas-emergency-agent/src/main/resources/META-INF/applicationContext.xml index 2d954ae..9cb92ab 100644 --- a/examples/drools-mas-emergency-agent/src/main/resources/META-INF/applicationContext.xml +++ b/examples/drools-mas-emergency-agent/src/main/resources/META-INF/applicationContext.xml @@ -21,7 +21,7 @@ http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> - +