Hi Vincenzo, Without sample code, it is hard to say for sure, but I believe you need to check the for the token in fire()
if (input.hasToken(0)) { } Page 194 of the Designing Actors chapter in Volume 1 of the Design Doc at http://ptolemy.eecs.berkeley.edu/ptolemyII/designdoc.htm says:
* A domain-polymorphic actor cannot assume that there is data at all the input ports. Most domainpolymorphic actors will read at most one input token from each port, and if there are sufficient inputs, produce exactly one token on each output port. * Some domains invoke the fire() method multiple times, working towards a converged solution. Thus, each invocation of fire() can be thought of as doing a tentative computation with tentative inputs and producing tentative outputs. Thus, the fire() method should not update persistent state. Instead, that should be done in the postfire() method, as discussed in the next section.
_Christopher On 6/21/11 1:18 AM, Vincenzo Forchi wrote:
Hi All, I have a problem with the PN director on kepler 2.2. I have a simple workflow: string constant -> file reader -> custom actor. The string constant fires only once, but my acotr is triggered twice, and the second times it fails because there is no token on the input port. I defined the token consumption rate for the input port, I have overridden prefire to return true only if a token is present on the input port, but the actor is still fired twice. This is a snippet from my fire method: System.out.println(myPort.hasToken(0)); String xml = ((StringToken) myPort.get(0)).stringValue(); This is the command line output, I caught the exception and printed the stack trace [run] true [run] ERROR (org.kepler.gui.MenuMapper:getActionFor:269) Exception trying to create an Action for classname: <org.kepler.gui.RunWithFeedbackChkBoxAction>: [run] java.lang.IllegalArgumentException: RunWithFeedbackChkBoxAction constructor could not get actions for DEBUG->ANIMATE EXECUTION or DEBUG->STOP ANIMATING (java.lang.reflect.InvocationTargetException) [run] ERROR (org.kepler.gui.MenuMapper:getActionFor:269) Exception trying to create an Action for classname: <org.kepler.gui.RunWithFeedbackChkBoxAction>: [run] java.lang.IllegalArgumentException: RunWithFeedbackChkBoxAction constructor could not get actions for DEBUG->ANIMATE EXECUTION or DEBUG->STOP ANIMATING (java.lang.reflect.InvocationTargetException) [run] ptolemy.actor.process.TerminateProcessException: [run] at ptolemy.domains.pn.kernel.PNQueueReceiver.get(PNQueueReceiver.java:198) [run] at ptolemy.actor.IOPort.get(IOPort.java:885) [run] at MyClass.fire(MyClass.java:119) [run] at ptolemy.actor.process.ProcessThread.run(ProcessThread.java:229) The very same code works flawlessly with the DDF director: any ideas? Thanks and cheers, Vincenzo
-- Christopher Brooks, PMP University of California CHESS Executive Director US Mail: 337 Cory Hall Programmer/Analyst CHESS/Ptolemy/Trust Berkeley, CA 94720-1774 ph: 510.643.9841 (Office: 545Q Cory) home: (F-Tu) 707.665.0131 cell: 707.332.0670 _______________________________________________ Kepler-users mailing list Kepler-users@kepler-project.org http://lists.nceas.ucsb.edu/kepler/mailman/listinfo/kepler-users