protected void setSubscriptions(Subscriptions eventing) {
    eventing.setImplBean(
        new ISubscriptionsService() {
          private String[] eventNames = null;

          public String subscribe(
              String endpoint, boolean isRestEndpoint, String path, String eventName) {
            SuperTenantCarbonContext.startTenantFlow();
            try {
              SuperTenantCarbonContext.getCurrentContext()
                  .setTenantId(MultitenantConstants.SUPER_TENANT_ID);
              UserRegistry registry =
                  Utils.getRegistryService().getRegistry(CarbonConstants.REGISTRY_SYSTEM_USERNAME);
              if (RegistryUtils.isRegistryReadOnly(registry.getRegistryContext())) {
                return null;
              }

              SubscriptionBean subscriptionBean =
                  SubscriptionBeanPopulator.subscribeAndPopulate(
                      registry, path, endpoint, eventName, isRestEndpoint);
              if (subscriptionBean != null
                  && subscriptionBean.getSubscriptionInstances() != null
                  && subscriptionBean.getSubscriptionInstances().length > 0)
                return subscriptionBean.getSubscriptionInstances()[0].getId();
            } catch (RegistryException e) {
              log.error("An error occurred while subscribing", e);
            } finally {
              SuperTenantCarbonContext.endTenantFlow();
            }
            return "";
          }

          public void unsubscribe(String id) {
            SuperTenantCarbonContext.startTenantFlow();
            try {
              SuperTenantCarbonContext.getCurrentContext()
                  .setTenantId(MultitenantConstants.SUPER_TENANT_ID);
              Utils.getRegistryEventingService().unsubscribe(id);
            } finally {
              SuperTenantCarbonContext.endTenantFlow();
            }
          }

          public String[] getEventNames() {
            if (eventNames != null) {
              return eventNames;
            }
            Set<String> output = new TreeSet<String>();
            Collection values = Utils.getRegistryEventingService().getEventTypes().values();
            for (Object value : values) {
              String[] types = (String[]) value;
              if (types[0] != null) {
                output.add(types[0]);
              }
              if (types[1] != null) {
                output.add(types[1]);
              }
            }
            eventNames = output.toArray(new String[output.size()]);
            return eventNames;
          }

          public String[] getList() {
            List<String> output = new LinkedList<String>();
            SuperTenantCarbonContext.startTenantFlow();
            try {
              SuperTenantCarbonContext.getCurrentContext()
                  .setTenantId(MultitenantConstants.SUPER_TENANT_ID);
              List<Subscription> subscriptions =
                  Utils.getRegistryEventingService().getAllSubscriptions();
              for (Subscription subscription : subscriptions) {
                output.add(
                    subscription.getId()
                        + ":"
                        + subscription.getTopicName()
                        + ":"
                        + subscription.getEventSinkURL());
              }
            } catch (EventBrokerException e) {
              log.error("Unable to retrieve subscriptions", e);
            } finally {
              SuperTenantCarbonContext.endTenantFlow();
            }
            return output.toArray(new String[output.size()]);
          }
        });
  }
 protected void unsetSubscriptions(Subscriptions eventing) {
   eventing.setImplBean(null);
 }