Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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

...