package jade.core.replication; import jade.core.GenericCommand; import jade.core.Service; import jade.core.ServiceFinder; import jade.core.ServiceNotActiveException; import jade.util.Logger; /** * This class allows other services to exploit the MainReplicationService to keep * local information in synch among slices on replicated Main Containers */ public class MainReplicationHandle { //#J2ME_EXCLUDE_BEGIN private String myService; private MainReplicationService replicationService; private Logger myLogger = Logger.getMyLogger(getClass().getName()); //#J2ME_EXCLUDE_END public MainReplicationHandle(Service svc, ServiceFinder sf) { //#J2ME_EXCLUDE_BEGIN myService = svc.getName(); try { replicationService = (MainReplicationService) sf.findService(MainReplicationSlice.NAME); } catch (ServiceNotActiveException snat) { // MainReplicationService not active --> just do nothing } catch (Exception e) { // Should never happen myLogger.log(Logger.WARNING, "Error accessing the local MainReplicationService.", e); } //#J2ME_EXCLUDE_END } public void invokeReplicatedMethod(String methodName, Object[] params) { //#J2ME_EXCLUDE_BEGIN if (replicationService != null) { GenericCommand cmd = new GenericCommand(MainReplicationSlice.H_INVOKESERVICEMETHOD, MainReplicationSlice.NAME, null); cmd.addParam(myService); cmd.addParam(methodName); cmd.addParam(params); try { replicationService.broadcastToReplicas(cmd, false); } catch (Exception e) { // Should never happen as real exceptions are logged inside broadcastToReplicas() myLogger.log(Logger.WARNING, "Error propagating H-command " + cmd.getName() +" to replicas", e); } } //#J2ME_EXCLUDE_END } }