Hi Chathura, I see few OO problems here.
First, InMemoryRegistry, JDBCRegistry doesn't sound polymorphic. It simply exposed implementation details. Do you have an abstract class Registry? What we have here is a Registry which can work with different Datasources. If a datasource is not available it can maintain data in-memory. So there are two classes here, Registry and a Datasource. If you need further specilization from the standard Datasource, you can have a RegistryDatasource. Then the API would be; RegistryDatasource(String datasourceName) RegistryDatasource(String driverClass, String URL, String userName, String password) Registry() //Use the in-memory DB Registry(Datasource datasource) //Use any given datasource to retrieve a java.sql.Connection and use it. You can use the RegistryDatasource here. Thanks Sanjaya On Monday 03 December 2007, Chathura C. Ekanayake wrote: > I like it too. Then the constructors imply what is happening inside. > Shall I change the code according to this? > > Thanks, > Chathura > > Paul Fremantle wrote: > > I understand that we are using HSQLDB to provide the in-memory DB, its > > just a bit odd that the class is called JDBCRegistry. > > > > From a beginners perspective, wouldn't it make more sense to have > > another class called InMemoryRegistry. Of course under the covers it > > can use the JDBCRegistry with HSQLDB? > > > > I'm just trying to think of this from a beginning programmers > > perspective, and I'm not convinced everyone is going to automatically > > think of using a JDBCRegistry to do in-memory. > > > > So my preference would be: > > > > new InMemoryRegistry() > > new JDBCRegistry(String datasourceName) - Use the given data source. > > new JDBCRegistry(String driverClass, String URL, String userName, > > String password) - Use given connection URL to connect to the DB > > > > > > Paul > > > > Chathura C. Ekanayake wrote: > >> +1. So shall we remove "allowInMemoryDB" parameter from all > >> constructors and only start the in-memory database if the default > >> constructor is used. > >> > >> Then the constructors would look like: > >> > >> 1) JDBCRegistry() - Use in-memory DB. > >> > >> 2) JDBCRegistry(String datasourceName) - Use the given data source. > >> > >> 3) JDBCRegistry(String driverClass, String URL, String userName, > >> String password) - Use given connection URL to connect to the DB > >> > >> Thanks, > >> Chathura > >> > >> Paul Fremantle wrote: > >>> I'm bothered about the "fallback" to an inmemory database. I don't > >>> think that makes sense as something to do automatically. > >>> > >>> Surely its better for a user to explicitly try to start the JDBCReg > >>> and if that fails catch the exception or null and then create an > >>> in-mem Reg? > >>> > >>> Paul > >>> > >>> Sanjiva Weerawarana wrote: > >>>> +1 for 3 alternative constructors. Since the registry is unusable > >>>> until init'ed, IMO constructors make more sense. > >>>> > >>>> Thanks, > >>>> > >>>> Sanjiva. > >>>> > >>>> Chathura C. Ekanayake wrote: > >>>>> We want to allow users to configure registry database in different > >>>>> ways (e.g. using a data source, using a connection URL, specify > >>>>> whether to start in-memory database if other database is not > >>>>> available). > >>>>> > >>>>> So we provide few methods in the JDBCRegistry to configure them. > >>>>> We only want the registry to initialize after those parameters are > >>>>> configured. > >>>>> And we don't know whether the user is specifying them or not at > >>>>> the construction time. Therefore, user has to call init() after > >>>>> configuring them. > >>>>> > >>>>> Alternative would be to have 3 constructors. > >>>>> > >>>>> 1) JDBCRegistry() - Use default datasource name if available. If > >>>>> not available, use in-memory DB > >>>>> > >>>>> 2) JDBCRegistry(String datasourceName, boolean allowInMemoryDB) - > >>>>> Use given data source. If not available, use in-memory DB > >>>>> depending on the allowInMemoryDB parameter value > >>>>> > >>>>> 3) JDBCRegistry(String driverClass, String URL, String userName, > >>>>> String password, boolean allowInMemoryDB) - Use given connection > >>>>> URL to connect to the DB > >>>>> > >>>>> Thanks, > >>>>> Chathura > >>>>> > >>>>> Paul Fremantle wrote: > >>>>>> Chathura C. Ekanayake wrote: > >>>>>>> JDBCRegistry registry = new JDBCRegistry(); > >>>>>>> registry.init(); > >>>>>> > >>>>>> Love it! That's what I was looking for. > >>>>>> > >>>>>> Last question - why do we need init()? > >>>>>> > >>>>>> Paul > >>>>>> > >>>>>> _______________________________________________ > >>>>>> Registry-dev mailing list > >>>>>> [email protected] > >>>>>> http://wso2.org/cgi-bin/mailman/listinfo/registry-dev > >>>>> > >>>>> _______________________________________________ > >>>>> Registry-dev mailing list > >>>>> [email protected] > >>>>> http://wso2.org/cgi-bin/mailman/listinfo/registry-dev > >> > >> _______________________________________________ > >> Registry-dev mailing list > >> [email protected] > >> http://wso2.org/cgi-bin/mailman/listinfo/registry-dev > > _______________________________________________ > Registry-dev mailing list > [email protected] > http://wso2.org/cgi-bin/mailman/listinfo/registry-dev _______________________________________________ Registry-dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/registry-dev
