...
Interim Conclusions (as of 12:30gmt 30 Nov 127pm, 4 Dec 12):
- yes, to idea of independent, more granular releases
- yes, flatten the modules at least as an interim step
- also, rename the groupId/artifactId's
- break linkage so (this means 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 own parent. Might move to own git repo
- E = edition, ie an archetype, not parented by org.apache.isis:isis, instead would define own parent. Might move to own git repo
- X = excluded, parented by "org.apache.isis:isis" but not released (excluded through use of Maven profile).
- 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 don't think we need an 'isis-' prefix on every artifactId; remember that several will have submodules so the artifactId could get pretty long
- 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.
Module | Type | New location | groupId:artifactId | Notes |
---|---|---|---|---|
isis | C | . | o.a.i:isis |
|
isis.applib | C | applib | o.a.i:applib | Suggest we leave this artifactId as is |
isis.core | C | core | o.a.i.core:core | with 6 submodules |
isis.quickstart-archetype | E | quickstart-archetype-xxx-yyy | o.a.i.edition:isis-archetype-xxx-yyy | Keep isis in artifactId for searching; one per edition |
isis.runtimes | D | — | — | Delete module, due to flattening |
isis.runtimes.dflt | C | runtime-dflt | o.a.i.core:runtime-dflt | With 4 submodules (below); could be other runtimes in future? |
isis.runtimes.dflt.bytecode | C | bytecode | o.a.i.core:bytecode |
|
isis.runtimes.dflt.monitoring | X | monitoring | o.a.i.monitoring:monitoring | Suggest we retire this module |
isis.runtimes.dflt.objectstores | D | — | — | Delete module, due to flattening |
isis.runtimes.dflt.objectstores.dflt | C | objectstore-dflt | o.a.i.core:objectstore-dflt | Reinstated as a core module |
isis.runtimes.dflt.objectstores.jdo | A | objectstore-jdo | o.a.i.objectstore:jdo |
|
isis.runtimes.dflt.objectstores.nosql | A | objectstore-nosql | o.a.i.objectstore:nosql |
|
isis.runtimes.dflt.objectstores.sql | A | objectstore-sql | o.a.i.objectstore:sql |
|
isis.runtimes.dflt.objectstores.xml | R | ../retired/objectstore-xml | — | Suggest we retire this module |
isis.runtimes.dflt.profilestores | — | — | — | Delete module, due to flattening |
isis.runtimes.dflt.profilestores.dflt | C | profilestore-dflt | o.a.i.core:profilestore-dflt |
|
isis.runtimes.dflt.profilestores.sql | X | profilestore-sql | o.a.i.profilestore:sql |
|
isis.runtimes.dflt.profilestores.xml | R | profilestore-xml | o.a.i.profilestore:xml | Suggest we retire this module |
isis.runtimes.dflt.runtime | C | runtime-dflt/runtime | o.a.i.core:runtime-dflt-runtime |
|
isis.runtimes.dflt.testsupport | C | runtime-dflt/testsupport | o.a.i.core:runtime-dflt-testsupport |
|
isis.runtimes.dflt.webapp | C | runtime-dflt/webapp | o.a.i.core:runtime-dflt-webapp |
|
isis.runtimes.dflt.webserver | C | runtime-dflt/webserver | o.a.i.core:runtime-dflt-webserver |
|
isis.progmodels | D | — | — | Delete module, due to flattening |
isis.progmodels.dflt | C | progmodel-dflt | o.a.i.core:progmodel-dflt |
|
isis.progmodels.groovy | X | progmodel-groovy | o.a.i.progmodel:groovy |
|
isis.progmodels.wrapper | X | progmodel-wrapper | o.a.i.progmodel:wrapper |
|
isis.viewer | D | — | — | Delete module, due to flattening |
isis.viewer.bdd | X | viewer-bdd | o.a.i.viewer:bdd |
|
isis.viewer.dnd | A | viewer-dnd | o.a.i.viewer:dnd |
|
isis.viewer.html | D | ../retired/viewer-html | — | Suggest we retire this module |
isis.viewer.junit | X | viewer-junit | o.a.i.viewer:junit |
|
isis.viewer.restfulobjects | A | viewer-restfulobjects | o.a.i.viewer:restfulobjects |
|
isis.viewer.scimpi | A | viewer-scimpi | o.a.i.viewer:scimpi |
|
isis.viewer.wicket | A | viewer-wicket | o.a.i.viewer:wicket |
|
isis.security | — | — | — | Delete module, due to flattening |
isis.security.dflt | C | security-dflt | o.a.i.core:security-dflt |
|
isis.security.file | C | security-file | o.a.i.core:security-file |
|
isis.security.ldap | X | security-ldap | o.a.i.security:ldap |
|
isis.security.sql | X | security-sql | o.a.i.security:sql |
|
isis.tck | C | tck | o.a.i.core: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:
...
- 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 component
- 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:
- is it ok for the default progmodel to be bundled with core?
*8 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 artifacts. But to cut to the chase, we would end up with the following groupIds:
Code Block |
---|
org.apache.isis.archetype
org.apache.isis.core
org.apache.isis.objectstore
org.apache.isis.viewer
org.apache.isis.security
org.apache.isis.profilestore
org.apache.isis.progmodel
|
Proposed Directory Structure
The proposed 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.
- 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
- Have removed 'deployment' and 'development' subdirs from core (talking further with Jeroen, decided no longer much value to having this)
Code Block |
---|
core/
applib
bytecode-cglib
bytecode-javassist
metamodel # most of core; basically the metamodel, facet factories, default progmodel, and a runtime API
runtime # the default runtime impl (IsisContext service locator, default impls of components, objectstore API)
webserver
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
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/*
scimpi/*
wicket/*
example/ # various examples, not released, some used to reverse engineer archetypes. Very good candidate to move into a separate "isis-examples" repo.
application/
archetype/
dnd-xml
dnd-junit-bdd
scimpi-nosql
wicket-restful-jdo
domain-entity/
domain-service/
isis-parent/ # parent POM for all releasable components
retired/
monitoring
site-skin/
tool/
maven-plugin
structure101 # not 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. 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.
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-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
- 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
In the table below, I've removed the proposed location column, since this information is now shown above.
current | current | proposed | proposed |
|
|
groupId | artifactId | 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 | o.a.i.core | isis | Acts as aggregator of isis core modules | |
o.a.i | applib | o.a.i.core | isis-applib |
| |
o.a.i | isis.core | o.a.i.core | isis-metamodel | Source from submodules rolls up to this parent (packaging=jar; not packaging=pom) | |
o.a.i.core | commons | — | — | Rolled up into oai.core:isis-metamodel | |
o.a.i.core | metamodel | — | — | Rolled up into oai.core:isis-metamodel | |
o.a.i.core | progmodel | — | — | Rolled up into oai.core:isis-metamodel | |
o.a.i.core | testsupport | 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 | — | — | Rolled up into oai.core:isis-metamodel | |
o.a.i | isis.runtimes | — | — | Delete module; due to flattening | |
o.a.i.runtimes | dflt | 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 | — | — | Rolled up into oai.core:isis-runtime | |
o.a.i.runtimes.dflt | testsupport | 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 | — | — | Rolled up into oai.core:isis-runtime | |
o.a.i.runtimes.dflt | webserver | o.a.i.core | isis-webserver | To bootstrap Isis as a webapp | |
o.a.i.runtimes.dflt | bytecode | — | — |
| |
o.a.i.runtimes.dflt.bytecode | dflt | 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 | — | — | TO CONFIRM: Rolled up into oai.core:isis-runtime; is the new 'default' | |
o.a.i.runtimes.dflt.bytecode | javassist | o.a.i.core | isis-javassist-bytecode |
| |
o.a.i.runtimes.dflt | monitoring | o.a.i.monitoring | isis-monitoring | Probably to be retired. | |
o.a.i.runtimes.dflt | objectstores | — | — | Delete module; due to flattening | |
o.a.i.runtimes.dflt.objectstores | dflt | o.a.i.objectstore | isis-inmemory-objectstore |
| |
o.a.i.runtimes.dflt.objectstores | jdo | o.a.i.objectstore | isis-jdo-objectstore |
| |
o.a.i.runtimes.dflt.objectstores | jdo-applib | o.a.i.objectstore | isis-jdo-objectstore-applib |
| |
o.a.i.runtimes.dflt.objectstores | jdo-datanucleus | o.a.i.objectstore | isis-jdo-objectstore-datanucleus |
| |
o.a.i.runtimes.dflt.objectstores | jdo-metamodel | o.a.i.objectstore | isis-jdo-objectstore-metamodel |
| |
o.a.i.runtimes.dflt.objectstores | nosql | o.a.i.objectstore | isis-nosql-objectstore |
| |
o.a.i.runtimes.dflt.objectstores | sql | o.a.i.objectstore | isis-sql-objectstore |
| |
o.a.i.runtimes.dflt.objectstores | sql-impl | o.a.i.objectstore | isis-sql-objectstore-impl |
| |
o.a.i.runtimes.dflt.objectstores | sql-tests-common | o.a.i.objectstore | isis-sql-objectstore-tests-common |
| |
o.a.i.runtimes.dflt.objectstores | sql-tests-served | o.a.i.objectstore | isis-sql-objectstore-tests-served |
| |
o.a.i.runtimes.dflt.objectstores | 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 | o.a.i.profilestore | isis-inmemory-profilestore |
| |
o.a.i.runtimes.dflt.profilestores | sql | o.a.i.profilestore | isis-sql-profilestore |
| |
o.a.i.runtimes.dflt.profilestores | xml | o.a.i.profilestore | isis-xml-profilestore |
| |
o.a.i | progmodels | — | — | Delete module; due to flattening | |
o.a.i.progmodels | dflt | — | isis-progmodel-dflt | TO CONFIRM: rolled up into oai.core:isis-metamodel | |
o.a.i.progmodels | groovy | o.a.i.progmodel | isis-progmodel-groovy |
| |
o.a.i.progmodels | groovy-applib | o.a.i.progmodel | isis-progmodel-groovy-applib |
| |
o.a.i.progmodels | groovy-metamodel | o.a.i.progmodel | isis-progmodel-groovy-metamodel |
| |
o.a.i.progmodels | wrapper | o.a.i.progmodel | isis-progmodel-wrapper |
| |
o.a.i.progmodels | wrapper-applib | o.a.i.progmodel | isis-progmodel-wrapper-applib |
| |
o.a.i.progmodels | wrapper-metamodel | o.a.i.progmodel | isis-progmodel-wrapper-metamodel |
| |
o.a.i | isis.viewer | — | — | Delete module; due to flattening | |
o.a.i.viewer | bdd | o.a.i.viewer | isis-bdd-viewer |
| |
o.a.i.viewer | bdd-common | o.a.i.viewer | isis-bdd-viewer-common |
| |
o.a.i.viewer | bdd-concordion | o.a.i.viewer | isis-bdd-viewer-concordion |
| |
o.a.i.viewer | bdd-concordion-tck | o.a.i.viewer | isis-bdd-viewer-concordion-tck |
| |
o.a.i.viewer | dnd | o.a.i.viewer | isis-dnd-viewer |
| |
o.a.i.viewer | html | o.a.i.viewer | isis-html-viewer |
| |
o.a.i.viewer | junit | o.a.i.viewer | isis-junit-viewer |
| |
o.a.i.viewer | junit-tck | o.a.i.viewer | isis-junit-viewer-tck |
| |
o.a.i.viewer | restfulobjects | o.a.i.viewer | isis-restfulobjects-viewer |
| |
o.a.i.viewer | restfulobjects-applib | o.a.i.viewer | isis-restfulobjects-viewer-applib |
| |
o.a.i.viewer | restfulobjects-viewer | o.a.i.viewer | isis-restfulobjects-viewer-viewer |
| |
o.a.i.viewer | restfulobjects-tck | o.a.i.viewer | isis-restfulobjects-viewer-tck |
| |
o.a.i.viewer | scimpi | o.a.i.viewer | isis-scimpi-viewer |
| |
o.a.i.viewer | scimpi-dispatcher | o.a.i.viewer | isis-scimpi-viewer-dispatcher |
| |
o.a.i.viewer | scimpi-servlet | o.a.i.viewer | isis-scimpi-viewer-servlet |
| |
o.a.i.viewer | scimpi-tck | o.a.i.viewer | isis-scimpi-viewer-tck |
| |
o.a.i.viewer | wicket | o.a.i.viewer | isis-wicket-viewer |
| |
o.a.i.viewer | wicket-model | o.a.i.viewer | isis-wicket-viewer-model |
| |
o.a.i.viewer | wicket-ui | o.a.i.viewer | isis-wicket-viewer-ui |
| |
o.a.i.viewer | wicket-viewer | o.a.i.viewer | isis-wicket-viewer-viewer |
| |
o.a.i.viewer | wicket-tck | o.a.i.viewer | isis-wicket-viewer-tck |
| |
o.a.i | security | — | — | Delete module; due to flattening | |
o.a.i.security | isis.security.dflt | o.a.i.core | isis-noop-security |
| |
o.a.i.security | file | o.a.i.core | isis-file-security |
| |
o.a.i.security | ldap | o.a.i.security | isis-ldap-security |
| |
o.a.i.security | sql | o.a.i.security | isis-sql-security |
| |
o.a.i | isis.tck | o.a.i.core | isis-tck |
| |
o.a.i | isis.tck-dom | o.a.i.core | isis-tck-dom |
| |
o.a.i | isis.tck-fixture | o.a.i.core | isis-tck-fixture |
| |
o.a.i.skins | classic-skins | o.a.i.core | isis-site-skin |
| |
o.a.i | quickstart-archetype | o.a.i.archetypes | isis-archetype-wicket-restful-jdo | each archetype represents an 'edition' of Isis; separately releasable | |
o.a.i | quickstart-archetype | 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 | o.a.i.archetypes | isis-archetype-dnd-junit-bdd |
|
Original text that initiated the discussion
...