I just finished working on some big changes to the connector
framework. All the detail regarding the issue and the design can be
found in DNA-281 (
https://jira.jboss.org/jira/browse/DNA-281).
However, this is a fairly significant change, so I wanted to let
everyone know what's going on. (The commit email was actually too
big, which is another reason for this email).
The problem stems from not having a perfect mapping between a
connector and the notion of a JCR workspace. When we came up with the
initial connector design, we'd hoped that a connector would map to a
JCR workspace, and that we could just create multiple sources
(instances of connectors) when we need multiple workspaces.
Unfortunately, some of the workspace-level operations in JCR don't
work too well with this. In particular, creating workspaces would
have entailed setting up new RepositorySource instances, which is
difficult if you have to also set up the back end system, like a
database. To really fix this, we need a connector to be able to have
multiple workspaces and to support creating, cloning, and destroying
workspaces.
Normally, this would be that much of a surprise. We've always
followed the evolutionary approach to design and development. So this
change wouldn't really be that special - if it weren't for the size of
the change. The connector API is affected, which means that each
connector implementation is affected. Also, the Graph API is affected
because we need to expose these new operations. And this meant that
every code that used the Graph API may be affected, since they now
need to possibly have some notion of a workspace. All in all, a lot
of code has been impacted by this. And I spent several days trying
different approaches that were incremental, and nothing worked. I had
no choice but to make all the changes at once.
Interestingly, while making the changes, I discovered a bug in the
federation code (DNA-282), and a number of existing test cases fail.
And of course the Getting Started repository example fails because it
relies up the federation connector. So, rather than complicate an
already mess of a commit set, I decided to temporarily remove these
two projects from the build.
Similarly, I have local changes to the JCR project to support writing
(which was the ultimate reason why support for workspaces was needed
in the first place). And these changes aren't quite complete enough
to commit, yet I didn't want to spent a lot of time fixing test cases
that I'll be making changes to. So this project was also pulled from
the build, too.
My apologies for the state of the project, and for this massive
commit. I dislike these large changes with a passion, but just
couldn't figure out a way to get around it. But everything compiles,
and all tests (except those listed above) run successfully.
For those of you working on connector implementations, feel free to
look at the in-memory connector, the JBoss Cache connector, or the JPA
Store connector. Specifically, look in the RequestProcessor
implementation classes in the connectors, since that's where all the
interesting stuff is. Of course, some of the source implementations
have properties that define the names of "predefined workspaces" and a
"default workspace", and that may be of use to you. These all support
multiple workspaces, but in slightly different ways. I think the
notion of workspaces would work really well in a couple of our
connectors, including SVN and JDBC metadata. Of course, if you have
any questions, please post to this list.
Best regards,
Randall