Provider provider = new Provider(); impl = new Impl(); getServiceBroker().addService(MessageAckingService.class, provider);
  public void load ()  {    super.load();    log = loggingService;    thisNode = getRegistry().getIdentifier();    if (log.isInfoEnabled())    {      synchronized (this)      {        if (trafficAuditer == null)        {          ServiceBroker sb = getServiceBroker();          trafficAuditer = (TrafficAuditService) sb.getService (this, TrafficAuditService.class, null);          if (trafficAuditer == null) new TrafficAuditServiceImpl (sb);          trafficAuditer = (TrafficAuditService) sb.getService (this, TrafficAuditService.class, null);          if (trafficAuditer == null) log.warn ("Cannot do traffic auditing - TrafficAuditService not available!");        }      }    }    synchronized (MessageAckingAspect.class)    {      if (isAckingOn && instance == null)      {        //  Kick off worker threads        messageResender = new MessageResender (this);        // threadService().getThread (this, messageResender, "MessageResender").start();        (new Thread (messageResender, "MessageResender")).start();        pureAckSender = new PureAckSender (this);        // threadService().getThread (this, pureAckSender, "PureAckSender").start();        (new Thread (pureAckSender, "PureAckSender")).start();        pureAckAckSender = new PureAckAckSender (this);        // threadService().getThread (this, pureAckAckSender, "PureAckAckSender").start();        (new Thread (pureAckAckSender, "PureAckAckSender")).start();        instance = this;      }    }  }