On 11/20/2013 05:52 PM, Todd Nine wrote:
Hi guys, I have several classes which interact with Cassandra. All of the implementations implement both the I/O interface required (similar to a DAO) and a Migrator interface. I want to be able to have an implementation that is simply a MigrationManager interface. For this interface, I would have the following impl./** * @author tnine */ public class MigrationManagerImpl implements MigrationManager { private final Set<Migration> migrations; @Inject public MigrationManagerImpl( final Set<Migration> migrations ) { this.migrations = migrations; } @Override public void migrate() { for(Migration migration: migrations){ for( ColumnFamilyDefinition cf : migration.getColumnFamilies()) { //do migration here. } } } } I'm new to Guice, it seems much cleaner and more deterministic/easier to user than Spring. I'm trying to keep all my low level I/O components in their own Module. To do what I need above, how would I set this up in my module? I've tried this. public class CollectionModule extends AbstractModule{ /** * The location of the properties file */ private static final String CASS_PROPS = "cassandra.properties"; @Override protected void configure() { //bind our cassandra properties Names.bindProperties(binder(), PropertyUtils.loadFromClassPath( CASS_PROPS)); //Load the cassandra url if set on the system properties Names.bindProperties( binder(), PropertyUtils.loadSystemProperties( AstynaxKeyspaceProvider.getRuntimeOptions() ) ); //bind our keyspace to the AstynaxKeyspaceProvider bind(Keyspace.class).toProvider(AstynaxKeyspaceProvider.class ); bind( MvccEntitySerializationStrategy.class).to(MvccEntitySerializationStrategyImpl.class); bind( MvccLogEntrySerializationStrategy.class).to(MvccLogEntrySerializationStrategyImpl.class); //how do I bind both of the impls above to a Collection<Migration> } } Do I need to also add the MvccEntitySerializationStrategyImpl and theMvccLogEntrySerializationStrategyImpl classes to a Multibindings for the Migration interface? Thanks, Todd
A Multibinding will get you a Set<Migration> just as you have in your MigrationManagerImpl, so that's the way to go.
Given the fact that you're working with migrations, I'm guessing order may be important, so note that the Set is not necessarily going to iterate in the order you bound the implementations.
-Marshall -- You received this message because you are subscribed to the Google Groups "google-guice" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/google-guice. For more options, visit https://groups.google.com/groups/opt_out.
