/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 org.apache.usergrid.persistence.core.guice; import com.datastax.driver.core.Session; import com.netflix.astyanax.Keyspace; import org.apache.usergrid.persistence.core.CassandraConfig; import org.apache.usergrid.persistence.core.CassandraConfigImpl; import org.apache.usergrid.persistence.core.CassandraFig; import org.apache.usergrid.persistence.core.astyanax.*; import org.apache.usergrid.persistence.core.datastax.DataStaxCluster; import org.apache.usergrid.persistence.core.datastax.DataStaxSessionProvider; import org.apache.usergrid.persistence.core.datastax.impl.DataStaxClusterImpl; import org.safehaus.guicyfig.GuicyFigModule; import org.apache.usergrid.persistence.core.consistency.TimeService; import org.apache.usergrid.persistence.core.consistency.TimeServiceImpl; import org.apache.usergrid.persistence.core.guicyfig.ClusterFig; import org.apache.usergrid.persistence.core.metrics.MetricsFactory; import org.apache.usergrid.persistence.core.metrics.MetricsFactoryImpl; import org.apache.usergrid.persistence.core.metrics.MetricsFig; import org.apache.usergrid.persistence.core.migration.data.DataMigrationManager; import org.apache.usergrid.persistence.core.migration.data.DataMigrationManagerImpl; import org.apache.usergrid.persistence.core.migration.data.MigrationInfoCache; import org.apache.usergrid.persistence.core.migration.data.MigrationInfoCacheImpl; import org.apache.usergrid.persistence.core.migration.data.MigrationInfoSerialization; import org.apache.usergrid.persistence.core.migration.data.MigrationInfoSerializationImpl; import org.apache.usergrid.persistence.core.migration.data.MigrationPlugin; import org.apache.usergrid.persistence.core.migration.schema.Migration; import org.apache.usergrid.persistence.core.migration.schema.MigrationManager; import org.apache.usergrid.persistence.core.migration.schema.MigrationManagerImpl; import com.google.inject.AbstractModule; import com.google.inject.Key; import com.google.inject.multibindings.Multibinder; /** * Simple module for configuring our core services. Cassandra etc */ public class CommonModule extends AbstractModule { @Override protected void configure() { //noinspection unchecked install(new GuicyFigModule(CassandraFig.class)); // bind our Cassandra cluster to the Astyanax Implementation bind(CassandraCluster.class).to(CassandraClusterImpl.class).asEagerSingleton(); // bind our Datastax cluster bind(DataStaxCluster.class).to(DataStaxClusterImpl.class).asEagerSingleton(); // bind our Session to the DataStaxSessionProvider bind(Session.class).toProvider(DataStaxSessionProvider.class).asEagerSingleton(); // bind our keyspace to the AstyanaxKeyspaceProvider bind(Keyspace.class).toProvider(AstyanaxKeyspaceProvider.class).asEagerSingleton(); // bind our migration manager bind(MigrationManager.class).to(MigrationManagerImpl.class); //do multibindings for migrations Multibinder<Migration> migrationBinding = Multibinder.newSetBinder(binder(), Migration.class); migrationBinding.addBinding().to(Key.get(MigrationInfoSerialization.class)); bind(TimeService.class).to(TimeServiceImpl.class); bind(CassandraConfig.class).to(CassandraConfigImpl.class); /** * Data migration beans */ bind(MigrationInfoSerialization.class).to(MigrationInfoSerializationImpl.class); bind(DataMigrationManager.class).to(DataMigrationManagerImpl.class); bind(MetricsFactory.class).to(MetricsFactoryImpl.class); bind(MigrationInfoCache.class).to(MigrationInfoCacheImpl.class); install(new GuicyFigModule(MetricsFig.class)); //do multibindings for migrations //create the empty multibinder so other plugins can use it Multibinder.newSetBinder(binder(), MigrationPlugin.class); install(new GuicyFigModule(ClusterFig.class)); bind(SettingsValidationCluster.class).asEagerSingleton(); //validate props from ClusterFig on startup } }