/* * Copyright 2014 Avanza Bank AB * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.avanza.astrix.beans.registry; import java.util.Objects; import com.avanza.astrix.beans.service.ServiceProperties; /** * * @author Elias Lindholm (elilin) * */ public class ServiceRegistryExporterClient { /* * DESIGN NOTE: * * ServiceRegistryClient (used by consumers to lookup services) and ServiceRegistryExporterClient * (used by servers to register provided services) are split into two interfaces. The main reason * is to allow plugins in Astrix to override the AstrixSettings.APPLICATION_INSTANCE_ID, which can only * be overridden until an instance of ServiceRegistryExporterClient is created for the first time. */ private final AstrixServiceRegistry serviceRegistry; private final String subsystem; private final String applicationInstanceId; private final String zone; public ServiceRegistryExporterClient(AstrixServiceRegistry serviceRegistry, String subsystem, String applicationInstanceId) { this(serviceRegistry, subsystem, applicationInstanceId, subsystem); } public ServiceRegistryExporterClient(AstrixServiceRegistry serviceRegistry, String subsystem, String applicationInstanceId, String zone) { this.zone = zone; this.serviceRegistry = Objects.requireNonNull(serviceRegistry); this.subsystem = Objects.requireNonNull(subsystem); this.applicationInstanceId = Objects.requireNonNull(applicationInstanceId); } public <T> void register(Class<T> type, ServiceProperties properties, long lease) { properties.setProperty(ServiceProperties.SUBSYSTEM, this.subsystem); properties.setProperty(ServiceProperties.APPLICATION_INSTANCE_ID, this.applicationInstanceId); properties.setProperty(ServiceProperties.SERVICE_ZONE, zone); AstrixServiceRegistryEntry entry = new AstrixServiceRegistryEntry(); entry.setServiceProperties(properties.getProperties()); entry.setServiceBeanType(type.getName()); this.serviceRegistry.register(entry, lease); } }