Example 02 – Action Failure

This example is a simple variation of the previous one, to show action failure.

As in the previous case, two agents create, use and observe a shared artifact, in this case a bounded counter:

MAS example01b_useobs {


  user2 agentArchClass c4jason.CAgentArch #1;
  observer agentArchClass c4jason.CAgentArch #1;

  classpath: "../../../lib/cartago.jar";"../../../lib/c4jason.jar";

The counter used by the agents has the following code:

public class BoundedCounter extends Artifact {
  private int max;

  void init(int max){
    this.max = max;
  @OPERATION void inc(){
    ObsProperty prop = getObsProperty("count");
    if (prop.intValue() < max){
    } else {
      failed("inc failed","inc_failed","max_value_reached",max);


  • failed primitive: Differently from the non-bound case, in this case the inc action fails if the count already achieved the maximum value, specified as a parameter of init. To specify the failure of an operation the failed primitive is provided:
    • failed(String failureMsg)
    • failed(String failureMsg, String descr, Object... args)

    An action feedback is generated, reporting a failure msg and optionally also a tuple descr(Object...) describing the failure.

Then, the user2 agent creates a bounded counter with 50 as bound and tries to increment it 100 times: as soon as the maximum value is reached, the action inc fails and a repairing plan is executed:


+!create_and_use : true
  <- !setupTool(Id);

  <- for (.range(I,1,100)){
      inc [artifact_id(Counter)];

-!use(Counter) [error_msg(Msg),inc_failed("max_value_reached",Value)]
  <- println(Msg);
     println("last value is ",Value).

+!setupTool(C): true
  <- makeArtifact("c0","c4jexamples.BoundedCounter",[50],C).


  • Failure info: on the Jason side, feedback information generated by failed on the artifact side are included in annotations in the repairing plan. In particular:
    • error_msg(Msg) contains the failure message.
    • the description tuple is directly included as annotation (inc_failed(...) in the example.

Leave a Reply

Your email address will not be published. Required fields are marked *


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>