There was apparently some Zoho issues which led people to reply directly
to me rather than post to the forum. Hopefully it's cleaned up.
I'm going to summarize some and add more thoughts here rather than
duplicating it to everyone.
All Database Implementations As Plugins
The idea of pushing all database implementations to plugins seemed
well received and I agree makes sense. That is something we will do
for 4.0. We'll want to have an easily extendable abstract base in
liquibase-core and probably UnknownDatabase but the rest will go to sub-modules.
One thing that would help would be sort of an "SDK Test
Suite" that can be ran against any database extension to make
sure it generally works and also follows whatever conventions make
sense. We should develop this suite along with 4.0.
3rd Party Libraries
- JCommander was suggested over commons-cli. I haven't looked
at JCommander before but will.
- Guice was suggested for dependency injection, in part because
spring is too heavyweight and more likely into version problems. This
is a very good suggestion, I haven't really looked at Guice (have
just used Spring) but the version issues was a reason I wasn't
really wanting to use Spring. Classloading edge-cases continues to be
a huge headache with 3.3.x so I'm all for a DI library that may
help that. I looked quickly at Guice and it would probably work well.
I'll continue to look at Guice
- No love for OSGi. It definitely brings its own issues and I agree
that it probably isn't the right tool for handling our dependency
management. We should support plugging into OSGi well but
shouldn't be building off it.
Multiple Connections
Several people liked this feature. Definitely something to ensure
is supported.
Java 6 Support: Why Still?
I try to ensure Liquibase can run in as many places as possible.
That is why I've kept dependencies to a minimum and also build off
old Java versions. However, at some point it is time to move on.
I had tried to look for stats on Java versions being used in and
couldn't find anything great. After some digging it semed like
there was maybe still 20-30% of projects still running Java 6 which
seemed enough of an install base to continue supporting it. If someone
has better statistics, let me know though.
"Verified Test" Framework
I just spun the verified test framework off as a separate project
(
http://testmd.org) so it can grow independently and/or make
dependency management cleaner in Liquibase. Take a look and let me
know what you think.
Scope Objects
"Are they Necessary?" "Are they Like
ServletRequest?" "Consider making them TreadLocal"
"Just use @Inject"
I'm still working through how to best handle the Scope object.
If we use Guice, that may remove a lot (all?) of the need for it. But
perhaps not as well. They do sort of behave like ServletRequest,
especially its "get|setAttributes" methods.
What I want to do with Scope is to have a way for new configuration
and other state objects to be managed without impacting the existing
code. This is partly to keep backwards compatibility but also because
we want extensions to be able to define new attributes that
liquibase-core does not know about and they can simply flow though everything.
For example, liquibase-core may define a "connection"
object which is normally used for reading/writing to the database but
someone may want to attach a new "backupConnection" to the
scope when they start their command and then in one of their extension
Change classes they can use that connection to backup data before
dropping a table.
@Inject may work for that, but I think a more contained Scope
object would work better.
Short-Term Roadmap
I think the first steps toward 4.0 are:
-
New v4.0 branch [done]
-
Split off TestMD [done]
- Guice and/or Scope object
- Will be used by snapshot/action logic
- Refactor Snapshot Logic / "Action" Logic
- Includes splitting out databases to sub-modules
- Use TestMD for testing it all
- Big project but all wrapped together enough that it would
probably be a mess to do in stages
Thoughts? (Assuming Zoho lets you post :) )
Nathan