/* * 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.service.registry.pu; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.openspaces.core.GigaSpace; import org.springframework.beans.factory.annotation.Autowired; import com.avanza.astrix.beans.registry.AstrixServiceRegistryEntry; import com.avanza.astrix.beans.registry.ServiceKey; import com.avanza.astrix.beans.registry.ServiceProviderKey; import com.avanza.astrix.beans.registry.ServiceRegistryEntryRepository; import com.avanza.astrix.beans.service.ServiceProperties; public class SpaceServiceRegistryEntryRepository implements ServiceRegistryEntryRepository { private final GigaSpace gigaSpace; @Autowired public SpaceServiceRegistryEntryRepository(GigaSpace gigaSpace) { this.gigaSpace = gigaSpace; } @Override public void insertOrUpdate(AstrixServiceRegistryEntry entry, long lease) { SpaceServiceRegistryEntry spaceEntry = new SpaceServiceRegistryEntry(); spaceEntry.setApiType(entry.getServiceBeanType()); ServiceKey serviceKey = new ServiceKey(entry.getServiceBeanType(), entry.getServiceProperties().get(ServiceProperties.QUALIFIER)); spaceEntry.setServiceKey(serviceKey); String applicationInstanceId = entry.getServiceProperties().get(ServiceProperties.APPLICATION_INSTANCE_ID); ServiceProviderKey serviceProviderKey = ServiceProviderKey.create(serviceKey, applicationInstanceId); spaceEntry.setServiceProviderKey(serviceProviderKey); spaceEntry.setProperties(entry.getServiceProperties()); Map<String, String> metadata = new HashMap<>(); Date now = new Date(); metadata.put("lastLeaseRenewalTime", now.toString()); metadata.put("leaseExpireTime", new Date(now.getTime() + lease).toString()); spaceEntry.setServiceMetadata(metadata); gigaSpace.write(spaceEntry, lease); } @Override public List<AstrixServiceRegistryEntry> findAll() { SpaceServiceRegistryEntry[] entries = gigaSpace.readMultiple(SpaceServiceRegistryEntry.template()); List<AstrixServiceRegistryEntry> result = new ArrayList<>(); for (SpaceServiceRegistryEntry spaceEntry : entries) { AstrixServiceRegistryEntry entry = new AstrixServiceRegistryEntry(); entry.setServiceBeanType(spaceEntry.getApiType()); entry.setServiceProperties(spaceEntry.getProperties()); entry.setServiceMetadata(spaceEntry.getServiceMetadata()); result.add(entry); } return result; } @Override public List<AstrixServiceRegistryEntry> findByServiceKey(ServiceKey serviceKey) { SpaceServiceRegistryEntry template = SpaceServiceRegistryEntry.template(); template.setServiceKey(serviceKey); SpaceServiceRegistryEntry[] entries = gigaSpace.readMultiple(template); List<AstrixServiceRegistryEntry> result = new ArrayList<>(entries.length); for (SpaceServiceRegistryEntry spaceEntry : entries) { AstrixServiceRegistryEntry entry = new AstrixServiceRegistryEntry(); entry.setServiceBeanType(spaceEntry.getApiType()); entry.setServiceProperties(spaceEntry.getProperties()); entry.setServiceMetadata(spaceEntry.getServiceMetadata()); result.add(entry); } return result; } @Override public void remove(ServiceProviderKey serviceProviderKey) { gigaSpace.takeById(SpaceServiceRegistryEntry.class, serviceProviderKey); } }