Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Discussion

In the mailing lists we've been discussing how to restructure the codebase to make releases easier to do, see isis-users thread and isis-dev thread.

Interim Conclusions (as of 7pm, 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)
  • 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

...

...

At the moment it's a daunting task to fully verify all the components of the framework are working correctly prior to pushing out a release. I suppose that wouldn't be so much of a concern if we had better automated tests, but, hey, that's how things are.

...

a) (as already noted) the user community will only see binary releases that are known to be of production ready. This should mitigate the "is it safe to use this component" worry
b) (as hinted at) it should be possible for individual contributors to put out releases of their modules more rapidly
c) we get visibility of which modules aren't being released; for example, we might say that if a module hasn't been released by anyone for 18 months, say, then it's probably time to remove it from the codebase.

Flattening the Modules

In order to support the above scheme, I propose that we rearrange some of the modules so that they can be more easily included within Maven modules. The table below summarises the changes (with the 'new location' column being relative to trunk/framework directory):

...

 

...

 

...

 

...

 

...

Wicket/Rest/JDO

...

Scimpi/NoSQL

...

HTML/SQL

...

Module

...

New location

...

Core?

...

Notes

...

edition

...

edition

...

edition

...

isis

...

.

...

Y

...

No change

...

Y (core)

...

Y (core)

...

Y (core)

...

isis.applib

...

applib

...

Y

...

No change

...

Y (core)

...

Y (core)

...

Y (core)

...

isis.core

...

core

...

Y

...

No change

...

Y (core)

...

Y (core)

...

Y (core)

...

isis.quickstart-archetype

...

isis.quickstart-archetype-xxx-yyy

...

N

...

Split into several, per release profile

...

Y

...

Y

...

Y

...

isis.runtimes

...

...

...

Remove module

...

 

...

 

...

 

...

isis.runtimes.dflt

...

runtime-dflt

...

Y

...

 

...

Y (core)

...

Y (core)

...

Y (core)

...

isis.runtimes.dflt.bytecode

...

bytecode

...

Y

...

 

...

Y (core)

...

Y (core)

...

Y (core)

...

isis.runtimes.dflt.monitoring

...

monitoring

...

N

...

 

...

 

...

 

...

 

...

isis.runtimes.dflt.objectstores

...

...

...

Remove module

...

 

...

 

...

 

...

isis.runtimes.dflt.objectstores.dflt

...

objectstore-dflt

...

N

...

No longer considered part of core

...

 

...

 

...

 

...

isis.runtimes.dflt.objectstores.jdo

...

objectstore-jdo

...

N

...

 

...

Y

...

 

...

 

...

isis.runtimes.dflt.objectstores.nosql

...

objectstore-nosql

...

N

...

 

...

 

...

Y

...

 

...

isis.runtimes.dflt.objectstores.sql

...

objectstore-sql

...

N

...

 

...

 

...

 

...

Y

...

isis.runtimes.dflt.objectstores.xml

...

objectstore-xml

...

N

...

 

...

 

...

 

...

 

...

isis.runtimes.dflt.profilestores

...

...

...

Remove module

...

 

...

 

...

 

...

isis.runtimes.dflt.profilestores.dflt

...

profilestore-dflt

...

Y

...

 

...

Y (core)

...

Y (core)

...

Y (core)

...

isis.runtimes.dflt.profilestores.sql

...

profilestore-sql

...

N

...

 

...

 

...

 

...

 

...

isis.runtimes.dflt.profilestores.xml

...

profilestore-xml

...

N

...

 

...

 

...

 

...

 

...

isis.runtimes.dflt.runtime

...

runtime-dflt/runtime

...

Y

...

 

...

Y (core)

...

Y (core)

...

Y (core)

...

isis.runtimes.dflt.testsupport

...

runtime-dflt/testsupport

...

Y

...

 

...

Y (core)

...

Y (core)

...

Y (core)

...

.

...

runtime-dflt/webapp

...

Y

...

 

...

Y (core)

...

Y (core)

...

Y (core)

...

isis.runtimes.dflt.webserver

...

runtime-dflt/webserver

...

Y

...

 

...

Y (core)

...

Y (core)

...

Y (core)

...

isis.progmodels

...

...

...

Remove module

...

 

...

 

...

 

...

isis.progmodels.dflt

...

progmodel-dflt

...

Y

...

 

...

Y (core)

...

Y (core)

...

Y (core)

...

isis.progmodels.groovy

...

progmodel-groovy

...

N

...

 

...

 

...

 

...

 

...

isis.progmodels.wrapper

...

progmodel-wrapper

...

N

...

 

...

 

...

 

...

 

...

isis.viewer

...

...

...

Remove module

...

 

...

 

...

 

...

isis.viewer.bdd

...

viewer-bdd

...

N

...

 

...

 

...

 

...

 

...

isis.viewer.dnd

...

viewer-dnd

...

N

...

 

...

 

...

 

...

 

...

isis.viewer.html

...

viewer-html

...

N

...

 

...

 

...

 

...

Y

...

isis.viewer.junit

...

viewer-junit

...

N

...

 

...

 

...

 

...

 

...

isis.viewer.restfulobjects

...

viewer-restfulobjects

...

N

...

 

...

Y

...

 

...

 

...

isis.viewer.scimpi

...

viewer-scimpi

...

N

...

 

...

 

...

Y

...

 

...

isis.viewer.wicket

...

viewer-wicket

...

N

...

 

...

Y

...

 

...

 

...

isis.security

...

...

...

Remove module

...

 

...

 

...

 

...

isis.security.dflt

...

security-dflt

...

Y

...

 

...

Y (core)

...

Y (core)

...

Y (core)

...

isis.security.file

...

security-file

...

Y

...

 

...

Y (core)

...

Y (core)

...

Y (core)

...

isis.security.ldap

...

security-ldap

...

N

...

 

...

 

...

 

...

 

...

isis.security.sql

...

security-sql

...

N

...

 

...

 

...

 

...

 

...

isis.tck

...

tck

...

Y

...

 

...

Y (core)

...

Y (core)

...