From development at innova4j.com Sat Dec 8 08:57:30 2007 From: development at innova4j.com (Development Innova4j) Date: Sat, 8 Dec 2007 08:57:30 -0500 Subject: Cougaar best practices Message-ID: Hello people, I am working in my first Cougaar proyect, and i have some question about the best practices in cougaar... 1 - How agent redundancy is achieved? e.g I have a plugin that publishes a messages, and the message must be procesed by two agents. (the master and backup). 2- In which cases should be used "Blackboard Serice" and the "Message Transport Service". 3- Where i can found some document about the Cougaar best practices? Many thanks for your help. Alex. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://cougaar.org/pipermail/cougaar-developers/attachments/20071208/fd259945/attachment.html From duchene.morgan at wanadoo.fr Mon Dec 10 14:04:22 2007 From: duchene.morgan at wanadoo.fr (=?ISO-8859-1?Q?Morgan_Duch=E8ne?=) Date: Mon, 10 Dec 2007 20:04:22 +0100 Subject: Logic Providers Message-ID: <475D8DB6.60301@wanadoo.fr> Hi, I have been wondering for some time what exactly logic providers are and the best way to use them. I don't really get the point when they should be used instead of plugins. Thanks for your help, Morgan From twright at bbn.com Mon Dec 10 15:12:53 2007 From: twright at bbn.com (Todd Wright) Date: Mon, 10 Dec 2007 15:12:53 -0500 Subject: Cougaar best practices In-Reply-To: References: Message-ID: <475D9DC5.1020701@bbn.com> Development Innova4j wrote: > Hello people, > > I am working in my first Cougaar proyect, and i have some question about > the best practices in cougaar... > > 1 - How agent redundancy is achieved? > e.g I have a plugin that publishes a messages, and the message must be > procesed by two agents. (the master and backup). The standard solution is for the plugin to publish two Relay blackboard objects, where each relay object specifies a remote "target" agent address. A relay example is included in the Cougaar release, in the "demo-ping.zip". The ping demo is discussed in the Cougaar Overview slides: http://cougaar.org/docman/view.php/17/196/CougaarOverview.ppt > > 2- In which cases should be used "Blackboard Serice" and the "Message > Transport Service". Plugins should use the blackboard service. The blackboard translates Relay objects into messages and handles the I/O. > > 3- Where i can found some document about the Cougaar best practices? See the "demo-ping.zip" and "demo-mandelbrot.zip". Also see the Main documents at: http://docs.cougaar.org Todd > > Many thanks for your help. > > Alex. > > > > > ------------------------------------------------------------------------ > > _______________________________________________ > Cougaar-developers mailing list > Cougaar-developers at cougaar.org > http://cougaar.org/mailman/listinfo/cougaar-developers From twright at bbn.com Mon Dec 10 19:55:09 2007 From: twright at bbn.com (Todd Wright) Date: Mon, 10 Dec 2007 19:55:09 -0500 Subject: Logic Providers In-Reply-To: <475D8DB6.60301@wanadoo.fr> References: <475D8DB6.60301@wanadoo.fr> Message-ID: <475DDFED.9080108@bbn.com> Morgan Duch?ne wrote: > Hi, > > I have been wondering for some time what exactly logic providers are Logic Providers (LPs) are blackboard callbacks that run at the end of every blackboard transaction, i.e. at the end of every plugin "setupSubscriptions()" and "execute()". LPs only run due to a plugin transaction or message input. LPs don't have their own thread, alarms, or subscriptions. This severely limits what LPs can do. LPs perform several different types of jobs. They translate blackboard modifications into output messages: - a "publishAdd" of a relay sends an "add-relay" message and input messages into blackboard modifications: - a received "add-relay" message causes a blackboard "publishAdd" LPs automate higher-level blackboard operations, e.g.: - a "publishRemove" of a Task recursively removes all child tasks - a "publishChange" of an Allocation updates the parent task's status Lastly, LPs handle a couple special events such as: - a remote agent restart notification (which initiates state reconciliation) - a community membership change notification (causes relay add/remove msgs) LPs run after each transaction but before the subscriptions are updated. This means that the result of the above LP "recursive task removal" will be grouped into a single transaction instead of multiple transactions. This is one reason why certain "higher-level blackboard operation" code must be written as LPs. LPs are not components, but they are contained within pluggable Domain components. The blackboard always loads the "root" domain, which contains the RelayLP. Other domains, such as the "planning" domain, are optional and have their own set of LPs. > and the best way to use them. > > I don't really get the point when they should > be used instead of plugins. Usually you shouldn't. The core's RelayLP is sufficient for nearly all applications. Most of the planning domain's LPs could likely be rewritten to be plugins that use relays. The above "recursive task removal" behavior could likely be relaxed from a single-transaction LP to a regular plugin. The planning LPs predate the RelayLP. Arguably even the RelayLP should be a plugin, which would separate the blackboard from the message transport. For now they're intertwined, primarily for historical reasons (and some threading/persistence reasons). Todd > > Thanks for your help, > Morgan > > _______________________________________________ > Cougaar-developers mailing list > Cougaar-developers at cougaar.org > http://cougaar.org/mailman/listinfo/cougaar-developers > From duchene.morgan at wanadoo.fr Tue Dec 11 12:53:45 2007 From: duchene.morgan at wanadoo.fr (=?ISO-8859-1?Q?Morgan_Duch=E8ne?=) Date: Tue, 11 Dec 2007 18:53:45 +0100 Subject: UI Tutorial - How to deploy Message-ID: <475ECEA9.7010400@wanadoo.fr> Hi, thanks for the previous answer. I am now working on the user interfaces tutorial. Here is a remainder of the work to do: >For example, it'd be great to have a UI tutorial that illustrates the >same basic application implemented different ways. The application > could be a simple blackboard object counter that displays a table of > classname to count, e.g.: > CLASSNAME, COUNT > Relay, 1234 > Task, 234 > Asset, 4321 > ... > and implement several different designs: > 1) HTML page > 2) HTML + AJAX > 3) Applet (embedded Swing JTable, talks to Servlet) > 4) Google Web Toolkit (embedded GWT widgets, talks to Servlet) > 5) Swing GUI (stand-alone application, talks to Servlet via > URLConnection) > 6) SOAP client (talks to Cougaar WebServicesService "webaxis" plugin) > The existing Cougaar demos only illustrate simple HTML pages. - I have added a Flex in the list as it's another good example. - I need help to know the best way to deploy examples as I have not found any documentation on the topic. Usually with Tomcat I would make a webapp and deploy it droping the war into the webapps folder. But is it the philosophy of Cougaar as servlets are not deployed like that but in the society description file? Here I need to deploy html pages, images, js files and applets. Am I supposed to make a proxy with another Tomcat server? Regards, Morgan From twright at bbn.com Tue Dec 11 13:23:33 2007 From: twright at bbn.com (Todd Wright) Date: Tue, 11 Dec 2007 13:23:33 -0500 Subject: UI Tutorial - How to deploy In-Reply-To: <475ECEA9.7010400@wanadoo.fr> References: <475ECEA9.7010400@wanadoo.fr> Message-ID: <475ED5A5.5010700@bbn.com> Morgan Duch?ne wrote: > Hi, thanks for the previous answer. > > I am now working on the user interfaces tutorial. Great. Thanks. > Here is a remainder of the work to do: > >> For example, it'd be great to have a UI tutorial that illustrates the >> same basic application implemented different ways. The application >> could be a simple blackboard object counter that displays a table of >> classname to count, e.g.: >> CLASSNAME, COUNT >> Relay, 1234 >> Task, 234 >> Asset, 4321 >> ... >> and implement several different designs: >> 1) HTML page >> 2) HTML + AJAX >> 3) Applet (embedded Swing JTable, talks to Servlet) >> 4) Google Web Toolkit (embedded GWT widgets, talks to Servlet) >> 5) Swing GUI (stand-alone application, talks to Servlet via >> URLConnection) >> 6) SOAP client (talks to Cougaar WebServicesService "webaxis" plugin) >> The existing Cougaar demos only illustrate simple HTML pages. > > > > - I have added a Flex in the list as it's another good example. Yes, a Flex demo would be great. > > - I need help to know the best way to deploy examples as I have not > found any documentation on the topic. Usually with Tomcat I would make a > webapp and deploy it droping the war into the webapps folder. But is it > the philosophy of Cougaar as servlets are not deployed like that but in > the society description file? Yes, if possible. > Here I need to deploy html pages, images, > js files and applets. Am I supposed to make a proxy with another Tomcat > server? You can load the "/file" servlet: /file ... A file in: $COUGAAR_INSTALL_PATH/mydir/myfile.txt will be available as: http://localhost:8800/file/mydir/myfile.txt Todd > > Regards, > Morgan > > _______________________________________________ > Cougaar-developers mailing list > Cougaar-developers at cougaar.org > http://cougaar.org/mailman/listinfo/cougaar-developers > From duchene.morgan at wanadoo.fr Wed Dec 12 04:19:58 2007 From: duchene.morgan at wanadoo.fr (=?ISO-8859-1?Q?Morgan_Duch=E8ne?=) Date: Wed, 12 Dec 2007 10:19:58 +0100 Subject: UI Tutorial - How to deploy In-Reply-To: <475ED5A5.5010700@bbn.com> References: <475ECEA9.7010400@wanadoo.fr> <475ED5A5.5010700@bbn.com> Message-ID: <475FA7BE.4040505@wanadoo.fr> Thanks Todd, So I will use the FileServlet for the tutorial. To add more security (if I find time), I will add an extra argument to the servlet to specify the root folder in which the servlet can get files. Cheers, Morgan > > You can load the "/file" servlet: > > > /file > > ... > > A file in: > $COUGAAR_INSTALL_PATH/mydir/myfile.txt > will be available as: > http://localhost:8800/file/mydir/myfile.txt From duchene.morgan at wanadoo.fr Wed Dec 12 10:31:45 2007 From: duchene.morgan at wanadoo.fr (=?ISO-8859-1?Q?Morgan_Duch=E8ne?=) Date: Wed, 12 Dec 2007 16:31:45 +0100 Subject: UI Tutorial - Dynamic Pages Message-ID: <475FFEE1.4080206@wanadoo.fr> Hi again, I have had a look at FileServlet and the embedded Tomcat web server. It seems like the jsp servlet is not available for dynamic pages. On the other hand, it's not realistic in a real project to have complex html pages with ajax included into servlets to deliver them. So I need a suggestion for dynamic html pages in the tutorial? Thanks, Morgan From twright at bbn.com Thu Dec 13 13:07:12 2007 From: twright at bbn.com (Todd Wright) Date: Thu, 13 Dec 2007 13:07:12 -0500 Subject: UI Tutorial - Dynamic Pages In-Reply-To: <475FFEE1.4080206@wanadoo.fr> References: <475FFEE1.4080206@wanadoo.fr> Message-ID: <476174D0.4070700@bbn.com> Morgan Duch?ne wrote: > Hi again, > I have had a look at FileServlet and the embedded Tomcat web server. > It seems like the jsp servlet is not available for dynamic pages. Right. From Tomcat's point of view there's only one servlet for the entire JVM. This Cougaar "hook" servlet maintains a registry of the Cougaar-internal plugin servlets. Cougaar is loosely integrated with Tomcat, to allow for alternate servlet engine implementations. You can statically compile a JSP to a Java servlet and load that servlet in Cougaar. There's an example attached to the end of: http://bugs.cougaar.org/show_bug.cgi?id=1092#c3 Tomcat automates this JSP-to-JavaClass compilation and periodically checks the JSP file timestamp; I can imagine an equivalent Cougaar servlet wrapper, but that hasn't been implemented. > On the > other hand, it's not realistic in a real project to have complex html > pages with ajax included into servlets to deliver them. Maybe. The static files could be served through the FileServlet. At one extreme we could show how to integrate a full-fledged Model-View-Controller web toolkit (e.g. Tapestry or Struts) on top of Cougaar servlets. This would likely be a lot of work. > So I need a > suggestion for dynamic html pages in the tutorial? My original thought was a trivial DHTML + AJAX page, something like a "hello world" application: http://www.dynamicajax.com/fr/AJAX_Hello_World-.html For example, the servlet (with no URL parameters) would write an HTML page with a table and a submit button. The button would send an AJAX request. The same servlet (with a special URL parameter or some other flag) would respond with JSON-formatted table data, e.g. data about what's on the blackboard. The browser-side AJAX code parses the response and fills in the HTML table. Todd > Thanks, > Morgan > > _______________________________________________ > Cougaar-developers mailing list > Cougaar-developers at cougaar.org > http://cougaar.org/mailman/listinfo/cougaar-developers > From mkamerma at science.uva.nl Fri Dec 14 09:32:34 2007 From: mkamerma at science.uva.nl (Michiel Kamermans) Date: Fri, 14 Dec 2007 15:32:34 +0100 Subject: publishChange does not trigger an execute Message-ID: <47629402.1000602@science.uva.nl> Hi, I'm using cougaar 12.4 and implemented a very simple agent, using relays based on the ones from the pizzaparty demo. When run from the society xml I use, one nameserver agent and two of these simple agents are created, as well as a jframe button that tells "agent 1" to send an object over a relay to "agent 2". these simple agents just look at whether they received an object, wait two seconds, and then send a same object back - effectively sending one object starts a stream of back-and-forth communication. Problem is, I tried two approaches; in the first I make a new relay a la "Relaysource relay = new RelaySource(agentaddress,new Object())" and then use blackboard.publishAdd(relay) to have cougaar do all the right things and have the RelayTarget created at the target agent. This works fine in that a back-and-forth stream keeps going until I kill the JVM. The second approach fails horribly: instead of making new relays all the time, I give the agents a simple "acquaintance" set, which is just a HashMap so that agents can reuse a one-time made relay for each agent that contacts them. For the first message from agent 1 to agent 2, all goes well because it doesn't have agent 2 as acquaintance yet, so it has to make a new relay and use publishAdd to have it added to the blackboard. Then when agent 2 receives the object, it also doesn't know agent 1 yet, so when replying it creates a new relay to agent 1 and then publishAdds it to the blackboard. Then when agent 1 receives this response, things fail. It will retrieve the relay from its acquantaince set, change what's on the relay, and then call blackboard.publishChange for this relay... and then agent 2's execute() method is never called =( I've put the source code on http://pomax.nihongoresources.com/downloads/cougaar with the main class being DPNTestClass.java When I run this (I can't really put all the dependency code online too, due to ye olde proprietary silliness) the output is as follows: COUGAAR 12.0 (JDK1.4) built on Mon Jul 25 08:05:17 CEST 2005 Repository: B12_0JDK1_4 on Mon Jul 25 08:00:06 CEST 2005 VM: JDK 1.6.0_01-b06 (mixed mode) OS: Windows XP (5.1) 13:12:49,078 SHOUT - XMLComponentInitializerServiceProvider - Initializing node "DPN1" from XML file "DPNSociety.xml" 13:12:56,968 WARN - DirectSysStatSupplier - No handler for Memory on platform Windows XP 13:12:56,968 WARN - DirectSysStatSupplier - No handler for CPU on platform Windows XP 13:12:56,968 WARN - DirectSysStatSupplier - No handler for LoadAverage on platform Windows XP 13:12:56,968 WARN - DirectSysStatSupplier - No handler for Sockets on platform Windows XP 13:12:59,046 SHOUT - AssetInitializerServiceComponent - DPN1: Not using a database, initializing solely from Files. 13:13:00,921 SHOUT - DPNTestClass - Agent 1: loaded agent... 13:13:01,343 SHOUT - DPNTestClass - Agent 1: StartButtonObject created 13:13:01,453 SHOUT - DPNTestClass - Agent 2: loaded agent... 13:13:01,515 SHOUT - DPNTestClass - Agent 2: StartButtonObject created 13:13:01,609 SHOUT - DPNTestClass - Agent 2: setting up subscriptions 13:13:01,609 SHOUT - DPNTestClass - Agent 1: setting up subscriptions 13:13:01,625 SHOUT - DPNTestClass - Agent 1: calling execute 13:13:01,625 SHOUT - DPNTestClass - Agent 2: calling execute 13:13:01,625 SHOUT - DPNTestClass - Agent 1: calling execute 13:13:01,625 SHOUT - DPNTestClass - Agent 2: calling execute 2007-12-14 01:13:06,546 SHOUT [DOTS] - ............ I then press the button of the StartButtonObject for agent1, which calls agent 1's startContainerStream() method 13:14:05,171 SHOUT - DPNTestClass - Agent 1: adding relay to blackboard 2007-12-14 01:14:05,171 SHOUT [DOTS] - +- 13:14:05,203 SHOUT - DPNTestClass - Agent 2: calling execute 13:14:05,203 SHOUT - DPNTestClass - Agent 2: *** 13:14:05,203 SHOUT - DPNTestClass - Agent 2: a new relay was found 13:14:05,203 DEBUG - DPNTestClass - Agent 2: received DPNTestContainer 1 from Agent 1 2007-12-14 01:14:06,546 SHOUT [DOTS] - . 13:14:07,203 DEBUG - DPNTestClass - Agent 2: sending DPNTestContainer 2 as response to Agent 1 13:14:07,203 SHOUT - DPNTestClass - Agent 2: adding relay to blackboard 2007-12-14 01:14:07,203 SHOUT [DOTS] - +- 13:14:07,203 SHOUT - DPNTestClass - Agent 1: calling execute 13:14:07,203 SHOUT - DPNTestClass - Agent 1: *** 13:14:07,203 SHOUT - DPNTestClass - Agent 1: a new relay was found 13:14:07,203 DEBUG - DPNTestClass - Agent 1: received DPNTestContainer 2 from Agent 2 13:14:09,203 DEBUG - DPNTestClass - Agent 1: sending DPNTestContainer 3 as response to Agent 2 13:14:09,203 SHOUT - DPNTestClass - Agent 1: publishing change on relay 2007-12-14 01:14:09,203 SHOUT [DOTS] - +-........................................................... And no amount of waiting leads to agent 2's execute() being called =( I hope I just forgot to add something really simple to the relay class or publish call (just to make sure I tried adding a changelist Collection to publishChange but that didn't help get execute called). So... does anyone have any idea what I (clearly) must have done wrong? Thank you in advance, - Mike Kamermans University of Amsterdam From twright at bbn.com Fri Dec 14 11:51:09 2007 From: twright at bbn.com (Todd Wright) Date: Fri, 14 Dec 2007 11:51:09 -0500 Subject: publishChange does not trigger an execute In-Reply-To: <47629402.1000602@science.uva.nl> References: <47629402.1000602@science.uva.nl> Message-ID: <4762B47D.30101@bbn.com> Michiel Kamermans wrote: > Hi, > > I'm using cougaar 12.4 and implemented a very simple agent, using relays > based on the ones from the pizzaparty demo. Okay. Also see the ping demo in the 12.4 release's "demo-ping.zip", which is a trimmed-down relay demo. You might also be interested in: demo-hello.zip : trivial "hello world" plugin demo-mandelbrot.zip : various UI and relay design patterns demo-mesh.zip : relay performance benchmark > When run from the society > xml I use, one nameserver agent and two of these simple agents are > created, as well as a jframe button that tells "agent 1" to send an > object over a relay to "agent 2". these simple agents just look at > whether they received an object, wait two seconds, and then send a same > object back - effectively sending one object starts a stream of > back-and-forth communication. > > Problem is, I tried two approaches; in the first I make a new relay a la > "Relaysource relay = new RelaySource(agentaddress,new Object())" and > then use blackboard.publishAdd(relay) to have cougaar do all the right > things and have the RelayTarget created at the target agent. This works > fine in that a back-and-forth stream keeps going until I kill the JVM. Good. The ping demo uses the same "add/remove" pattern. > The second approach fails horribly: instead of making new relays all the > time, I give the agents a simple "acquaintance" set, which is just a > HashMap so that agents can reuse a one-time > made relay for each agent that contacts them. For the first message from > agent 1 to agent 2, all goes well because it doesn't have agent 2 as > acquaintance yet, so it has to make a new relay and use publishAdd to > have it added to the blackboard. Then when agent 2 receives the object, > it also doesn't know agent 1 yet, so when replying it creates a new > relay to agent 1 and then publishAdds it to the blackboard. Then when > agent 1 receives this response, things fail. It will retrieve the relay > from its acquantaince set, change what's on the relay, and then call > blackboard.publishChange for this relay... and then agent 2's execute() > method is never called =( This "add/change" pattern is also fine. The performance should be nearly identical as the "add/remove" pattern. It looks like the problem is in DPNTargetRelay, where it does: // We don't use responses, but rather use separate relays public int updateContent(Object newContent, Token token) { return Relay.NO_CHANGE; } The pizza demo apparently never publishChange'd its relays. I recommend that you use the standard "SimpleRelay" classes included in the Cougaar core. See the ping demo for an example. That should fix this bug and you won't need your own classes: DPNRelayFactory.java DPNSourceRelay.java DPNTargetRelay.java DPNTargetRelayFactory.java > > I've put the source code on > http://pomax.nihongoresources.com/downloads/cougaar with the main class > being DPNTestClass.java Looks good. A couple comments: 1) As noted above, consider using "SimpleRelay". 2) In the Swing callback for "startConnectionStream()", you could use a TodoSubscription, which is similar to a "SwingUtilities.invokeLater(...)" for the "execute()" thread. An example is attached at the end of: http://www.cougaar.org/pipermail/cougaar-developers/2007-June/002353.html 3) I see you're using a spin loop to add a delay: while (System.currentTimeMillis()-start < 1000*seconds) { seconds = seconds * 1; } This is fine, just a bit surprising. Of course, you could do: try { Thread.sleep(seconds*1000); } catch (InterruptedException ie) {} or use an asynchronous Cougaar Alarm, as illustrated in the ping demo. > > When I run this (I can't really put all the dependency code online too, > due to ye olde proprietary silliness) the output is as follows: > > > COUGAAR 12.0 (JDK1.4) built on Mon Jul 25 08:05:17 CEST 2005 > Repository: B12_0JDK1_4 on Mon Jul 25 08:00:06 CEST 2005 > VM: JDK 1.6.0_01-b06 (mixed mode) > OS: Windows XP (5.1) > 13:12:49,078 SHOUT - XMLComponentInitializerServiceProvider - > Initializing node "DPN1" from XML file "DPNSociety.xml" > 13:12:56,968 WARN - DirectSysStatSupplier - No handler for Memory on > platform Windows XP > 13:12:56,968 WARN - DirectSysStatSupplier - No handler for CPU on > platform Windows XP > 13:12:56,968 WARN - DirectSysStatSupplier - No handler for LoadAverage > on platform Windows XP > 13:12:56,968 WARN - DirectSysStatSupplier - No handler for Sockets on > platform Windows XP > 13:12:59,046 SHOUT - AssetInitializerServiceComponent - DPN1: Not using > a database, initializing solely from Files. > 13:13:00,921 SHOUT - DPNTestClass - Agent 1: loaded agent... > 13:13:01,343 SHOUT - DPNTestClass - Agent 1: StartButtonObject created > 13:13:01,453 SHOUT - DPNTestClass - Agent 2: loaded agent... > 13:13:01,515 SHOUT - DPNTestClass - Agent 2: StartButtonObject created > 13:13:01,609 SHOUT - DPNTestClass - Agent 2: setting up subscriptions > 13:13:01,609 SHOUT - DPNTestClass - Agent 1: setting up subscriptions > 13:13:01,625 SHOUT - DPNTestClass - Agent 1: calling execute > 13:13:01,625 SHOUT - DPNTestClass - Agent 2: calling execute > 13:13:01,625 SHOUT - DPNTestClass - Agent 1: calling execute > 13:13:01,625 SHOUT - DPNTestClass - Agent 2: calling execute > 2007-12-14 01:13:06,546 SHOUT [DOTS] - ............ > > I then press the button of the StartButtonObject for agent1, which calls > agent 1's startContainerStream() method > > 13:14:05,171 SHOUT - DPNTestClass - Agent 1: adding relay to blackboard > 2007-12-14 01:14:05,171 SHOUT [DOTS] - +- > 13:14:05,203 SHOUT - DPNTestClass - Agent 2: calling execute > 13:14:05,203 SHOUT - DPNTestClass - Agent 2: *** > 13:14:05,203 SHOUT - DPNTestClass - Agent 2: a new relay was found > 13:14:05,203 DEBUG - DPNTestClass - Agent 2: received DPNTestContainer 1 > from Agent 1 > 2007-12-14 01:14:06,546 SHOUT [DOTS] - . > 13:14:07,203 DEBUG - DPNTestClass - Agent 2: sending DPNTestContainer 2 > as response to Agent 1 > 13:14:07,203 SHOUT - DPNTestClass - Agent 2: adding relay to blackboard > 2007-12-14 01:14:07,203 SHOUT [DOTS] - +- > 13:14:07,203 SHOUT - DPNTestClass - Agent 1: calling execute > 13:14:07,203 SHOUT - DPNTestClass - Agent 1: *** > 13:14:07,203 SHOUT - DPNTestClass - Agent 1: a new relay was found > 13:14:07,203 DEBUG - DPNTestClass - Agent 1: received DPNTestContainer 2 > from Agent 2 > 13:14:09,203 DEBUG - DPNTestClass - Agent 1: sending DPNTestContainer 3 > as response to Agent 2 > 13:14:09,203 SHOUT - DPNTestClass - Agent 1: publishing change on relay > 2007-12-14 01:14:09,203 SHOUT [DOTS] - > +-........................................................... > > And no amount of waiting leads to agent 2's execute() being called =( > > I hope I just forgot to add something really simple to the relay class > or publish call (just to make sure I tried adding a changelist > Collection to publishChange but that didn't help get execute called). > > So... does anyone have any idea what I (clearly) must have done wrong? > > Thank you in advance, No problem. Thanks for the clear writeup. Todd > > > - Mike Kamermans > University of Amsterdam > > _______________________________________________ > Cougaar-developers mailing list > Cougaar-developers at cougaar.org > http://cougaar.org/mailman/listinfo/cougaar-developers > From mkamerma at science.uva.nl Wed Dec 19 06:44:59 2007 From: mkamerma at science.uva.nl (Michiel Kamermans) Date: Wed, 19 Dec 2007 12:44:59 +0100 Subject: 12.x manual? Message-ID: <4769043B.60603@science.uva.nl> Hello all, is there an updated developer/architecture guide available for cougaar 12.x? With all the changes between 11.4 and the most recent 12.4 it'd be most helpful if there was a pdf or other offline-readable document available for working with the new codebase :) Cheers, - Mike Kamermans University of Amsterdam [0024538]