package org.gbif.occurrence.cli.registry.service; import org.gbif.api.service.registry.OrganizationService; import org.gbif.common.messaging.DefaultMessagePublisher; import org.gbif.common.messaging.DefaultMessageRegistry; import org.gbif.common.messaging.MessageListener; import org.gbif.occurrence.cli.registry.RegistryChangeListener; import org.gbif.registry.ws.client.guice.RegistryWsClientModule; import org.gbif.ws.client.guice.AnonymousAuthModule; import java.util.Properties; import com.google.common.util.concurrent.AbstractIdleService; import com.google.inject.Guice; import com.google.inject.Injector; import org.codehaus.jackson.map.DeserializationConfig; import org.codehaus.jackson.map.ObjectMapper; public class RegistryChangeService extends AbstractIdleService { private final RegistryChangeConfiguration configuration; private MessageListener listener; public RegistryChangeService(RegistryChangeConfiguration configuration) { this.configuration = configuration; } @Override protected void startUp() throws Exception { // Create Registry WS Client Properties properties = new Properties(); properties.setProperty("registry.ws.url", configuration.registryWsUrl); Injector injector = Guice.createInjector(new RegistryWsClientModule(properties), new AnonymousAuthModule()); OrganizationService orgClient = injector.getInstance(OrganizationService.class); // we have to create our own object mapper in order to set FAIL_ON_UNKNOWN, without which we can't deser reg objects ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); listener = new MessageListener(configuration.messaging.getConnectionParameters(), new DefaultMessageRegistry(), objectMapper); listener.listen(configuration.registryChangeQueueName, 1, new RegistryChangeListener(new DefaultMessagePublisher(configuration.messaging.getConnectionParameters()), orgClient)); } @Override protected void shutDown() throws Exception { if (listener != null) { listener.close(); } } }