A New Framework Project: Moqui

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

A New Framework Project: Moqui

David E. Jones-2

Hello all,

First, I apologize in advance for the somewhat off-topic post.

A few people, but not many, already know that I've been working on a new enterprise application framework over the past couple of months. That framework is not starting to take shape and is called Moqui. You can see the Moqui project on sourceforge, and eventually I'll get the moqui.org web site setup as well (but it isn't yet, just a parked domain for now).

I've been waiting to make it more public until I had designs in place for most of the main ideas, and that is now done. The designs and planning are not yet complete, but are far enough along (and with an example application) that it is at least clear what the framework will be like in a fair amount of detail.

How does this relate to the Apache OFBiz Framework? Why am I doing this as a separate project instead of part of OFBiz?

I guess as Ricky Ricardo used to say, I've "got some 'splainin' to do!" I'll try to keep it short and simple... but then again you probably know my track record on that. ;)

Early in the life of OFBiz there were various points in time where we made dramatic changes to the framework. This was somewhat painful even when the project was small, and you can still see the results of that in OFBiz today with some older code that does not take advantage of newer tools. It may be that part of the problem was that the framework and the applications work together in a single project and while the dividing line between them was fairly clear for a long time it has become harder and harder to say what is really in the framework and what is really in the applications and to keep things in the framework from depending on the applications. If the framework had been in a separate project the applications could have been built on a certain version of the framework, released before updating to a newer version of the framework, and then refactored or rebuilt to use the newer version of the framework.

On the other hand, over time as the applications have grown and the number of organizations using OFBiz have grown, it has become much more difficult to make major changes in the framework because there is so much code that would have to be updated and there are so many people using the code that would have problems because of the updates. In many parts of OFBiz there is backwards compatible code and I think it is impressive that so much backwards compatibility has been maintained. This does have the downside of making the framework, and especially the implementation of the framework, far more complex.

Over the years I've thought about many possible changes to the framework and kept notes on them. There have been a few times when I focused on framework improvements, and for a while after OFBiz joined the Apache Software Foundation I even tried to push a temporary focus on the framework before the size and scope of the applications increased too much more. A lot of great things have been added to the framework in recent years in spite of all of the difficulties and it has been impressive to see the community take up and leverage so many of these changes.

A few months ago I started thinking about another set of changes and looking at how they might be implemented inside OFBiz. Eventually I decided that the changes were too dramatic and it would be much easier to just do them as a separate project. What I have started is a separate open source project that is not part of the Apache Software Foundation. It may take quite a while to get this implemented even to the 1.0 release, and when that happens I hope that either Apache OFBiz will move to use it or another project like OFBiz will be built on it. For now I'm not really worried about that and the focus of the effort is to build a good framework and nothing more. The license of the framework is the Apache License 2.0.

With the Moqui framework I am also planning to structure the community differently. There are many great things about a more open community driven project like OFBiz. For example, it is a great place for innovation and new ideas and collaboration with others to make those new ideas a reality. For me personally I plan to stay involved with OFBiz and for the foreseeable future it is still the main focus of my career. This may seem funny because I have been hostile in the past with OFBiz to the idea of having more restricted control over commits to the trunk, and I certainly haven't jumped on the GIT bandwagon at all. That doesn't mean I don't think it's a good idea in general, I'm just not sure how it would work for something like OFBiz or for any project in the ASF.

However, with this new project I am planning on managing it more like Linux and various other open-source projects are managed. The idea is for everything to go through a single moderator. Contributions from others may be accepted, but never directly and only through the moderator. The project may have multiple moderators each responsible for a different part of the whole, but nothing will go into the project without centralized review. This sort of model does bring up other possible issues but for this sort of software the trade-off is well worth it.

Yesterday I spent some time writing up an overview of the Moqui project and also a comparison of the Moqui framework to the OFBiz framework. For those interested I am including both below.

Out of courtesy for the real intent of this mailing list if you have questions or comments about Moqui please send them to the Moqui Open Discussion Forum instead of sending them to an OFBiz mailing list. This thread on this mailing list will hopefully only have a single message so that the list can focus on what it is meant to.

-David


=============================================================================
The Moqui Framework
=============================================================================

The Moqui Framework is an integrated tool set with everything needed to start
building web-based applications right away. Instead of starting with a set of
tools and figuring out how to use them together and filling in gaps that are
not handled by default Moqui is ready to go right away.

The Moqui Framework includes:

- Database (entity) proxy for data tier
  - Define your entities and go, no code to write and no redundancy
  - Java API or XML tags for a wide variety of queries and common operations
  - Event-Condition-Action rules to do things based on data changes
  - Data import and export tools, including for seed and other setup data
  - Support for Derby, HSQL, PostgreSQL, MySQL, and Oracle OOTB, and easy to
    add support for other databases, usually just through configuration
- Service-based logic tier
  - Call services synchronously, async, or scheduled
  - Services can be local or remote and implemented in a variety of languages
  - Flexible XML service definitions
  - Validation of data type, required or not, regexp, and other constraints;
    validation runs on server and in client with JavaScript library
  - Event-Condition-Action rules to orchestrate high level processes,
    externally change or augment behavior of existing services, and much more
- Screen-base user interface tier
  - Declarative multi-platform screens, text templates, or any combination
  - Generate HTML, XML, PDF (XSL-FO), or drive GWT or Swing screens
  - Screen files and included sets of subscreens in directories with the same
    structure as the application
  - Nested subscreens for multiple levels of tabs or other types of menus
  - Data preparation logic declared with screens to make each screen modular
  - Outgoing transitions point to input processing logic and conditional
    forwarding to other screens or external URLs
  - Forms (single, list), trees, panels, and various other common widgets
- Uses Groovy for scripting and Freemarker for templates (can add others)
- JCR 2.0 (JSR-283) based content and artifact management
- Manage incoming and outgoing email
- Implicit internationalization and easy localization
- Comprehensive security with declarative authorization
  - Settings in the database, separate from implementation artifacts
  - Define run-time inheritable permissions for any artifact in the system
  - Both record level and implementation artifact level security
- Protection from XSS and XSRF threats (uses ESAPI and Antisamy)
- Flexible resource access from files, JCR repository, and many others
- Cache management for framework and application resources
- Logging
- Multi-tenant architecture (single application, one database per tenant)
- Common business data structures and seed data
  - Enumerations and statuses with transitions
  - Units of measure with conversion, including currency
  - Geographic boundaries (legal and arbitrary) and points
  - Time periods and temporal expressions
- Service/logic and data level integration options
- Data migration and mapping tools (especially for to/from XML, to/from db)

The framework features a well-defined Java API that makes it easy to get at
the features listed above, especially in Groovy code. What's even better is
that the Moqui tools are designed to be used in a declarative way so most of
what you need to do will be possible with XML configuration and little or no
code is required, unless you want to of course.

Moqui uses sourceforge.net for various tools. See the Moqui sourceforge site
here:

http://sourceforge.net/projects/moqui/

To access to the source for Moqui through SVN use this URL:

https://moqui.svn.sourceforge.net/svnroot/moqui/trunk/moqui

=============================================================================
The Moqui Framework versus the the Apache OFBiz Framework
=============================================================================

-- ControlServlet, widgets (screen, form, menu, tree):

These tools are now all combined into the XML Screens.

There are no explicit menus and instead there are subscreens and a menu is
automatically generated from the set of subscreens in a screen.

Instead of using the decoration pattern the XML Screens use subscreens to
compose an hierarchy of screens. The subscreens for a screen can be
configured in three different ways for different purposes including: a
directory structure plus defaults for a normal screen/subscreens hierarchy,
an XML element to include screens from other applications or that aren't in
any application, and a database table that allows add-on component to add
a subscreen to an existing screen somewhere else.

It is not an option to have multiple XML Screens in a single file. Each file
represents a single screen to make it easier to see what an application looks
like just by browsing the directory structure, kind of like it is for webapps
with normal templates and such.

Forms and trees are kept in separate files and are simply in-lined
in a screen. It is possible to refer to forms externally using the
screen's file location and the name of the form.

The widgets don't have any style attributes that will be used for HTML
class attributes. There are id attributes in various places, but the intent
is to use automatic id and class elements based on names and types of
elements in the XML Screens and then keep all of the styling in an external
CSS file.

There aren't any AJAX- and HTML-specific elements and attributes. This
goes back to the original intent of the OFBiz widgets and that is to be purely
declarative and platform independent. Many XML Screens elements will be
implemented using AJAX and DHTML, and options to control those or add to them
will be available.

-- MiniLang simple-methods, screen/form/etc actions

All operations from these various places are combined in one XSD file
and are referred to as XML Actions. These are included in various places
using the "actions" and "condition" elements. With this approach there is no
inconsistency for similarly named and designed operations or conditions.

Moqui XML Actions don't have operations that are not frequently used and some
operations are like a combination of various simple-method operations. There
are operations for a few additional things as well, like producing and
consuming XML.

Some operations that are inconsistent in different places in OFBiz, like
calling a service, have all similar features combined into one far more useful
operation.

There is no performFind service needed in Moqui as the entity-find operation
has an element that takes its place, and can be combined with various other
elements of a find by condition for a great deal of flexibility that is
easily usable.

The actions are available in many more places including ECA rules, screen
transitions (like the OFBiz controller request events), and others.

-- Service definitions and implementations

The OFBiz Service Engine is most like the Service Facade in Moqui. There are
many other facades, and for more info see the API Structure section below.

Service names are split into verb and noun parts, which together make up the
service name (ie like: ${verb}${noun}). Services are called with the combined
name and can separate the verb and noun parts of it using a hash mark ('#').

Service parameters in Moqui are like the service attributes in OFBiz.

Service parameters are split into two groups: "in-parameters" and
"out-parameters" so that parameters with the same name can have different
settings going into or coming out of the service.

Parameters in Moqui have hierarchical sub-types for map and collection types.

Parameters have a fairly complete set of validation tags. Those
validation tags will be used for server-side validation when the service is
called, AND when the service is a target on a screen transition it will be
used to generate client-side validation in JavaScript. This validation
is defined once but run in both places.

As mentioned above XML Actions are available in many places, and one of those
places is inside a service definition. With this a service implementation can
be inline inside the service definition or external depending on preference.

-- Entity engine

The OFBiz Entity Engine is most like the Entity Facade in Moqui. There are
many other facades, and for more info see the API Structure section below.

Entity definitions are more streamlined and don't have the less useful
attributes and elements. Primary key fields are designated with an attribute
on the field element instead of using a separate element. The data type
dictionary in Moqui is more simple and better organized than in OFBiz and
the data types available are declared in the XSD for auto-completion help.

The API for dealing with entity values and for queries and such is much more
simple, streamlined, and in a few small cases has additional functionality.
The methods have far more consistent names than in OFBiz, using
create/update/delete everywhere instead of things like store or remove.

Moqui does not have a concept of multiple delegators so the Entity Proxy
configuration file is much more simple. The datasource elements are also far
more simple because all of the database-specific settings are now in the
database configuration file along with the data type dictionary (combined in
one file instead of a separate file for each database).

-- API structure

The Moqui API is clearly separate into interfaces and implementations of
those interfaces. Applications only need to worry about the interfaces part
of the Java code and not the underlying implementation.

All tools in the Moqui framework are available through the ExecutionContext
object, which is created and attached to a thread for each web request,
remotely called service, etc. It keeps the current context for whatever is
running and has a series of facades for each tool in the framework, including
for sevices, entities, screens, localization, logging, caching, user info
and preferences, and so on. Some of the implementations of these interfaces
will be reusable from one thread to another, and others will be created for
each thread.

The API is designed to take advantage of some of the syntax short cuts in
Groovy such as using the dot syntax to start with the Moqui static object and
get down to whatever part of the API you need.

-- Configuration and code layout

In Moqui the framework is one big happy set of tools that works together.
There is no attempt to separate the tools or make them useful on their own.
That was goal at first with OFBiz, but never really worked out very well and
splitting the framework into components caused more difficulty than it helped
things. So, in Moqui it's all one big framework, and one that can be easily
compiled and deployed and so on. The basic idea is that the framework jar
files (api and implementation) on the classpath plus the locaiton of the
runtime directory are all you need to get started. Components can be loaded
through an API or configuration.

Configuration files are meant to come from a runtime directory and are not
spread around the code. There is a default-conf directory in the framework
so that if a configuration file is left out the framework will have a default
to fallback on that will work in most cases.

While Moqui supports multiple webapps, the normal deployment mode will be as
a single big webapp with screen trees from add on components mounted on a
certain path within the big webapp.

-- Content management

Instead of a set of entities and services for content management that are
part of the project Moqui uses the JCR 2.0 interfaces (and by default the
Apache Jackrabbit implementation) for content management. Anywhere there is
a "location" in the API or XML files it can have a prefix of "content://" to
access something from the JCR. This means that code and templates and such
can go there as well.

-- Security: authorization

Moqui uses a set of entities to define user groups, artifact groups, and
permissions for a group of users on a group of artifacts. These are external
settings and support record level permissions too. With this approach there
is no need make the artifacts responsible for permission checking, and no
code changes are required to change permissions when customizing or
maintaining or supporting an application.

There is a tarpit concept in OFBiz that uses the same model as the
permissions for reduced redundancy and more features.

-- I18n and L10n

Internationalization is implicit everywhere in Moqui using natural text in
the default language for a key instead of an artificial identifier. This
reduces redundancy and effort. The localized labels are in a database table
instead of an XML file to perform better (only lookup and cache labels that
are used) and to support per-tenant localizations in a multi-tenant
environment.





Reply | Threaded
Open this post in threaded view
|

Re: A New Framework Project: Moqui

Shi Jinghai
+1 to the new PM style.

在 2010-03-12五的 13:55 -0700,David E Jones写道:

> Hello all,
>
> First, I apologize in advance for the somewhat off-topic post.
>
> A few people, but not many, already know that I've been working on a new enterprise application framework over the past couple of months. That framework is not starting to take shape and is called Moqui. You can see the Moqui project on sourceforge, and eventually I'll get the moqui.org web site setup as well (but it isn't yet, just a parked domain for now).
>
> I've been waiting to make it more public until I had designs in place for most of the main ideas, and that is now done. The designs and planning are not yet complete, but are far enough along (and with an example application) that it is at least clear what the framework will be like in a fair amount of detail.
>
> How does this relate to the Apache OFBiz Framework? Why am I doing this as a separate project instead of part of OFBiz?
>
> I guess as Ricky Ricardo used to say, I've "got some 'splainin' to do!" I'll try to keep it short and simple... but then again you probably know my track record on that. ;)
>
> Early in the life of OFBiz there were various points in time where we made dramatic changes to the framework. This was somewhat painful even when the project was small, and you can still see the results of that in OFBiz today with some older code that does not take advantage of newer tools. It may be that part of the problem was that the framework and the applications work together in a single project and while the dividing line between them was fairly clear for a long time it has become harder and harder to say what is really in the framework and what is really in the applications and to keep things in the framework from depending on the applications. If the framework had been in a separate project the applications could have been built on a certain version of the framework, released before updating to a newer version of the framework, and then refactored or rebuilt to use the newer version of the framework.
>
> On the other hand, over time as the applications have grown and the number of organizations using OFBiz have grown, it has become much more difficult to make major changes in the framework because there is so much code that would have to be updated and there are so many people using the code that would have problems because of the updates. In many parts of OFBiz there is backwards compatible code and I think it is impressive that so much backwards compatibility has been maintained. This does have the downside of making the framework, and especially the implementation of the framework, far more complex.
>
> Over the years I've thought about many possible changes to the framework and kept notes on them. There have been a few times when I focused on framework improvements, and for a while after OFBiz joined the Apache Software Foundation I even tried to push a temporary focus on the framework before the size and scope of the applications increased too much more. A lot of great things have been added to the framework in recent years in spite of all of the difficulties and it has been impressive to see the community take up and leverage so many of these changes.
>
> A few months ago I started thinking about another set of changes and looking at how they might be implemented inside OFBiz. Eventually I decided that the changes were too dramatic and it would be much easier to just do them as a separate project. What I have started is a separate open source project that is not part of the Apache Software Foundation. It may take quite a while to get this implemented even to the 1.0 release, and when that happens I hope that either Apache OFBiz will move to use it or another project like OFBiz will be built on it. For now I'm not really worried about that and the focus of the effort is to build a good framework and nothing more. The license of the framework is the Apache License 2.0.
>
> With the Moqui framework I am also planning to structure the community differently. There are many great things about a more open community driven project like OFBiz. For example, it is a great place for innovation and new ideas and collaboration with others to make those new ideas a reality. For me personally I plan to stay involved with OFBiz and for the foreseeable future it is still the main focus of my career. This may seem funny because I have been hostile in the past with OFBiz to the idea of having more restricted control over commits to the trunk, and I certainly haven't jumped on the GIT bandwagon at all. That doesn't mean I don't think it's a good idea in general, I'm just not sure how it would work for something like OFBiz or for any project in the ASF.
>
> However, with this new project I am planning on managing it more like Linux and various other open-source projects are managed. The idea is for everything to go through a single moderator. Contributions from others may be accepted, but never directly and only through the moderator. The project may have multiple moderators each responsible for a different part of the whole, but nothing will go into the project without centralized review. This sort of model does bring up other possible issues but for this sort of software the trade-off is well worth it.
>
> Yesterday I spent some time writing up an overview of the Moqui project and also a comparison of the Moqui framework to the OFBiz framework. For those interested I am including both below.
>
> Out of courtesy for the real intent of this mailing list if you have questions or comments about Moqui please send them to the Moqui Open Discussion Forum instead of sending them to an OFBiz mailing list. This thread on this mailing list will hopefully only have a single message so that the list can focus on what it is meant to.
>
> -David
>
>
> =============================================================================
> The Moqui Framework
> =============================================================================
>
> The Moqui Framework is an integrated tool set with everything needed to start
> building web-based applications right away. Instead of starting with a set of
> tools and figuring out how to use them together and filling in gaps that are
> not handled by default Moqui is ready to go right away.
>
> The Moqui Framework includes:
>
> - Database (entity) proxy for data tier
>   - Define your entities and go, no code to write and no redundancy
>   - Java API or XML tags for a wide variety of queries and common operations
>   - Event-Condition-Action rules to do things based on data changes
>   - Data import and export tools, including for seed and other setup data
>   - Support for Derby, HSQL, PostgreSQL, MySQL, and Oracle OOTB, and easy to
>     add support for other databases, usually just through configuration
> - Service-based logic tier
>   - Call services synchronously, async, or scheduled
>   - Services can be local or remote and implemented in a variety of languages
>   - Flexible XML service definitions
>   - Validation of data type, required or not, regexp, and other constraints;
>     validation runs on server and in client with JavaScript library
>   - Event-Condition-Action rules to orchestrate high level processes,
>     externally change or augment behavior of existing services, and much more
> - Screen-base user interface tier
>   - Declarative multi-platform screens, text templates, or any combination
>   - Generate HTML, XML, PDF (XSL-FO), or drive GWT or Swing screens
>   - Screen files and included sets of subscreens in directories with the same
>     structure as the application
>   - Nested subscreens for multiple levels of tabs or other types of menus
>   - Data preparation logic declared with screens to make each screen modular
>   - Outgoing transitions point to input processing logic and conditional
>     forwarding to other screens or external URLs
>   - Forms (single, list), trees, panels, and various other common widgets
> - Uses Groovy for scripting and Freemarker for templates (can add others)
> - JCR 2.0 (JSR-283) based content and artifact management
> - Manage incoming and outgoing email
> - Implicit internationalization and easy localization
> - Comprehensive security with declarative authorization
>   - Settings in the database, separate from implementation artifacts
>   - Define run-time inheritable permissions for any artifact in the system
>   - Both record level and implementation artifact level security
> - Protection from XSS and XSRF threats (uses ESAPI and Antisamy)
> - Flexible resource access from files, JCR repository, and many others
> - Cache management for framework and application resources
> - Logging
> - Multi-tenant architecture (single application, one database per tenant)
> - Common business data structures and seed data
>   - Enumerations and statuses with transitions
>   - Units of measure with conversion, including currency
>   - Geographic boundaries (legal and arbitrary) and points
>   - Time periods and temporal expressions
> - Service/logic and data level integration options
> - Data migration and mapping tools (especially for to/from XML, to/from db)
>
> The framework features a well-defined Java API that makes it easy to get at
> the features listed above, especially in Groovy code. What's even better is
> that the Moqui tools are designed to be used in a declarative way so most of
> what you need to do will be possible with XML configuration and little or no
> code is required, unless you want to of course.
>
> Moqui uses sourceforge.net for various tools. See the Moqui sourceforge site
> here:
>
> http://sourceforge.net/projects/moqui/
>
> To access to the source for Moqui through SVN use this URL:
>
> https://moqui.svn.sourceforge.net/svnroot/moqui/trunk/moqui
>
> =============================================================================
> The Moqui Framework versus the the Apache OFBiz Framework
> =============================================================================
>
> -- ControlServlet, widgets (screen, form, menu, tree):
>
> These tools are now all combined into the XML Screens.
>
> There are no explicit menus and instead there are subscreens and a menu is
> automatically generated from the set of subscreens in a screen.
>
> Instead of using the decoration pattern the XML Screens use subscreens to
> compose an hierarchy of screens. The subscreens for a screen can be
> configured in three different ways for different purposes including: a
> directory structure plus defaults for a normal screen/subscreens hierarchy,
> an XML element to include screens from other applications or that aren't in
> any application, and a database table that allows add-on component to add
> a subscreen to an existing screen somewhere else.
>
> It is not an option to have multiple XML Screens in a single file. Each file
> represents a single screen to make it easier to see what an application looks
> like just by browsing the directory structure, kind of like it is for webapps
> with normal templates and such.
>
> Forms and trees are kept in separate files and are simply in-lined
> in a screen. It is possible to refer to forms externally using the
> screen's file location and the name of the form.
>
> The widgets don't have any style attributes that will be used for HTML
> class attributes. There are id attributes in various places, but the intent
> is to use automatic id and class elements based on names and types of
> elements in the XML Screens and then keep all of the styling in an external
> CSS file.
>
> There aren't any AJAX- and HTML-specific elements and attributes. This
> goes back to the original intent of the OFBiz widgets and that is to be purely
> declarative and platform independent. Many XML Screens elements will be
> implemented using AJAX and DHTML, and options to control those or add to them
> will be available.
>
> -- MiniLang simple-methods, screen/form/etc actions
>
> All operations from these various places are combined in one XSD file
> and are referred to as XML Actions. These are included in various places
> using the "actions" and "condition" elements. With this approach there is no
> inconsistency for similarly named and designed operations or conditions.
>
> Moqui XML Actions don't have operations that are not frequently used and some
> operations are like a combination of various simple-method operations. There
> are operations for a few additional things as well, like producing and
> consuming XML.
>
> Some operations that are inconsistent in different places in OFBiz, like
> calling a service, have all similar features combined into one far more useful
> operation.
>
> There is no performFind service needed in Moqui as the entity-find operation
> has an element that takes its place, and can be combined with various other
> elements of a find by condition for a great deal of flexibility that is
> easily usable.
>
> The actions are available in many more places including ECA rules, screen
> transitions (like the OFBiz controller request events), and others.
>
> -- Service definitions and implementations
>
> The OFBiz Service Engine is most like the Service Facade in Moqui. There are
> many other facades, and for more info see the API Structure section below.
>
> Service names are split into verb and noun parts, which together make up the
> service name (ie like: ${verb}${noun}). Services are called with the combined
> name and can separate the verb and noun parts of it using a hash mark ('#').
>
> Service parameters in Moqui are like the service attributes in OFBiz.
>
> Service parameters are split into two groups: "in-parameters" and
> "out-parameters" so that parameters with the same name can have different
> settings going into or coming out of the service.
>
> Parameters in Moqui have hierarchical sub-types for map and collection types.
>
> Parameters have a fairly complete set of validation tags. Those
> validation tags will be used for server-side validation when the service is
> called, AND when the service is a target on a screen transition it will be
> used to generate client-side validation in JavaScript. This validation
> is defined once but run in both places.
>
> As mentioned above XML Actions are available in many places, and one of those
> places is inside a service definition. With this a service implementation can
> be inline inside the service definition or external depending on preference.
>
> -- Entity engine
>
> The OFBiz Entity Engine is most like the Entity Facade in Moqui. There are
> many other facades, and for more info see the API Structure section below.
>
> Entity definitions are more streamlined and don't have the less useful
> attributes and elements. Primary key fields are designated with an attribute
> on the field element instead of using a separate element. The data type
> dictionary in Moqui is more simple and better organized than in OFBiz and
> the data types available are declared in the XSD for auto-completion help.
>
> The API for dealing with entity values and for queries and such is much more
> simple, streamlined, and in a few small cases has additional functionality.
> The methods have far more consistent names than in OFBiz, using
> create/update/delete everywhere instead of things like store or remove.
>
> Moqui does not have a concept of multiple delegators so the Entity Proxy
> configuration file is much more simple. The datasource elements are also far
> more simple because all of the database-specific settings are now in the
> database configuration file along with the data type dictionary (combined in
> one file instead of a separate file for each database).
>
> -- API structure
>
> The Moqui API is clearly separate into interfaces and implementations of
> those interfaces. Applications only need to worry about the interfaces part
> of the Java code and not the underlying implementation.
>
> All tools in the Moqui framework are available through the ExecutionContext
> object, which is created and attached to a thread for each web request,
> remotely called service, etc. It keeps the current context for whatever is
> running and has a series of facades for each tool in the framework, including
> for sevices, entities, screens, localization, logging, caching, user info
> and preferences, and so on. Some of the implementations of these interfaces
> will be reusable from one thread to another, and others will be created for
> each thread.
>
> The API is designed to take advantage of some of the syntax short cuts in
> Groovy such as using the dot syntax to start with the Moqui static object and
> get down to whatever part of the API you need.
>
> -- Configuration and code layout
>
> In Moqui the framework is one big happy set of tools that works together.
> There is no attempt to separate the tools or make them useful on their own.
> That was goal at first with OFBiz, but never really worked out very well and
> splitting the framework into components caused more difficulty than it helped
> things. So, in Moqui it's all one big framework, and one that can be easily
> compiled and deployed and so on. The basic idea is that the framework jar
> files (api and implementation) on the classpath plus the locaiton of the
> runtime directory are all you need to get started. Components can be loaded
> through an API or configuration.
>
> Configuration files are meant to come from a runtime directory and are not
> spread around the code. There is a default-conf directory in the framework
> so that if a configuration file is left out the framework will have a default
> to fallback on that will work in most cases.
>
> While Moqui supports multiple webapps, the normal deployment mode will be as
> a single big webapp with screen trees from add on components mounted on a
> certain path within the big webapp.
>
> -- Content management
>
> Instead of a set of entities and services for content management that are
> part of the project Moqui uses the JCR 2.0 interfaces (and by default the
> Apache Jackrabbit implementation) for content management. Anywhere there is
> a "location" in the API or XML files it can have a prefix of "content://" to
> access something from the JCR. This means that code and templates and such
> can go there as well.
>
> -- Security: authorization
>
> Moqui uses a set of entities to define user groups, artifact groups, and
> permissions for a group of users on a group of artifacts. These are external
> settings and support record level permissions too. With this approach there
> is no need make the artifacts responsible for permission checking, and no
> code changes are required to change permissions when customizing or
> maintaining or supporting an application.
>
> There is a tarpit concept in OFBiz that uses the same model as the
> permissions for reduced redundancy and more features.
>
> -- I18n and L10n
>
> Internationalization is implicit everywhere in Moqui using natural text in
> the default language for a key instead of an artificial identifier. This
> reduces redundancy and effort. The localized labels are in a database table
> instead of an XML file to perform better (only lookup and cache labels that
> are used) and to support per-tenant localizations in a multi-tenant
> environment.
>
>
>
>
>