Layered build tool

The 'scc' command provided by StrataCode provides many of the same capabilities as a standard build tool like maven or gradle but is designed a bit differently. On the surface, project files are written using Java syntax with StrataCode extensions. A layer directory can be either a typical monolithic project directory, or an overlay on top of the merged contents of the base layers.

These overlay layers are best when each layer has fewer files and higher customization intent. The set of files help define why this layer exists - to help customize it from a previous configuration.

A layer can extend other layers, add maven packages, set properties of the layer, and define methods that run in the: init, start, and validate. Where all layers are first initialized, then started, then validated.

file: servlet/lib/lib.sc
servlet.lib {
   compiledOnly = true;
   hidden = true;

   codeType = sc.layer.CodeType.Framework;

   object servletPkg extends MvnRepositoryPackage {
      url = "mvn://javax.servlet/javax.servlet-api/3.1.0";
   }

   // Runs when the layer is initialized
   public void init() {
      // Exclude this layer from these runtimes. 
      excludeRuntimes("js", "gwt", "android");

      addProcess(ProcessDefinition.create(layeredSystem, "Server", "java", true));
   }

   // override start() to run code once all layers have been initialized
   // override validate() to run code once all layers have been started
}

Evolutionary modularization

Using layers, it's an incremental process to break apart a module into more than one piece, for example factoring out all database or UI so that a new database or UI can be added. This allows you to start with a more monolithic design and refactor as parts need to be reused in a new configuration.

Code-processing

Using Parselets StrataCode can read and modify file formats more easily than with other tools. With an API for the code, framework developers can keep information in sync between components, and provide full-lifecycle tools. For example, to track schema changes, or to determine when cluster configuration has changed and a production update should be deployed.

Multi process systems

Layers can define new processes for the system, and constrain the process they will run. On startup, the layer stack organizes into separate stacks, one for each process. Code-generation and data-sync support seamless RPC - run code as a monolith or as separate services as needed.