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

Reply via email to