private static LoadBalancingDataPublisher getDataPublisher() throws AgentException, MalformedURLException, AuthenticationException, TransportException { String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain(); // Get LoadBalancingDataPublisher which has been registered for the tenant. LoadBalancingDataPublisher loadBalancingDataPublisher = UsageComponent.getDataPublisher(tenantDomain); // If a LoadBalancingDataPublisher had not been registered for the tenant. if (loadBalancingDataPublisher == null) { List<String> receiverGroups = org.wso2.carbon.databridge.agent.thrift.util.DataPublisherUtil.getReceiverGroups( DataPublisherUtil.getApiManagerAnalyticsConfiguration().getBamServerUrlGroups()); String serverUser = DataPublisherUtil.getApiManagerAnalyticsConfiguration().getBamServerUser(); String serverPassword = DataPublisherUtil.getApiManagerAnalyticsConfiguration().getBamServerPassword(); List<ReceiverGroup> allReceiverGroups = new ArrayList<ReceiverGroup>(); for (String receiverGroupString : receiverGroups) { String[] serverURLs = receiverGroupString.split(","); List<DataPublisherHolder> dataPublisherHolders = new ArrayList<DataPublisherHolder>(); for (int i = 0; i < serverURLs.length; i++) { String serverURL = serverURLs[i]; DataPublisherHolder dataPublisherHolder = new DataPublisherHolder(null, serverURL, serverUser, serverPassword); dataPublisherHolders.add(dataPublisherHolder); } ReceiverGroup receiverGroup = new ReceiverGroup((ArrayList) dataPublisherHolders); allReceiverGroups.add(receiverGroup); } // Create new LoadBalancingDataPublisher for the tenant. loadBalancingDataPublisher = new LoadBalancingDataPublisher((ArrayList) allReceiverGroups); try { // Add created LoadBalancingDataPublisher. UsageComponent.addDataPublisher(tenantDomain, loadBalancingDataPublisher); } catch (DataPublisherAlreadyExistsException e) { log.warn( "Attempting to register a data publisher for the tenant " + tenantDomain + " when one already exists. Returning existing data publisher"); return UsageComponent.getDataPublisher(tenantDomain); } } return loadBalancingDataPublisher; }