One theme that came out of the recent project promotion thread was a
need to establish what our project structure should be. Part of that
also is the level of "support" between parts of that project structure.
I'd like to propose a strawman, not only of the structure but also of
the rules.

A project "core" that:
* is as small as possible with carefully controlled dependencies
* provides the fabric for the runtime (Contexts)
* provides APIs for providing plugin extensions
* provides SPIs for embedding in host environments
* can be built separately and used by extensions in binary form
  (implying versioning and stability on the extension APIs)
* has a rule that incompatible changes to the API require the changer
  to upgrade and test all extensions in the Tuscany project and with
  a specific vote to accept them

Baseline services that are distributed with the core that:
* provide a deployment model for extensions (include loading,
  context building, package handling (classpath))
* provide critical system services (monitoring, admin enablement)
* provide system services needed to support baseline extensions
  (security provider, transaction manager, work manager, ...)
* has the same rule on API changes for those services as the core

Baseline extensions that are distributed with the core:
* programming models that are part of the specification
  (currently Java, futures being C++, Spring, J2EE, BPEL, ...)
* transport bindings that are part of the specification
  (currently WS, futures being JMS, ...)
* data bindings that are part of the specification
  (currently SDO, futures being JAXB, ...)
* policy handlers that are part of the specification
  (futures being Security, Transaction, ...)

Optional services that can be used to extend the runtime:
* programming models that are not part of the specification
  (currently JavaScript, future being PHP, ???)
* transport bindings that are not part of the specification
  (currently JSON-RPC, future being ???)
* data bindings that are not part of the specification
  (currently JSON, future being ???)
* services for use by applications
  (database access, DAS implementations, directory access, ...)
* these would be released separately and could be deployed
  to a host environment by a user

Host integrations that provide installable distributions:
* provide implementations of the core's SPIs that allow
  Tuscany to run in different environments.
  (currently J2SE, J2EE WAR and Tomcat,
   future being full J2EE, Geronimo, OSGi(Eclipse), ...)
* provide installable distributions that include all the
  baseline compoments applicable to that environment
* provide "extended" distributions tailored to different
  user communities that include selected optional services

Sample and demo applications that:
* show key concepts from the SCA programming model
  (currently helloworld)
* show how to build a large scale application
  (currently bigbank)
* show how to use Tuscany in different environments

Testing
* compliance test for the specification (when available)
* pre-release tests for Tuscany
* ALL modules above should test their own functionality
  (at both the unit and integration levels) as part of their
  own build. No manual setup should be required.


Given that, I would suggest the following changes to the project layout:

sca/
# "core" system
sca/system/common
sca/system/model
sca/system/core

# "baseline" services and extensions
sca/baseline/service/monitor
sca/baseline/service/security
sca/baseline/service/transaction
sca/baseline/service/work
sca/baseline/container/java
sca/baseline/transport/axis2
sca/baseline/data/sdo
sca/baseline/policy/security

# "optional" services and extensions
sca/extension/container/rhino
sca/extension/transport/jsonrpc
sca/extension/data/json
sca/extension/service/jndi
sca/extension/service/jdbc

# host environment integration
sca/host/tomcat/runtime        # integration code
sca/host/tomcat/testing        # integration testing
sca/host/tomcat/win32          # packaging for release
sca/host/j2se/runtime          # etc...

# samples and testing modules that are not part of a developer build
sca/samples/helloworld/j2se
sca/samples/helloworld/war
sca/samples/bigbank
sca/testing/compliance

Thoughts?
--
Jeremy

Reply via email to