Since no one reply to my mail on this regard, I created a JIRA.

https://wso2.org/jira/browse/REGISTRY-23

:-)

/Sanjaya

On Wednesday 05 December 2007, Sanjaya Karunasena wrote:
> I went through the code in SVN last night. Here are few problems I have
> noticed.
>
> * There is a "init" method which does lot of datasource related work.
>
> First of all having a init method in a OO code doesn't make sense. YES, IOC
> containers use this since they can't handle any thing else while doing
> constructor injection. But we shouldn't follow that.
>
> This code actually belong to a RegistryDatasource class, which should
> ideally implement java.sql.Datasource. Then we are clean.
>
> * There is a ConnectionFactory class which does a trick.
>
> Given a java.sql.Datasource or a DB URI it gives a java.sql.connection.
> However, when a DB URI is given it uses the DriverManager. Please read the
> Java doc. The connections you get have very different QoS properties. If I
> am a user I will assume the Registry nicely encapsulate all of that and
> give me a very reliable connectivity to the datasource, which is not the
> case.
>
> Another reason to have our own RegistryDatasource class.
>
> So that way we need one constructor;
>
> JDBCRegistry(DataSource dataSource)
>
> If what user has is a DB URI... he will,
>
> new JDBCRegistry( new RegistryDatasource(DB URI, ...) )
>
> * The SecureRegistry doesn't completely encapsulate the Registry
>
> Right now the user has to construct a Registry and pass it to the
> SecureRegistry. The problem here is, there is insecure access to the same
> registry since the use build that externally. If we aggregate the Registry
> in to the SecureRegistry, an instance of a SecureRegistry is always secure.
>
>
>
> BTW, I was thinking about Paul's reason to have a JDBCRegistry class and a
> InMemory Registry class where he would like the developer to know what
> exactly he is going to get just looking at the class name (without reading
> the Javadoc). In that case how about naming them as, "PersistentRegistry"
> and "TransientRegistry"?
>
> /Sanjaya
>
> On Wednesday 05 December 2007, Chathura C. Ekanayake wrote:
> > Paul Fremantle wrote:
> > > Sanjaya has also persuaded me (on IM) that we should add another
> > > constructor
> > >
> > > new JDBCRegistry(DataSource dataSource)
> > >
> > > I'm not sure if there is an equivalent that uses a Connection as well.
> >
> > I think Sanjaya is proposing to have a DataSource implementation that
> > can wrap a Connection to handle this scenario.
> > So we need only one constructor to instantiate a registry with a
> > database connection (datasource or connection).
> >
> > Thanks,
> > Chathura
> >
> > > Paul
> > >
> > > Sanjiva Weerawarana wrote:
> > >> +1.
> > >>
> > >> 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
> > >>>>>>>> Registry-dev@wso2.org
> > >>>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/registry-dev
> > >>>>>>>
> > >>>>>>> _______________________________________________
> > >>>>>>> Registry-dev mailing list
> > >>>>>>> Registry-dev@wso2.org
> > >>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/registry-dev
> > >>>>
> > >>>> _______________________________________________
> > >>>> Registry-dev mailing list
> > >>>> Registry-dev@wso2.org
> > >>>> http://wso2.org/cgi-bin/mailman/listinfo/registry-dev
> >
> > _______________________________________________
> > Registry-dev mailing list
> > Registry-dev@wso2.org
> > http://wso2.org/cgi-bin/mailman/listinfo/registry-dev
>
> _______________________________________________
> Registry-dev mailing list
> Registry-dev@wso2.org
> http://wso2.org/cgi-bin/mailman/listinfo/registry-dev


_______________________________________________
Registry-dev mailing list
Registry-dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/registry-dev

Reply via email to