Notification of state changes for GRAM jobs is supported by the user's class adding itself as a listener to a GramJob. See the example below for more details.
public class GramExample implements GramJobListener { private someMethod() { ... String gramContact = "pitcairn.mcs.anl.gov:6722:..."; String rsl = "&(executable=...)(...)(...)"; try { Gram.ping(gramContact); } catch (GramException e) { // can't submit return; } job.addListener(this); // add this class as a listener for state changes GramJob job = null; try { job = new GramJob(rsl); Gram.request(gramContact,job); } catch (GramException e) { // request failed ... } ... try { job.cancel(); } catch (GramException e) { // cancel failed ... } } // this method must be implemented in order for the class to // implement the GramJobListener class public stateChanged(GramJob job) { System.out.println("Job state change \n" + " ID : " + job.getID() + "\n" + " State: " + job.getStateAsString()); } }