Hi all,
Over the last month or two I've been working through our various
modules, ostensibly to work on their documentation. As part of this
I've been using Structure 101 [1] to detangle the packages structures
and make it easier for would-be contributors to understand the
codebase. So far I've tidied up core.common, core.metamodel and
core.progmodel. I'm now up to working on the core.runtime module... and
it needs quite a lot of work.
What I'm actively considering is to write a new runtime, so that our
current runtime moves out of core and into (say)
org.apache.isis.runtimes.dflt. This new runtime could be a lot more
lightweight than the current, because we could use other frameworks to
do some of the heavy lifting that our current runtime does. Specifically:
- context management of scopes (application/session/transaction) - ie
the IsisContext class - could be managed by JSR-299 CDI (this is our
roadmap anyway to implement, [2])
- rather than invent our own ObjectStore API to abstract over different
persistence implementations, we could leverage DataNucleus (as suggested
in ISIS-14, [3])
I think this would be less work overall than tidying up our current
runtime. We could also more thoroughly test-drive the new implementation.
My thoughts is that the existing object stores would be moved so that
they live "under" the existing runtime. The same is true (I think) for
the bytecode implementations and also the remoting support.
However, the security and progmodel APIs, and also the viewers, live in
the application layer (ie in "front of" the runtime) and so would be
usable by both the existing and the new runtimes. This may require a
little refactoring to remove dependencies on IsisContext; but I think
refactoring these classes would be relatively straightforward.
~~~
I have, therefore, added a page to our wiki [4] suggesting a new
directory structure and groupId/artifactId. I'm happy (as usual) to
make these changes; but I don't want to charge in there without some
discussion.
If we do this work, what I'll do is to fully document core, and but only
lightly document the existing runtime, on the basis that there'll be a
new runtime to follow.
Thoughts?
Cheers
Dan
[1] http://www.headwaysoftware.com/products/structure101/index.php
[2] http://wiki.apache.org/incubator/IsisProposal
[3] https://issues.apache.org/jira/browse/ISIS-14
[4]
https://cwiki.apache.org/confluence/display/ISIS/MavenModulesMultipleRuntimesProposal