...
Interim Conclusions (as of 12:30gmt 30 Nov 1pm, 1 Dec 12):
- yes, to idea of independent, more granular releases (this means that separate modules so don't share common parent, ie are separate artifacts)
- yes, flatten the modules at least as an interim step
- also, rename refactor the groupId/artifactId's to aid understandability:
- all artifactIds have an 'isis-' prefix so that, when assembled together in a single directory (eg WEB-INF/lib), they are easily identifiable as being Isis'.
- all artifactids also specify the component type, otherwise would be confusion between isis-sql.jar: is it an objectstore, or is it a security impl, or what?
- break linkage so that separate modules so don't share common parent (ie are separate artifacts)
- perhaps... move the separate modules into their own git repos
Refactoring the codebase
The following table summarises proposed refactorings etc.
Type column:
- C = core, parented by "org.apache.isis:isis" (as currently)
- A = alternate implementation, not parented by org.apache.isis:isis (instead would define its own parent), thus separately releasable. Might move to own git repo
- E = edition, ie an archetype, not parented by org.apache.isis:isis (instead would define its own parent), thus separately releasable. Might move to own git repo
- X = excluded, parented by "org.apache.isis:isis" but not released (excluded through use of Maven profile). Might one day be promoted to being an alternate implementation.
- R = retired
- D = deleted
Some additional notes:
- Rob suggested renaming 'tck' to compatibility. I've left it as is for now because otherwise all the other -tck submodules would need to be renamed.
- New location column is relative to 'trunk/framework'
- I've reinstated dflt-objectstore into core, but there is NO default viewer. In other words, a user is required to decide which viewer to use. Typically that will be done by deciding which edition's archetype to run.
- I suggest we retire html-viewer, profilestore-xml and monitoring modules.
- prefer that artifactIds read well, ie "isis-nosql-objectstore" rather than "isis-objectstore-nosql"
- consolidate artifacts where makes sense
Still being debated:
- what groupIds to have. I prefer them broadly reflecting nature of component
- do directory names have to follow artifactIds? I'd rather they didn't, instead use component-impl format so lists better in OS shell (ls, dir)
- which modules to retire, if any?
- do we move the separate modules into their own git repos?
- exactly how do we combine artifacts (stuff below is Dan's suggestion)
- whether to use 'edition' instead of 'archetype'. In previous iteration, was using 'edition', but have now reverted to using 'archetype' once more
Refactoring: Resultant GroupIds
The table at the end of this page summarises proposed refactorings for all the current Isis artifacts. But to cut to the chase, we would end up with the following groupIds:
Code Block |
---|
org.apache.isis.archetypes
org.apache.isis.core
org.apache.isis.objectstore
org.apache.isis.viewer
|
We also have these additional groupIds, though current only used for artifacts that are not yet released:
Code Block |
---|
org.apache.isis.security
org.apache.isis.profilestore
org.apache.isis.progmodel
|
Refactoring: Resultant Directory Strcuture
The table at the end of this page summarises proposed refactorings for all the current Isis artifacts. If we do the refactorings, we end up with the following directory structure.
Some notes:
- I've deliberately shown this alphabetically so we can easily what this means in practical terms.
- As the table indicates, I am now proposing that we move the unreleased artifacts into their own subdirectory. This will make them easier to exclude via a Maven profile.
- Note: a "/*" suffix indicates additional sub-directories.
- The number of artifacts in the core is significantly reduced. Mostly, it is just core and runtime. The others are either 'default' implementations of components that we bundle into core (bytecode, objectstore, profilestore, security), or are for unit testing, integration testing, or our embedded webserver (a dev env utility only)
Code Block |
---|
archetypes/
dnd-xml
scimpi-nosql
wicket-restful-jdo
core/
applib # for end-users to reference
bytecode-cglib
bytecode-javassist
core # most of core; basically the metamodel, facet factories, default progmodel, and a runtime API
integtestsupport # for end-users when writing their apps, also used internally for tck end-to-end tests
objectstore-inmemory
profilestore-inmemory
runtime # the default runtime impl (IsisContext service locator, default impls of components, objectstore API)
security-noop
security-file
tck/*
unittestsupport # core's testsupport module, mostly for our own unit testing purposes
unreleased/ # excluded from release using Maven profile (if are released in future, then move up to root directory, ie ../..)
profilestore-sql
profilestore-xml
progmodel-groovy
progmodel-wrapper
security-ldap
security-sql
viewer-bdd/*
viewer-junit
webserver # not in runtime because is only a dev env utility
objectstore-jdo/*
objectstore-nosql/*
objectstore-sql/*
objectstore-xml/*
retired/
monitoring
viewer-html
viewer-dnd
viewer-restfulobjects/*
viewer-scimpi/*
viewer-wicket/*
|
As noted above, all of the pom.xml's in these top-level directories are separately releaseable (have org.apache:apache as their parent).
We might decide at a later date to move each of these top-level directories into their own git repo. If we do that, will probably want to use main artifactId, eg: isis-dnd-viewer.git, isis-jdo-objectstore.git etc.
Refactoring: Proposed Module Moves/Renames/Consolidations etc.
The table below summarises proposed refactorings for all the current Isis artifacts.
Type column:
- C = core, parented by "org.apache.isis:isis" (as currently)
- L = rolled up into parent with other modules, see Notes column for further details
- A = alternate implementation, not parented by org.apache.isis:isis (instead would define its own parent), thus separately releasable. Might move to own git repo
- A = edition, ie an archetype, not parented by org.apache.isis:isis (instead would define its own parent), thus separately releasable. Might move to own git repo
- X = excluded, parented by "org.apache.isis:isis" but not released (excluded through use of Maven profile). Might one day be promoted to being an alternate implementation.
- R = retired
- D = deleted
current | current | proposed | proposed location | proposed | proposed |
| ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
groupId | artifactId | action | (relative to root dir) | groupId | artifactId | Notes | ||||||||
o.a.i | isis | C | . | o.a.i | isis |
| ||||||||
o.a.i | applib | C | core/applib | o.a.i | isis-applib |
| ||||||||
o.a.i | isis.core | C | core/core | o.a.i.core | isis-core | "Source from submodules rolls up to this parent (packaging=jar not packaging=pom)" | ||||||||
o.a.i.core | commons | L | — | — | — | Rolled up into oai.core:isis-core | ||||||||
o.a.i.core | metamodel | L | — | — | — | Rolled up into oai.core:isis-core | ||||||||
o.a.i.core | progmodel | L | — | — | — | Rolled up into oai.core:isis-core | ||||||||
o.a.i.core | testsupport | C | core/unittestsupport | o.a.i.core | isis-unittestsupport | "Not rolled up because intended to be referenced with scope=test; renamed to distinguish from integtestsupport" | ||||||||
o.a.i.core | webapp | L | — | — | — | Rolled up into oai.core:isis-core | ||||||||
o.a.i | isis.runtimes | D | — | — | — | "Delete module due to flattening " | ||||||||
o.a.i.runtimes | dflt | C | core/runtime | o.a.i.core | isis-runtime | "Source from submodules rolls up to this parent (packaging=jar not packaging=pom)" | ||||||||
o.a.i.runtimes.dflt | runtime | L | — | — | — | Rolled up into oai.core:isis-runtime | ||||||||
o.a.i.runtimes.dflt | testsupport | C | core/integtestsupport | o.a.i.core | isis-integtestsupport | Utilities for end-users to write integration tests using Isis (cf Arquillian); also used by tck tests internally | ||||||||
o.a.i.runtimes.dflt | webapp | L | — | — | — | Rolled up into oai.core:isis-runtime | ||||||||
o.a.i.runtimes.dflt | webserver | C | core/webserver | o.a.i.core | isis-webserver | Utilities for end-users to bootstrap Isis as a webapp | ||||||||
o.a.i.runtimes.dflt | bytecode | D | — | — | — |
| ||||||||
o.a.i.runtimes.dflt.bytecode | dflt | C | core/bytecode-cglib | — | isis-cglib-bytecode | "Suggest no longer positioned as 'default' since JDO for example does not require this module." | ||||||||
o.a.i.runtimes.dflt.bytecode | identity | L | — | — | — | "Rolled up into oai.core:isis-runtime; is the new 'default'" | ||||||||
o.a.i.runtimes.dflt.bytecode | javassist | C | core/bytecode-javassist | o.a.i.core | isis-javassist-bytecode |
| ||||||||
o.a.i.runtimes.dflt | monitoring | R | retired/monitoring | o.a.i.monitoring | isis-monitoring | Suggest we retire this module | ||||||||
o.a.i.runtimes.dflt | objectstores | D | — | — | — | "Delete module due to flattening " | ||||||||
o.a.i.runtimes.dflt.objectstores | dflt | C | core/objectstore-inmemory | o.a.i.core | isis-inmemory-objectstore | "Suggest rename to be more descriptive removing 'dflt'" | ||||||||
o.a.i.runtimes.dflt.objectstores | jdo | A | objectstore-jdo | o.a.i.objectstore | isis-jdo-objectstore |
| ||||||||
o.a.i.runtimes.dflt.objectstores | jdo-applib | A | objectstore-jdo/applib | o.a.i.objectstore | isis-jdo-objectstore-applib |
| ||||||||
o.a.i.runtimes.dflt.objectstores | jdo-datanucleus | A | objectstore-jdo/datanucleus | o.a.i.objectstore | isis-jdo-objectstore-datanucleus |
| ||||||||
o.a.i.runtimes.dflt.objectstores | jdo-metamodel | A | objectstore-jdo/metamodel | o.a.i.objectstore | isis-jdo-objectstore-metamodel |
| ||||||||
o.a.i.runtimes.dflt.objectstores | nosql | A | objectstore-nosql | o.a.i.objectstore | isis-nosql-objectstore |
| ||||||||
o.a.i.runtimes.dflt.objectstores | sql | A | objectstore-sql | o.a.i.objectstore | isis-sql-objectstore |
| ||||||||
o.a.i.runtimes.dflt.objectstores | sql-impl | A | objectstore-sql/impl | o.a.i.objectstore | isis-sql-objectstore-impl |
| ||||||||
o.a.i.runtimes.dflt.objectstores | sql-tests-common | A | objectstore-sql/tests-common | o.a.i.objectstore | isis-sql-objectstore-tests-common |
| ||||||||
o.a.i.runtimes.dflt.objectstores | sql-tests-served | A | objectstore-sql/tests-served | o.a.i.objectstore | isis-sql-objectstore-tests-served |
| ||||||||
o.a.i.runtimes.dflt.objectstores | xml | A | objectstore-xml | o.a.i.objectstore | isis-xml-objectstore |
| ||||||||
o.a.i.runtimes.dflt | profilestores | — | — | — | — | "Delete module due to flattening " | ||||||||
o.a.i.runtimes.dflt.profilestores | dflt | C | core/profilestore-inmemory | o.a.i.core | isis-inmemory-profilestore | "Suggest rename to be more descriptive removing 'dflt'" | ||||||||
o.a.i.runtimes.dflt.profilestores | sql | X | core/extras/profilestore-sql | o.a.i.profilestore | isis-sql-profilestore |
| ||||||||
o.a.i.runtimes.dflt.profilestores | xml | X | core/extras/profilestore-xml | o.a.i.profilestore | isis-xml-profilestore |
| ||||||||
o.a.i | progmodels | D | — | — | — | "Delete module due to flattening " | ||||||||
o.a.i.progmodels | dflt | L |
| o.a.i.core | isis-progmodel-dflt | Suggest simply roll up into core | ||||||||
o.a.i.progmodels | groovy | X | core/unreleased/progmodel-groovy | o.a.i.progmodel | isis-progmodel-groovy |
| ||||||||
o.a.i.progmodels | groovy-applib | X | core/unreleased/progmodel-groovy/applib | o.a.i.progmodel | isis-progmodel-groovy-applib |
| ||||||||
o.a.i.progmodels | groovy-metamodel | X | core/unreleased/progmodel-groovy/metamodel | o.a.i.progmodel | isis-progmodel-groovy-metamodel |
| ||||||||
o.a.i.progmodels | wrapper | X | core/unreleased/progmodel-wrapper | o.a.i.progmodel | isis-progmodel-wrapper |
| ||||||||
o.a.i.progmodels | wrapper-applib | X | core/unreleased/progmodel-wrapper/applib | o.a.i.progmodel | isis-progmodel-wrapper-applib |
| ||||||||
o.a.i.progmodels | wrapper-metamodel | X | core/unreleased/progmodel-wrapper/metamodel | o.a.i.progmodel | isis-progmodel-wrapper-metamodel |
| ||||||||
o.a.i | isis.viewer | |||||||||||||
Module | Type | New location | groupId | artifactId | Notes | |||||||||
isis | C | . | o.a.i | isis |
| |||||||||
isis.applib | C | applib | o.a.i | isis-applib |
| |||||||||
isis.core | C | core | o.a.i.core | isis-core | with 6 submodules | |||||||||
isis.quickstart-archetype | E | quickstart-archetype-xxx-yyy | o.a.i.edition | isis-archetype-xxx-yyy | one per edition; separately releasable | |||||||||
isis.runtimes | D | — | — | — | "Delete module , due to flattening " | |||||||||
o.a.i.viewer | bdd | X | core/unreleased/viewer-bdd | o.a.i.viewer | isis-viewer-bdd |
| ||||||||
o.a.i.viewer | bdd-common | X | core/unreleased/viewer-bdd/common | isis.runtimes.dflt | C | runtime | o.a.i.coreviewer | isis-viewer-runtime | With 4 submodules (below) | isis.runtimes.dflt.bytecode | C | bdd-common |
| |
o.a.i.viewer | bdd-concordion | X | core/unreleased/viewer-bdd/concordionbytecode | o.a.i.coreviewer | isis-viewer-bdd-bytecode concordion |
| ||||||||
isiso.runtimesa.dflt.monitoring i.viewer | bdd-concordion-tck | X monitoring | core/unreleased/viewer-bdd/concordion-tck | o.a.i.monitoringviewer | isis-monitoring | Suggest we retire this module | ||||||||
isis.runtimes.dflt.objectstores | D | — | — | — | Delete module, due to flattening | |||||||||
-viewer-bdd-concordion-tck |
| |||||||||||||
o.a.i.viewer | dnd | A | viewer-dnd | isis.runtimes.dflt.objectstores.dflt | C | objectstore-dflt | o.a.i.coreviewer | isis-objectstoreviewer-dflt | Reinstated as a core module | isis.runtimes.dflt.objectstores.jdo | A | dnd |
| |
o.a.i.viewer | html | D | retired/viewer-html | — | — | Suggest we retire this module objectstore-jdo | ||||||||
o.a.i.objectstore | isis-objectstore-jdo |
| viewer | junit | X | core/unreleased/viewer-junit | isis.runtimes.dflt.objectstores.nosql | A | objectstore-nosql | o.a.i.objectstoreviewer | isis-objectstorejunit-nosqlviewer |
| ||
isiso.runtimesa.dflt.objectstores.sql | A | i.viewer | junit-tck | X | core/unreleased/viewer-junit-tckobjectstore-sql | o.a.i.objectstoreviewer | isis-junit-objectstoreviewer-sql tck |
| ||||||
isiso.runtimesa.dflt.objectstores.xml | R | ../retired/objectstore-xml | — | — | Suggest we retire this module | |||||||||
isis.runtimes.dflt.profilestores | — | — | — | — | Delete module, due to flattening | |||||||||
i.viewer | restfulobjects | A | viewer-restfulobjects | o.a.i.viewer | isis-restfulobjects-viewer |
| ||||||||
o.a.i.viewer | restfulobjects-applib | A | viewer-restfulobjects/applib | isis.runtimes.dflt.profilestores.dflt | C | profilestore-dflt | o.a.i.coreviewer | isis-restfulobjects-profilestoreviewer-dflt applib |
| |||||
isiso.runtimesa.dflt.profilestores.sql | X | i.viewer | restfulobjects-viewer | A | viewer-restfulobjects/viewerprofilestore-sql | o.a.i.profilestoreviewer | isis-restfulobjects-profilestoreviewer-sqlviewer |
| ||||||
isiso.runtimesa.dflt.profilestores.xml | R | i.viewer | restfulobjects-tck | A | viewer-restfulobjects/tckprofilestore-xml | o.a.i.profilestoreviewer | isis-restfulobjects-profilestoreviewer-xml | Suggest we retire this module | tck |
| ||||
o.a.i.viewer | scimpi | A | viewer-scimpi | isis.runtimes.dflt.runtime | C | runtime/runtime | o.a.i.coreviewer | isis-runtimescimpi-runtime | So good they named it twice! | isis.runtimes.dflt.testsupport | C | viewer |
| |
o.a.i.viewer | scimpi-dispatcher | A | viewer-scimpi/dispatcherruntime/testsupport | o.a.i.coreviewer | isis-runtimescimpi-testsupport viewer |
| ||||||||
isiso.runtimesa.dflt.webapp | C | i.viewer | scimpi-servlet | A | viewer-scimpi/servletruntime/webapp | o.a.i.coreviewer | isis-runtimescimpi-webapp viewer |
| ||||||
isiso.runtimesa.dflt.webserver | C | i.viewer | scimpi-tck | A | viewer-scimpi/tckruntime/webserver | o.a.i.coreviewer | isis-runtimescimpi-webserver viewer |
| ||||||
isis.progmodels | D | — | — | — | Delete module, due to flattening | |||||||||
o.a.i.viewer | wicket | A | viewer-wicket | isis.progmodels.dflt | C | progmodel-dflt | o.a.i.coreviewer | isis-progmodelwicket-dflt viewer |
| |||||
isiso.a.progmodels.groovy | X | i.viewer | wicket-model | A | viewer-wicket/modelprogmodel-groovy | o.a.i.progmodelviewer | isis-wicket-progmodelviewer-groovy model |
| ||||||
isiso.a.progmodels.wrapper | X | i.viewer | wicket-ui | A | viewer-wicket/uiprogmodel-wrapper | o.a.i.progmodelviewer | isis-wicket-progmodelviewer-wrapper ui |
| ||||||
isiso.a.i.viewer | D | — | — | — | Delete module, due to flattening | wicket-viewer | A | isis.viewer.bdd | X | viewer-bdd wicket/viewer | o.a.i.viewer | isis-wicket-viewer-bdd viewer |
| |
isiso.a.i.viewer.dnd | wicket-tck | A | viewer-dnd -wicket/tck | o.a.i.viewer | isis-wicket-viewer-dnd tck |
| ||||||||
isiso.viewera.html i | security | D | — | — ../retired/viewer-html | — | — Suggest we retire this module | "Delete module due to flattening " | |||||||
o.a.i.security | isis.viewersecurity.junit dflt | X C | viewercore/security-junit noop | o.a.i.viewercore | isis-viewernoop-junit security |
| isis.viewer.restfulobjects | Renamed for understandability | ||||||
o.a.i.security | file | C | core/security-file | A | viewer-restfulobjects | o.a.i.viewercore | isis-viewerfile-restfulobjects security |
| ||||||
isiso.a.vieweri.scimpi security | ldap | A | X | core/unreleased/security-ldap viewer-scimpi | o.a.i.viewersecurity | isis-viewerldap-scimpi security |
| |||||||
isiso.a.vieweri.wicket security | sql | A | X | core/unreleased/security-sqlviewer-wicket | o.a.i.viewersecurity | isis-viewersql-wicket security |
| isis.security | — | — | — | — | ||
Delete module, due to flattening o.a.i | isis.security.dflt tck | C security-dflt | core/tck | o.a.i.core | isis-security-dflt tck |
| ||||||||
o.a.i | isis.security.file tck-dom | C | securitycore/tck-file dom | o.a.i.core | isis-securitytck-file dom |
| isis.security.ldap | X | security-ldap | |||||
o.a.i.security | isis.tck-security-ldap fixture |
| C | core/tck-fixture | isis.security.sql | X | security-sql | o.a.i.securitycore | isis-security-sql |
| isis.tck | C | tck-fixture | tck |
o.a.i.coreskins | isis-tck |
|
Profiles
The 'C' and 'A' modules will be independent of each other.
The 'X' modules will be part of the core, but will not be released. We can use profiles to exclude them when doing a release, eg:
...
classic-skins | C | core/site-skin | o.a.i.core | isis-site-skin | Renamed for understandability | |
o.a.i | quickstart-archetype | T | archetypes/wicket-restful-jdo | o.a.i.archetypes | isis-archetype-wicket-restful-jdo | each archetype represents an 'edition' of Isis; separately releasable |
o.a.i | quickstart-archetype | T | archetypes/scimpi-nosql | o.a.i.archetypes | isis-archetype-scimpi-nosql |
|
o.a.i | quickstart-archetype | T | archetypes/dnd-xml | o.a.i.archetypes | isis-archetype-dnd-xml |
|
Original text that initiated the discussion
...