...
Interim Conclusions (as of 7am7pm, 3 4 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
- 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?
- prefer that artifactIds read well, ie "isis-nosql-objectstore" rather than "isis-objectstore-nosql"
- consolidate artifacts so clear distinction between core vs non-core where makes sense
- go with a small set of groupIds, broadly reflecting nature of componentcombine core and runtime artifacts
- don't move separate modules into their own git repos?
- don't retire modules just yet (except perhaps the old monitoring module)
Still being debated/to be discussed:
- 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?
Refactoring: Resultant GroupIds
- is it ok for the default progmodel to be bundled with core?
- assuming it is, should its groupId be core, or "progmodel"?
- is it ok for the default (identity) bytecode to be bundled with core?
- assuming it is, should its groupId be core, or "progmodel"?
- are we happy to rename oai.core:isis-core to oai.core:isis-metamodel ?
- use of isis-parent as a parent (non aggregating) pom defining release management configuration for all releaseable artifacts
Proposed GroupIds
The table at the end of this page summarises proposed refactorings for all the current Isis 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.archetypesarchetype 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 |
...
Proposed Directory
...
Structure
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 structureproposed directory structure to hold the Isis artifacts is shown below.
Some notes:
- Note: a "/*" suffix indicates additional sub-directories.
- 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)
- I've added a new isis-parent directory to hold the parent pom.xml for all releasable modules (ie archetype/, core, and component/)
- I've renamed oai.core:core to oai.core:metamodel
Code Block |
---|
archetype |
Code Block |
archetypes/ dnd-xml dnd-junit-bdd scimpi-nosql wicket-restful-jdo core/ deployment/ core/ deployment/ applib bytecode-cglib bytecode-javassist metamodel applib # most of core; basically the metamodel, facet factories, default progmodel, and a runtime bytecode-cglibAPI runtime bytecode-javassist core # the default runtime impl (IsisContext service locator, #default mostimpls of core; basically the metamodel, facet factories, default progmodel, and a runtime API components, objectstore API) webserver development/ integtestsupport runtime # for end-users when writing their apps, also used internally for tck end-to-end tests # the defaulttck/* runtime impl (IsisContext serviceunittestsupport locator, default impls of components, objectstore API) development/ integtestsupport # for end-users when writing their apps, also used internally for tck end-to-end tests tck/* unittestsupport # core's testsupport module, mostly for our own unit testing purposes webserver # not in runtime because is only a dev env utility components/ # all components are released separately from core (have org.apache:apache as their parent) objectstores/ inmemory jdo# core's testsupport module, mostly for our own unit testing purposes component/ # all components are released separately from core objectstore/ inmemory jdo/* nosql/* sql/* xml/* profilestore/ inmemory sql xml progmodel/ groovy wrapper security/ noop file ldap sql viewer/ bdd/* dnd html junit restfulobjects/* nosqlscimpi/* sqlwicket/* example/ xml/* profilestores/ inmemory sql # xml various examples, progmodels not released, some used groovy to reverse engineer wrapper security/ archetypes isis-parent/ noop file ldap # sql parent POM viewer/ for all releasable bddcomponents retired/* dndmonitoring structure101/ junit restfulobjects/* scimpi/* # wicket/* retired/ monitoring viewer/ htmlnot released, .java.hsp project files used to create documentation |
As noted above, all of the pom.xml's for each of the components are separately releaseable (have org.apache:apache as their parent). This is probably through a new oai:isis-parent parent (non aggregating) POM.
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.
...
- C = core, parented by "org.apache.isis:isis-parent" (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 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
...
current | current | proposed | proposed |
| proposed | |||
groupId | artifactIdaction | groupId | artifactId | Notes | ||||
o.a.i | isis | o.a.i | isis-parent | Release configuration moved to new pom intended to be parent of all releaseable artifacts | ||||
o.a.i | isis C | o.a.i.core | isis | Acts as aggregator of isis core modules | ||||
o.a.i | applibC | o.a.i.core | isis-applib |
| ||||
o.a.i | isis.core C | o.a.i.core | isis-core metamodel | 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-coremetamodel | |||
o.a.i.core | metamodel | L | — | — | Rolled up into oai.core:isis-coremetamodel | |||
o.a.i.core | progmodelL | — | — | Rolled up into oai.core:isis-coremetamodel | ||||
o.a.i.core | testsupportC | 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-coremetamodel | |||
o.a.i | isis.runtimes | D | — | — | Delete module; due to flattening | |||
o.a.i.runtimes | dfltC | 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 | testsupportC | 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 | webappL | — | — | Rolled up into oai.core:isis-runtime | ||||
o.a.i.runtimes.dflt | webserverC | o.a.i.core | isis-webserver | Utilities for end-users to To bootstrap Isis as a webapp | ||||
o.a.i.runtimes.dflt | bytecode | D — | —— |
| ||||
o.a.i.runtimes.dflt.bytecode | dflt | C | — | o.a.i.core | 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 | — | — | TO CONFIRM: Rolled up into oai.core:isis-runtime; is the new 'default' | |||
o.a.i.runtimes.dflt.bytecode | javassist | C | o.a.i.core | isis-javassist-bytecode |
| |||
o.a.i.runtimes.dflt | monitoringR | o.a.i.monitoring | isis-monitoring Suggest we retire this module | Probably to be retired. | ||||
o.a.i.runtimes.dflt | objectstores | D | — | — | Delete module; due to flattening | |||
o.a.i.runtimes.dflt.objectstores | dfltC | o.a.i.coreobjectstore | isis-inmemory-objectstore | Suggest rename to be more descriptive; removing 'dflt' | ||||
o.a.i.runtimes.dflt.objectstores | jdo | A | o.a.i.objectstore | isis-jdo-objectstore |
| |||
o.a.i.runtimes.dflt.objectstores | jdo-applibA | o.a.i.objectstore | isis-jdo-objectstore-applib |
| ||||
o.a.i.runtimes.dflt.objectstores | jdo-datanucleusA | o.a.i.objectstore | isis-jdo-objectstore-datanucleus |
| ||||
o.a.i.runtimes.dflt.objectstores | jdo-metamodel | A | o.a.i.objectstore | isis-jdo-objectstore-metamodel |
| |||
o.a.i.runtimes.dflt.objectstores | nosql | A | o.a.i.objectstore | isis-nosql-objectstore |
| |||
o.a.i.runtimes.dflt.objectstores | sqlA | o.a.i.objectstore | isis-sql-objectstore |
| ||||
o.a.i.runtimes.dflt.objectstores | sql-implA | o.a.i.objectstore | isis-sql-objectstore-impl |
| ||||
o.a.i.runtimes.dflt.objectstores | sql-tests-common | A | o.a.i.objectstore | isis-sql-objectstore-tests-common |
| |||
o.a.i.runtimes.dflt.objectstores | sql-tests-servedA | o.a.i.objectstore | isis-sql-objectstore-tests-served |
| ||||
o.a.i.runtimes.dflt.objectstores | xmlA | o.a.i.objectstore | isis-xml-objectstore |
| ||||
o.a.i.runtimes.dflt | profilestores— | — | — | Delete module; due to flattening | ||||
o.a.i.runtimes.dflt.profilestores | dfltC | o.a.i.coreprofilestore | isis-inmemory-profilestore | Suggest rename to be more descriptive; removing 'dflt' | ||||
o.a.i.runtimes.dflt.profilestores | sqlX | o.a.i.profilestore | isis-sql-profilestore |
| ||||
o.a.i.runtimes.dflt.profilestores | xml | X | 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 TO CONFIRM: rolled up into oai.core:isis-metamodel | |||
o.a.i.progmodels | groovyX | o.a.i.progmodel | isis-progmodel-groovy |
| ||||
o.a.i.progmodels | groovy-applib | X | o.a.i.progmodel | isis-progmodel-groovy-applib |
| |||
o.a.i.progmodels | groovy-metamodelX | o.a.i.progmodel | isis-progmodel-groovy-metamodel |
| ||||
o.a.i.progmodels | wrapperX | o.a.i.progmodel | isis-progmodel-wrapper |
| ||||
o.a.i.progmodels | wrapper-applibX | o.a.i.progmodel | isis-progmodel-wrapper-applib |
| ||||
o.a.i.progmodels | wrapper-metamodel | X | o.a.i.progmodel | isis-progmodel-wrapper-metamodel |
| |||
o.a.i | isis.viewer | D | — | — | Delete module; due to flattening | |||
o.a.i.viewer | bddX | o.a.i.viewer | isis-bdd-viewer |
| ||||
o.a.i.viewer | bdd-commonX | o.a.i.viewer | isis-bdd-viewer-common |
| ||||
o.a.i.viewer | bdd-concordionX | o.a.i.viewer | isis-bdd-viewer-concordion |
| ||||
o.a.i.viewer | bdd-concordion-tck | X | o.a.i.viewer | isis-bdd-viewer-concordion-tck |
| |||
o.a.i.viewer | dndA | o.a.i.viewer | isis-dnd-viewer |
| ||||
o.a.i.viewer | html | D | — | — | Suggest we retire this module | o.a.i.viewer | isis-html-viewer |
|
o.a.i.viewer | junitX | o.a.i.viewer | isis-junit-viewer |
| ||||
o.a.i.viewer | junit-tck | X | o.a.i.viewer | isis-junit-viewer-tck |
| |||
o.a.i.viewer | restfulobjectsA | o.a.i.viewer | isis-restfulobjects-viewer |
| ||||
o.a.i.viewer | restfulobjects-applibA | o.a.i.viewer | isis-restfulobjects-viewer-applib |
| ||||
o.a.i.viewer | restfulobjects-viewerA | o.a.i.viewer | isis-restfulobjects-viewer-viewer |
| ||||
o.a.i.viewer | restfulobjects-tck | A | o.a.i.viewer | isis-restfulobjects-viewer-tck |
| |||
o.a.i.viewer | scimpi | A | o.a.i.viewer | isis-scimpi-viewer |
| |||
o.a.i.viewer | scimpi-dispatcher | A | o.a.i.viewer | isis-scimpi-viewer-dispatcher |
| |||
o.a.i.viewer | scimpi-servletA | o.a.i.viewer | isis-scimpi-viewer-servlet |
| ||||
o.a.i.viewer | scimpi-tckA | o.a.i.viewer | isis-scimpi-viewer-tck |
| ||||
o.a.i.viewer | wicket | A | o.a.i.viewer | isis-wicket-viewer |
| |||
o.a.i.viewer | wicket-model | A | o.a.i.viewer | isis-wicket-viewer-model |
| |||
o.a.i.viewer | wicket-uiA | o.a.i.viewer | isis-wicket-viewer-ui |
| ||||
o.a.i.viewer | wicket-viewerA | o.a.i.viewer | isis-wicket-viewer-viewer |
| ||||
o.a.i.viewer | wicket-tck | A | o.a.i.viewer | isis-wicket-viewer-tck |
| |||
o.a.i | security— | — | — | Delete module; due to flattening | ||||
o.a.i.security | isis.security.dflt | C | o.a.i.core | isis-noop-security | Renamed for understandability | |||
o.a.i.security | fileC | o.a.i.core | isis-file-security |
| ||||
o.a.i.security | ldap | X | o.a.i.security | isis-ldap-security |
| |||
o.a.i.security | sqlX | o.a.i.security | isis-sql-security |
| ||||
o.a.i | isis.tck C | o.a.i.core | isis-tck |
| ||||
o.a.i | isis.tck-domC | o.a.i.core | isis-tck-dom |
| ||||
o.a.i | isis.tck-fixture | C | o.a.i.core | isis-tck-fixture |
| |||
o.a.i.skins | classic-skins | C | o.a.i.core | isis-site-skin | Renamed for understandability | |||
o.a.i | quickstart-archetype T | o.a.i.archetypes | isis-archetype-wicket-restful-jdo | each archetype represents an 'edition' of Isis; separately releasable | ||||
o.a.i | quickstart-archetype T | o.a.i.archetypes | isis-archetype-scimpi-nosql |
| ||||
o.a.i | quickstart-archetype | o.a.i.archetypes | isis-archetype-dnd-xml |
| ||||
o.a.i | quickstart-archetype T | o.a.i.archetypes | isis-archetype-dnd-junit-xmlbdd |
|
Original text that initiated the discussion
...