Well primarily this will be needed at startup, however, a new source may be requested while the application is running.
Carl. On Mar 11, 5:54 pm, Fred Faber <[email protected]> wrote: > Carl, > > My problem is when I need to create another TcpInputSourceProvider and > > > need to bind a StreamFactory for BTcpStream.class or CTcpStream.class. > > When do you need to do this? At configure() time? At runtime when the > application is live? > > -Fred > > > > On Thu, Mar 11, 2010 at 7:27 AM, cdawg92 <[email protected]> wrote: > > I've been looking at making an application Guicey, but I'm beginning > > to think that I may be over complicating things trying to use Guice. > > In short, the application has to listen to various input sources for > > information. At this time these input sources are TCP with each source > > having a different port from the same ip address, ending up with > > potentially up to 3 inputs from a single host. Anyway, the input > > source is configured the same way with only the host and port being > > different. I won't know the host:port till runtime so I created a > > factory to provide the underlying Stream interface passing in a > > property object containing all the possible ports for the host. I have > > then created a Provider for the final InputSource that takes in a list > > of host properties and a Stream factory and returns a list of > > InputSources. The classes bound to the factory know which ports they > > are to retrieve from the host properties. Here's an example: > > > The provider: > > > public class TcpInputSourceProvider implements > > Provider<List<InputSourceStringImpl>> { > > > List<SdvServerProperties> servers; > > TcpStreamFactory factory; > > > �...@inject > > public TcpInputSourceProvider(@StreamFactory TcpStreamFactory > > factory, > > �...@serverproperties List<SdvServerProperties> > > servers){ > > this.factory = factory; > > this.servers = servers; > > } > > > �...@override > > public List<InputSourceStringImpl> get() { > > List<InputSourceStringImpl> ret = new > > ArrayList<InputSourceStringImpl>(servers.size()); > > for(SdvServerProperties server : servers){ > > ret.add(new TcpInputSource(factory.create(server))); > > } > > return ret; > > } > > } > > > And the module: > > public class InputSourceModule extends AbstractModule { > > > List<SdvServerProperties> servers; > > > public InputSourceModule(List<SdvServerProperties> servers){ > > this.servers = servers; > > } > > /* (non-Javadoc) > > * @see com.google.inject.AbstractModule#configure() > > */ > > �...@override > > protected void configure() { > > bind(new TypeLiteral <List<SdvServerProperties>>() > > {}).annotatedWith(ServerProperties.class).toInstance(servers); > > > bind(TcpStreamFactory.class).annotatedWith(StreamFactory.class).toProvider( > > > FactoryProvider.newFactory(TcpStreamFactory.class, > > ATcpStream.class)); > > bind(new TypeLiteral <List<InputSourceStringImpl>>() > > {}).annotatedWith(TInput.class).toProvider(TcpInputSourceProvider.class); > > } > > } > > > My problem is when I need to create another TcpInputSourceProvider and > > need to bind a StreamFactory for BTcpStream.class or CTcpStream.class. > > How can I bind different factories to the Provider? > > > Thanks in advance for the help. > > > Carl. > > > -- > > You received this message because you are subscribed to the Google Groups > > "google-guice" group. > > To post to this group, send email to [email protected]. > > To unsubscribe from this group, send email to > > [email protected]<google-guice%2bunsubscr...@google > > groups.com> > > . > > For more options, visit this group at > >http://groups.google.com/group/google-guice?hl=en. -- You received this message because you are subscribed to the Google Groups "google-guice" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-guice?hl=en.
