Moqui Framework Release Notes
===========================================================================
Release 1.2.0 - 30 Dec 2012
===========================================================================
Moqui Framework release 1.2.0 is a minor new feature release and a major
quality improvement release. This release has undergone significantly more
testing than previous releases because of a wider variety of functionality
that has now been built and tested using the framework, and because of a
unit testing effort (framework unit tests built using Spock).
The new features include popup menus (using the new jQueryUI menu widget),
dynamic-options in XML Form drop-downs with dependency on other fields,
automatic optimization of queries on view-entities to old select member
entities necessary, support for UUID generated primary keys, expanded JCR
support and an Example Content screen, and a number of small improvements
that generally make the framework easier to use and more reliable.
There are some non-backward-compatible changes in this release including
elimination of id-very-long from the data type dictionary (expanding the id
and id-long types), change to database configuration of subscreens to be
based on UserGroup instead of the individual UserAccount (this is a
primary-key change and may require a database metadata update and data
migration), and context isolation for service calls.
This release includes:
- Updated jQuery to 1.8.3 and jQuery UI to 1.9.2
- Updated Apache Camel to 2.10.1, Apache Derby to 10.9.1.0, Apache
Jackrabbit to 2.5.2, Apache Shiro to 1.2.1, ehcache to 2.6.0, Groovy to
2.0.5, OWASP ESAPI to 2.0.1, Quartz Scheduler to 2.1.6, and WikiText to
1.8.0 (20121130)
- Support for Spock specification and unit testing framework run with the
gradle "test" task, and a few entity, service, user, and resource tests
- XML Screens
- Added popup type subscreens menu using new jQuery UI Menu widget to
help compress header into single row of menus instead of layers of tabs
- Moved JS file reference to webroot.xml instead of in the theme; all
themes need them, and they are more closely related to HTML generated
- Added subscreens.always-use-full-path attribute to use the full path in
menus and such instead of minimal path; helpful for wiki and other
screens that use relative URLs that are not based on the screen path
- More support for configuring case-insensitive order-by
- Added dynamic-options for drop-down to get options from a server
request via AJAX request and can depend on other field(s) to use as
parameters and triggers for updating options on change, including
example in the EditExample screen
- Added text-line.@format attribute like display.@format
- Field values are not automatically converted to strings before going
to the FTL file for more control over formatting
- Added screen.always-actions element with actions that will run
whenever the screen is in the path, whether rendered or not, and
before both rendering screens and running transitions
- After login and other screen-last redirects parameters declared on the
screen are now included in the URL and not just in the session
- Service Facade
- Inline and script services can leave out parameter values in the
context and they will be picked up, instead of setting explicitly in
result Map
- When auto-parameters has an entity-name specified the generated
parameters will have entity-name and field-name attributes, and the
auto-fields-service now looks for those to do better fields based on
the entity field details
- Entity Facade
- Added datasource.@startup-add-missing option; set to true to check
tables for all entities in the database on startup and create missing
ones
- Added database.@use-schema-for-all option; set to true to include the
schema name for non-table meta data (constraints, indexes, etc)
- Entity find on a view-entity now automatically determines which
member-entities to join in based on the fields selected, in order by,
and in conditions; with this in place the need for DynamicViewEntity is
minimal because you can just select the relevant fields and not worry
about tables being joined in to the query that are not needed; this
makes it much easier to write queries that will run well on large
databases
- Support for java.util.UUID sequenced primary IDs; can be configured
per-entity and/or per-datasource
- Added eeca.@get-entire-entity attribute to make sure we have the entire
record and not just PK fields before doing update and delete ops
- Improved handling and options for binary/blob fields
- Resource Facade
- ExampleContent entity and corresponding screen that supports
uploading and downloading JCR content
- Support for username and password for remote JCR repository access
- Added ResourceReference.findChildFile() method to replace the code
used only for subscreen references, expand that functionality and make
it reusable for wiki content, etc
- Added methods to ResourceReference for writing to the resource
- Wiki template renderer gets linkBaseUrl from ScreenRender
- Added DbResourceReference and the DbResource/File entities to have a
filesystem like data store in the database and accessed through the
Resource Facade like any other (file, jcr/content, etc)
- Fleshed out ValidationError functionality including display in apps.xml
and considering the ec.message.validationErrors list for storing error
details in session between redirects, and changed entity and service
validation to add ValidationErrors instead of plain error Strings
- Added MessageFacade.hasError() method to check for error messages or
validation errors, and more reliably handle future forms of errors
- Screen in Tools app for SQL Query Run/View
- Improved classpath overrides for configuration and such in the
runtime/classes directory for both add-runtime/addRuntime and executable
WAR file deployment approaches
- EntityCondition has all JoinOperator and ComparisonOperator vales in it
for convenience
Non-backward-compatible changes:
- Removed id-very-long entity field type and increased default length of id
type to 40 and id-long type to 255.
- Changed *SubscreensItem.userId* to *userGroupId* for greater flexibility
setting up subscreen structures and menus
-- this is consistent with how other database-driven artifacts are
structured
-- to have a record apply to all users use the ALL_USERS userGroupId that
all users are automatically a member of
-- for migrating other data a user will have to be a member of a group and
that group can be a single-user group or you can simplify existing data
by consolidating users into groups that have the same subscreens
- Local service calls (inline, java, and script) now run with an isolated
context so that fields from whatever called the service are not
available in the service (which would cause things to work when they
really shouldn't and wouldn't work if it was called remotely)
-- make sure to retest all service calls as there could be hidden bugs
where a service worked because whatever called it had certain fields
Bug Fixes:
- Fixed bug where secondary sequenced ID (setSequencedIdSecondary() method)
was not finding IDs of existing records causing conflicting IDs to be
generated
- Fixed bug with EntityFindBase.updateAll() to not use EntityListIterator
as it caused problems trying to update records with the ResultSet open
- Added support for @confirmation attribute for hidden-form type links
- Fixed issue where transition.path-parameter values were not making it
into the context since parameters were already added to the context
- Fixed issue in Data View screen with related entities using the full
entity name (name with package)
- Updated startup in embedded mode to put jar files in a local temporary
directory and build files to delete it just in case it doesn't get
cleaned up on exit; should solve problem with dirty exit leaving temp
files in the OS temporary file location which can be hard to find
- Fixed JCR repository connection, using RMI instead of DavEx by default
(requires fewer jars for client while retaining full functionality)
- Fixed repository name and content path reference for JCR content in the
ContentResourceReference class
- Fixed file upload temporary file being deleted before being accessed/used
- Fixed link with link-type=hidden-form within a form-single to not produce
HTML with nested form elements
- Fixed anonymous-all and anonymous-view authenticate options for services
and screens to login as the _NA_ user so the called services requiring
authentication and permission will run as expected
- Fixed display.@currency-unit-field attribute handling
- Fixed XML Actions filter-map-list operation, wasn't quoting field names
- Fixed bug where authorization failures were getting logged but not
throwing an exception to stop operations
- Fixed issue where the root screen was not added to the screenPathDefList
causing incorrect push on the artifact facade's stack
- Fixed issue where the last statement of XML Actions might have been
unintentionally considered to be the return/result Map
- Fixed issue with multi (multi-row) service calls where parameters shared
between rows caused an attempt to process an additional non-existent row
- Changed screen transition transaction handling to rollback on error
- Fixed phantom parameter issue where declared parameters got a null value
in the parameters to a service even if no null was passed in
- Changed the ContextStack.containsKey() to not always return true and
added ContextBinding.java which extends groovy.lang.Binding and is used
for all Groovy script running to do the same thing without all the
side-effects; this fixes a number of bugs
- User login now works outside a web context
- Fixed authz and tx issues with user preferences
- Fixed issue with LocalizedEntityField because the code was still looking
for the basic entity name and not the full entity name
- Fixed issue with parsing locale from the database to include separate
language and country codes (was ignoring the country)
- Fixed bug on ServiceRun screen where parameters were not getting passed
- Fixed bug where group-by clause was missing on EntityFind.one() calls
- Fixed issues with ResourceReference directory listings where filenames
have spaces in them
- Fixed bug in service parameter text-length.@max checking
- Fixed bug where a cached one query on non-PK fields with no result would
not be automatically cleared
- Fixed bug where request to a rile resource under a screen that requires
authc would result in a redirect to the file resource
- Fixed bug in UrlResourceReference with cached exists not picking up
created files; now only uses cached exists if it is true
- Fixed handling of transition actions (or service-call) output where a Map
was pushed on the ContextStack and then popped, eliminating the output
from the actions
- Fixed object formatting in XML Screen/Form output, now done in a groovy
method instead of with ?string in FTL which produced undesirable results
in many scenarios
===========================================================================
Release 1.1.1 - 22 Sep 2012
===========================================================================
The 1.1.1 release of Moqui Framework is primarily a bug fix release. While
a few issues have been fixed the most important one for those just trying
Moqui is the explicit sorting of files by name during data loading which
addresses an issue on Linux servers where the files in a directory listing
through the Java File API can come back in any order.
Minor new features include DB configured User Fields on entities, host name
based tenant selection, and an easier way to specify default themes.
This release includes:
- User Field support for transparent user-defined fields with a definition
in the database (using the UserField entity) and values for the fields
isolated to groups of users stored in a separate table (using the
UserFieldValue entity)
- Option to specify a default tenantId for a given host name
(request.getServerName()) in the database, using the TenantHostDefault
entity for deployment of tenants with a virtual host approach
- Can now specify the default screenThemeId for a ScreenThemeType
Enumeration record using the Enumeration.enumCode field
Bug Fixes:
- fixed data file load order to explicitly sort files in data directories
alpha-numerically; on some systems this is the way they came back in
directory listings but not all, causing inconsistent behavior without
this explicit sorting (symptom is FK errors in data load)
- fixed incorrect link paths for ArtifactHitBins and ArtifactSummary PDFs
- when no transaction is in place using current system time for the
automatically populated lastUpdateStamp field
- changed SpeedTest.xml screen to run in a transaction
- fixed issue in Auto Screens where the entityName and detailEntityName
parameters were conflicting with field names on certain entities
- fixed class cast exception for form-list when using the
auto-fields-entity element with @field-type=find-display
- fixed and improved screen menu title defaults, especially for subscreens
added by subdirectory files
- fixed issue with isPermitted() call when determining if screens with
require-authentication=false should be included in the menu; they were
showing an error and not getting added to the menu but now they do get
added because no authz is necessary to access them
===========================================================================
Release 1.1.0 - 22 July 2012
===========================================================================
Version 1.1.0 includes various bug fixes and library updates. It is also a
minor new feature release with added functionality for anonymous authz,
enhanced JSON and REST web service support, XML Form extension with
database records (DbForm* entities) for all users or particular users, and
an Apache Camel integration with Camel running embedded.
This version also replaces the only LGPL library (Restone XML-RPC) in Moqui
Framework with an Apache licensed library (Apache XML-RPC). This makes
Moqui compatible with licensing requirements for projects that are part of
the Apache Software Foundation (including Apache OFBiz).
This release includes:
- Updated *.gradle build files for the recently released Gradle 1.0
- Added configuration for MS SQL Server database
- Replaced Redstone XML-RPC library with Apache XML-RPC to eliminate the
LGPL library so that Moqui can be used in Apache and similarly licensed
projects (including Apache OFBiz)
- Updated Apache Derby to 10.8.2.2, Apache Jackrabbit to 2.4.1, Apache
Log4J to 1.2.17, Apache Shiro to 1.2.0, Atomikos to 3.8.0, ehcache to
2.5.2, FreeMarker to 2.3.19, Groovy to 2.0.0, Quartz Scheduler to
2.1.5, SLF4J to 1.6.5
- Updated jQuery to 1.7.2, jQuery UI to 1.8.21, Validate to 1.9.0, and
Timepicker to 1.0.0
- Tested with latest version of Apache Tomcat (7.0.27)
- Methods on ArtifactExecutionFacade and options on the authenticate
attribute on the service definition and the require-authentication on the
screen definition to make the current artifact anonymously authorized
- Web Facade
- JSON representation of a Map sent in an HTTP Request body is treated as
additional request parameters (must have a header of "Content-Type:
application/json")
- If auth* parameters are passed in a JSON body, multi-part body
parameters, or in body parameters when there are no URL parameters
(query string), then automatically logs in user (similar to behavior of
HTTP Basic Authorization with the Authorization header)
- Based on the various new features for REST, JSON, and better support of
Web standards, added examples of the use of screen transitions for JSON
over REST services; see the ExampleApp.xml file
- Screen Facade
- Added support for declared path-parameters in the URL path under a
transition (especially useful for simulating a resource at a URL)
- Implemented initial version of DbForm feature with support for
extending forms defined in XML Screen files; includes example extending
the UpdateExample form on the EditExample screen; for details see the
DbForm and related entities, and the example in the ExampleTypeData.xml
- Service Facade
- Embedded Apache Camel, currently used in the ServiceFacade to transport
service calls using many different standards, plus Camel routing for
more flexible system integration
- CamelServiceRunner so that Moqui services can just send a Camel message
- Camel component, endpoint, and producer for receiving Moqui service
calls through camel (with URI like "moquiservice:package.serviceName")
- Example Moqui service that sends a Camel message, and example service
that service calls through the Moqui Camel Endpoint (Producer)
- Support for nested parameter elements in service definitions for
Map and Node (groovy.util.Node) parameters; the main reason for Node
support is for XML messages coming in such as the OAGIS ones to be
handled directly by a service (this is one part of Mantle)
- Added option to service-call tag to send result as a JSON response
using the WebFacade.sendJsonResponse() method
- Service database-driven semaphores to avoid multiple instances of the
same service running at the same time
- Entity Facade
- View entity member-entity.entity-condition for conditions on joins
- View entity alias.complex-alias implemented for formulas in queries
- Added "cursor" option for the database.@offset-style attribute for
databases that do not support the offset/limit or fetch syntax
variations; using this option will result in an EntityListIterator
being used instead of letting the database handle the partial results
- Added EntityDatasourceFactory interface and object-factory attribute
to the entity-facade.datasource element in the moqui-conf XML file;
the default implementation is for JDBC/SQL databases, and other
implementations can be used for other data sources
- Refactored EntityValueImpl and EntityFindImpl to create abstract base
classes that can be extended to more easily create custom datasource
interfaces for the Entity Facade
- There is an add-on component that uses this custom datasource facility
to add support for OrientDB, and other NoSQL and alternative
datasource interfaces will be added as add-ons over time
Bug Fixes:
- Fixed bug in script template for XML Actions calling a script at a
location (was missing quotes around the location)
- Fixed bug where XML Actions and groovy script locations were not being
cleaned before using as class names for groovy compiled classes
- Fixed Entity Audit Log bug where fields not set were considered null and
therefore were considered changed to null and logged as such
- Fixed NPE when calling update() on an EntityValueImpl with no changes
- Fixed NPE when there is an error in a request and the web.parameters,
web.requestAttributes, and web.requestParameters have not been used
- Fixed authz issue when calling service with auth* parameters
(UserAccount, Username, Password, and TenantId) so that login is done
before the first authz check to avoid guaranteed failure
- Fixed WebFacade.sendJsonResponse() to return ec.messages.errors if there
are errors instead of ignoring them
- Fixed issue in L10nFacadeImpl (also used for service parameter automatic
type conversions) where Time and Timestamp parsing required sub-second
value; now parses strings without sub-seconds as well
- Fixed bug where service definition was not found if it had no noun
attribute even if service name matched the verb
- Fixed invalid HTML with a form elements between the table and td elements
by using styled div elements and the "display: table*" CSS attributes
===========================================================================
Release 1.0.1 - 31 December 2011
===========================================================================
Version 1.0.1 is primarily a maintenance and bug fix release. The few new
features are mostly extensions to existing features for improved
flexibility, to round out functionality, and better support standards.
This release includes:
- All the great features of the 1.0.0 and previous releases
- Updated Gradle build file for version 1.0-milestone-6 (previously ran on
1.0-milestone-3)
- Added support to automatically clear caches for view-entity based in
updates to member-entity records, as long as all member-entity PK fields
are directly or indirectly aliased on the view-entity
- Improved entity-auto service error handling
- Changed login screen to render in the same request instead of a redirect
and to return a status code of 401 (related to bug #3442045)
- Made form field sub-fields more flexible, can include any widget tag
under them now; this has been tested with render-mode and should work
with others as they just run the corresponding macro for the widget
element, but your mileage may vary
- Added support for a classes directory under the runtime directory, and
under each component directory to go along with the lib directories so
that classpath resources do not have to be in a jar file
- Added support for JSR-223 (javax.script) compatible scripting languages
through configuration only (in moqui-conf file) so no ScriptRunner
interface implementation is needed for these
- Added support for JavaScript (.js) server-side scripts through
javax.script interface
- Added support for StartTLS and SSL to sendEmailTemplate service, based
on the configuration in the EmailServer record
Bug Fixes:
- Removed emailTypeEnumId from the PK of the EmailMessage entity, it
should not have been there and is not needed (or wanted); this PK
change will require modifying or rebuilding that table in existing
systems
- Fixed issue with handling entities in different packages that have the
same name
- Instead of submit buttons always having name=submit, they now use the
name of the XML Form field; to see if one button or another was pressed
just check to see if the parameter was passed; also changed all submit
field names to submitButton to avoid conflict with standard DOM function
"submit" for form elements (thanks to Vasanth for reporting this)
- Fixed bad reference to ComparisonOperator in DateCondition class
- Fixed issue with settings nulls in an entity-auto update service or
anywhere the dbValueMap is not populated from the database
- Fixed bug (#3442014) with funny FTL eval of label.@encode attribute
- Fixed issue with ResourceFacade classpath:// URLs that were not using
thread's context ClassLoader, and so weren't finding classpath entries
in runtime or component lib and classes directories
- Fixed issue with ResourceReference, TemplateRenderer, ScriptRunner,
ServiceRunner, and Java service implementation class loading to use the
current Thread's context ClassLoader which will get the component and
runtime lib and classes resources
- Fixed issue where automatic reverse relationship did not work for full
entity names
- Fixed issue with findRelated and findRelatedOne when forUpdate is null
- Fixed bug in StupidUtilities.basicConvert so that String to Boolean
conversions do not use the default groovy non-empty rule for true, ie
so that the string "false" will actually evaluate to false
- Fixed service parameters validation to not treat false boolean values as
empty values (ie we can't use groovy non-empty definition for Booleans)
- Fixed permission issue in resetPassword service
===========================================================================
Release 1.0.0 - 21 November 2011
===========================================================================
Here it is, the initial production release of the 1.0 series. This release
includes various fixes and new features to facilitate easy use based on
more extensive testing and real-world development using the framework.
More examples of different patterns exist in Moqui Framework itself, as
well as in add-on projects including Mantle, POP Commerce, and so on.
This release includes:
- All the great features of the preview, beta and rc1 releases
- For field name pattern consistency changed GeoAssoc.geoIdTo to toGeoId,
StatusValidChange.statusIdTo to toStatusId, and UomConversion.uomIdTo to
toUomId
- Added support to skip stats tracking based on a conditional expression
- More performance profiling and improvements
- entity-auto update and delete services no longer do a find first
- various frequently used objects are cached in UserFacade, especially
those used for authz and tarpit, making many things faster and cached
queries around 4 times faster than the already optimized speed
- many small performance improvements, changes to get around Groovy and
Java quirks
- Change components to load in reverse of order initialized (later
components override earlier ones)
- Increased text field sizes (short to 63, medium to 255, long to 4095)
- Changed a bunch of fields from text-long to text-medium that are either
primary-key fields, or that don't need to be so long, or in entities
where there are too many text-long fields
- User Facade
- Added support for login via HTTP Basic Authorization, mostly for
things like RESTful services and support for clients using it
- Entity Facade
- Allow (optional) reference of entity by package-name + entity-name,
- Change framework to reference all its entities by fully qualified name
- Allow separator (hash) between title and related-entity-name in
relationship name now that related-entity-name may be packages and
such, and looks funny
- Primary sequenced ID banking for better performance when creating
records with sequenced single field primary key (default bank size 50)
- Change lastUpdatedStamp to tx timestamp to sync/export/etc data without
splitting transactions
- Supports seed-data element in entity and extend-entity elements so
that seed data can be defined and managed along with entity definitions
- Option to disable Entity ECAs during data load
- Isolate cache clearing failures, don't ever kill calling method (ie
never throw an exception/throwable)
- Screen Facade
- Filter menu rendering by authorization
- List multi form submit button below and not in own column
- Allow field, auto-fields-entity, and auto-fields-service to appear in
any order and preserve that order when exploding the form definition
- Auto Screen move Edit button on list forms to left side
- If form transition has a single service (service-call instead of
actions elements) then automatically use that service for validation
information for fields with matching name
- Improved handling of context and error parameters to more cleanly and
easily repopulate forms after a server-side error
- Example (/echopath) of handling "path info" beyond screen or transition
in request path
- Added support for other types of wiki files including MediaWiki, Textile,
TracWiki, and TWiki (in addition to Confluence)
===========================================================================
Release 1.0-rc1 - 3 August 2011
===========================================================================
The first 1.0 release candidate of the Moqui Framework (version 1.0-rc1)
was released on 3 August 2011.
This release includes various small new features based on feedback and
actual use, including Apache Shiro for security (authc and authz), build
using Gradle which supports Maven repositories and with directory layout
changed to follow Maven conventions, the ability to run arbitrary SQL and
get the results back in an EntityListIterator, and the Data View tool that
allows users to build queries and data exports on the fly.
This release candidate also includes improvements based on more testing,
including performance testing and profiling to dramatically increase the
speed of various operations, especially those done frequently.
As a release candidate from this point only minor changes are expected
before the 1.0 final production-ready release.
This release includes:
- All the great features of the preview releases, 1.0-beta1, and 1.0-beta2
- More testing and bug fixes
- Various performance improvements based on profiling (thanks to preview
licenses for YourKit and JProfiler)
- Updated all libraries with updates available as of 15 July 2011
- Changed build to use Gradle instead of Ant
- Support for multiple root screens determined by host name using regexp,
or in other words virtual host support
- UserPreference records refined so that keys can be defined with
Enumeration records, but don't have to be
- Some changes to better support the Mantle UDM (Universal Data Model),
including better automatic foreign key names, looking for a "mantle"
directory under the runtime directory where the mantle components can go
(can actually have the GIT checkout of mantle right there)
- Added a UserGroup (ALL_USERS) that all users are automatically members of
- Security: tightened permissions, using the entity.@authorize-skip much
less by adding disable/enableAuthz calls to framework code, and adding an
authorization for users to view their own UserAccount record.
- Directory structure and build changes to simplify and be more consistent
with de-facto standards from Maven/Gradle/etc
- Small changes to make it easier to include the runtime directory inside
the deployed war file.
- Resource Facade
- Added ScriptRunner interface to allow for easily adding scripting
languages to be supported by the ResourceFacade
- User Facade
- Incorporated Apache Shiro, which is now used for all authentication in
Moqui, by default through the MoquiShiroRealm and other realms such
as for LDAP or ActiveDirectory can be configured with shiro.ini
- Permission model and checking for simple/flat permissions (to be used
as an alternative to artifact authz)
- Run permission and role (UserGroup) checks through Shiro realm
- Entity Facade
- Manual SQL find with results mapped to entity with results returned in
an EntityListIterator (EntityFacade.sqlFind())
- Database-driven view entity
- view-entity: merge the view-link element into the member element (also
for DynamicViewEntity, DbViewEntity, *DbView screens)
- Service Facade
- Added entity-auto support for the verb "store" which does a create if
record does not exist and update if it does
- Support of pre-configured scheduled job exists, see:
http://www.quartz-scheduler.org/docs/cookbook/JobInitPlugin.html
- Artifact Execution Facade
- Persist data about authz failures (in ArtifactAuthzFailure entity)
- Artifact Tar-pitting based on configuration in db (see example
moqui.security.ArtifactTarpit in ExampleSecurityData.xml)
- Support authorization checks through Shiro realm
- Tools Screens
- Auto Screen
- Order by links in column headers by default (by default for all
auto fields entity as well)
- Data View
- Choose master entity, select fields from all related entities, save
as DbViewEntity and related records
- Specify functions for selected fields
- Choose column(s) to order by
- Specify search constraints
- View in webapp
- Export to CSV
- Service
- Select and run service from form based on service definition
===========================================================================
Release 1.0-beta2 - 30 May 2011
===========================================================================
The 1.0-beta2 release includes a number of new tools, most notably the Auto
Screen UI that creates a user interface based on entity and relationship
definitions for master entities, and tabs for the detail and associated
entities of each. This release also includes a number of smaller new
features and bug fixes found while building a variety of functionality
with Moqui Framework. One notable example of that is automatic or explicit
alternate screen selection based on the HTTP request User-Agent header, and
there is an example of alternate screens for the iPad.
Overall release 1.0-beta2 is more robust, functional, and reliable than the
previous release.
This release includes:
- All the great features of releases 1.0-preview1 to 1.0-beta1
- Changed so that web.requestParameters Map is automatically added to the
context when it is initialized for the web (helps reduce dependency in
code on web-specific stuff, ie ec.web.requestParameter references)
- L10nFacade: moved number and date/time parsing and formatting methods
from UserFacade to L10nFacade
- TransactionFacade: changed suspend() and resume() methods to better use
internal stack of suspended transactions for consistency and a simpler
API; also added stack of Exception to track where transactions are
suspended for easier finding of lock wait timeout types of errors
- Moved MoquiDefaultConf.xml from framework/api to framework/impl since it
contains a lot of implementation-specific configuration
- Updated Atomikos TransactionsEssentials to 3.7.0 and ehcache to 2.4.1
- Support <component>/lib and runtime/lib jar loading in a cached and
extended/extensible ClassLoader
- Screen transition now supports restriction by HTTP request method
- Trim stack traces to not include Groovy proxy/etc calls (Sam's idea);
implemented for now in BaseException, will use in other areas over time
- Changed Example entities and seed data to follow pattern to be used in
Moqui and Mantle where the relationship.title is the enumTypeId or the
statusTypeId
- XML Screens
- Dynamic transition name handling (support regex transition names)
- Specify macro template in screen def to override default in moqui-conf
- Template for xsl-fo render mode
- Added support for drop-down.entity-options in Screen Form
- Auto create drop-downs for fields with a relationship to Enumeration
using relationship.title as the enumTypeId, check to see if is valid
enumTypeId before creating drop-down
- Auto create drop-downs for fields with a type one relationship, with
limit of 200 to avoid crazy drop-downs
- Choose default subscreen (override by path) based on user agent or
other condition (using any data available in the ec)
- Override login path in screen (use value from deepest screen in path)
- Resource Facade
- Method for FOP transform to PDF, etc
- Support .gstring templates (groovy.codehaus.org/Groovy+Templates)
- Entity Facade
- More intelligent group by fields, ie add all fields in view-entity and
DynamicViewEntity to group by list if they don't have a function; with
support for this get rid of alias.@group-by attribute, not needed when
done automatically
- Entity Master data export (master record and all dependent records)
- Entity and Dependents export: if an entity is a dependent of another,
and of the master then export it after the other entity it is a
dependent of
- Tools Screens
- Auto Screen
- Master Entity List (entities with dependents)
- AutoFind Screen (find, create, delete master entity records)
- AutoEditMaster (tab to edit master entity record)
- AutoEditDetail (tab for each dependent entity with CrUD)
- Entity
- Entity Data UI
- entity list
- find on entity with delete
- create/update entity record
- view entity record with related entities and links to them
- Entity Data Import screen
- Entity Data Export screen
===========================================================================
Release 1.0-beta1 - 01 Apr 2011
===========================================================================
The 1.0-beta1 release is the first feature-complete release for the 1.0
series. Various tools screens that may be included in the 1.0-final release
are not yet complete, but the framework itself is feature-complete.
Following this release the focus for the framework shifts from
implementation to testing and to building applications and tools based on
it (in Moqui Framework, Moqui Mantle, and in other Moqui-based projects).
This release includes:
- All the great features of releases 1.0-preview1 to 1.0-preview3
- Changed UserAccount so that userId is internal/sequenced and a new
username field is used for auth/login
- Seed data changes to follow the Mantle pattern where enumTypeId is the
same as entity.relationship.@title for Enumerations
- XML Screens
- Screen form-list form-list-column support
- Screen form-single field-layout support
- Screen form-list pagination (defaults in search-form-inputs)
- Template for csv render mode (mainly for form-list report-like output)
- Template for text render mode (for email alternative message, etc)
- Template for xml render mode (like CSV, but more structured and
support multiple forms per screen)
- Support URL parameters for renderMode and pageNoLimit which along with
the lastStandalone parameter make it easy to reuse screens and forms
meant for user interaction as definitions for CSV output
- WebApp event actions for after-startup, before-shutdown
- Service Facade
- Incoming email handling with Email ECA Rules (emeca) with the
org.moqui.impl.EmailServices.pollEmailServer service, configured with
the EmailServer entity
- Service (org.moqui.impl.EmailServices.sendEmailTemplate) to send email
based on settings in the EmailTemplate entity
- Entity Facade
- Automatic reverse-many relationship for type one relationships coming
the other way (done on-demand at run-time)
- Password reset email and forgot password form
- Some fixes so that Moqui will run in Java on Windows
- Testing and fixes for EntityFindImpl.count();
screen.transition.*-response parameters; screen.transition with no
actions or conditional responses to act as an alias, even with
parameters/etc; script type services; updatePassword service and various
security/password settings
===========================================================================
Release 1.0-preview3 - 19 Mar 2011
===========================================================================
Moqui 1.0-preview3 introduces various features to automatically and easily
make the applications you build using the previously available tools easier
to deploy and administer, and easier to test and get information about what
is happening as artifacts are executed. These include multi-tenant support,
artifact hit and hit bin tracking (for screens, transitions, services, and
entities), database-driven artifact authorization with many advanced
options, XML-RPC and JSON-RPC calls for Moqui services, and Tools screens
to administer and get information about various parts of the framework.
NOTE: just before this release the official code repository for Moqui moved
from SourceForge SVN to Git on GitHub so that users can more easily create
Git forks for their own use, and to allows pulls from their Git forks back
into the main Moqui repository. The Moqui GitHub URL is:
https://github.com/jonesde/moqui
This release includes:
- All of the great features of 1.0-preview1 and 1.0-preview2
- Updated various libraries included (esp Groovy, ehCache, Quartz)
- Multi-tenant support (shared app server, separate databases)
- Finished impl and test for localized messages and entity fields
- WebApp event actions for first-hit-in-visit, before-request,
after-request, after-login, before-logout
- JSON-RPC 2.0 incoming service handler (with Dzhuvinov JSON-RPC)
- JSON-RPC 2.0 outgoing service runner (with Dzhuvinov JSON-RPC)
- XML-RPC incoming service handler (with Redstone XML-RPC)
- XML-RPC outgoing service runner (with Redstone XML-RPC)
- XML Screens
- Screen form client JS validation based on target transition service
definition (define once, run on client and server); using jquery
validation (http://docs.jquery.com/Plugins/Validation); so far for
required, number-integer, number-decimal, text-email, text-url,
text-digits, credit-card; try out on the Edit Example screen
- Screen form-list multi=false support (one form per row)
- Screen form-list multi=true support, service call multi=true
- Screen form-list support form-links inside main form
- Screen form auto-complete for text-line
- Screen subscreen menu dynamic tabs (last level only) that loads
content as a standalone screen from the server with an ajax call
- Screen form focus-field, skip-start and skip-end supported
- Visitor tracking
- ArtifactHit and ArtifactHitBin tracking for screen, screen-content,
transition, service and entity (bin only)
- User preference handling
- Artifact Execution Facade
- ArtifactExecutionFacade for artifact stack tracking
- Artifact Authorization based on configuration in db
- Call ArtifactExecutionFacade.push(aei) (to track, check authz, etc) for
screen, transition, service, entity
- Disable authz on data loading; command line and assumed to be safe
- Handle direct service/entity calls, ArtifactGroupMember with pattern
- Review and test to determine which entities can skip authz for view
and create (ie some view only, some create only, some view and create)
- For entity-implicit service calls just look for entity authz
- Support authorization on subscreens even if no authz on parent
screens, ie authz for EditExample even though not for ExampleApp or
any other screens in that app
- Record-level authorization (ArtifactAuthzRecord/Cond)
- Authorization with a service (ArtifactAuthzService)
- Tools Screens
- Artifact Hit Bins
- Audit Log
- Visit and Hit Info/Stats (Find Visits, Visit details with hit list)
- Cache List and Elements
- Localization: Messages, Entity Fields
- Simplified sequenced ID API for both primary and secondary sequenced IDs
and moved configuration to entity definition, and methods to EntityValue
- Cleanups for xml-actions elements: from-field to from, call-service to
service-call, call-script to script; better now than later to make the
XML a bit cleaner and more clear (for example from-field can be any
groovy expression and the -field implies otherwise)
- Significantly more testing and bug fixes related to synchronization,
performance (WAY faster, but more room for improvement), transactions,
style, etc
===========================================================================
Release 1.0-preview2 - 01 Mar 2011
===========================================================================
With release 1.0-preview2 the Moqui Framework is now nearly complete and
has sufficient functionality to build a wide variety of functional and
useful enterprise, or less formal, applications. This release includes a
functional example application with various screens demonstrating features
of the framework and recommended practices and patterns to use when
developing with Moqui.
While not feature-complete for the planned 1.0 feature set, the
1.0-preview2 release is ready for early adopters. For those interested,
this is a great time to try out Moqui for a pet project or even a more
formal project that is just getting started and won't be deployed in
production for at least a few months.
Feedback on functionality and bugs by early adopters would be extremely
helpful for the project at this point, both to validate (or invalidate...)
designs and to more extensively test the implementation.
This release includes:
- All of the great features of 1.0-preview1
- Significant updates to Example application screens (most now working)
- Added various configuration options and examples for flexible deployment
and overriding templates for screen macros, xml-actions, etc
- Executable WAR file is more self-contained, ie less required in runtime
but with a few more override options in runtime too
- Root web screen split to support undecorated subscreens and apps
- XML Screens
- Screen form elements, all implemented (including file upload, *-find)
- Standalone screens that are rendered independently of parent screens
and can still be subscreens of any other screen
- Screen pre-actions that all run before any parent screen is rendered
to allow for setting parameters in parent screens, setting up general
things, etc
- Screen single-form HTML uses fieldset and label instead of a table
- Screen form header-field widget rendering
- Screen form header-field.@show-order-by support
- Screen form localized output formatting, based on service parameter
format if applicable, otherwise on format specified in form field
- Output encoding, configurable on various screen/form elements
- I18n (with L10nFacade) for labels and titles in screens, forms, menus
- Added jquery and jquery-ui and the smoothness theme
- Added container-dialog widget that creates a button that when clicked
on opens a dialog with the contents of the container-dialog.
- Added datetimepicker, which is the standard jquery datepicker plus the
timepicker add-on, combined using some code from Apache OFBiz
- Extended and now using database-driven screen visual themes
- Can send Maps to HTTP response as JSON string (Web Facade), example of
this is in EditExample.xml
- Service Facade
- Service expand auto-parameters, get parameters from implements
- Finished implementation of async/scheduled service calls
- Service run on commit and on rollback of current tx
- Service parameter type/subtype checking
- Service parameter ESAPI/Antisamy HTML checks (any/safe/none)
- Service authentication
- Service parameter conversion/parsing and validation checks
- Service ECA rules
- Entity Facade
- View-entity fixes and testing, now most view-entity options work
- Support entity-find.search-form-inputs element for form *-find fields
- Automatic cache clearing for one, list (using RA cache), count caches
- Entity extension
- Entity audit-logging
- Entity field encryption
- Entity ECA rules
- Support offset and limit as LIMIT/OFFSET or OFFSET/FETCH depending on
configuration on the database element in the Moqui conf file
- Database meta-data support for adding indexes when tables added
- Automatically add columns if missing in table check
- Add foreign keys to existing tables when table created
- Added EntityDbMeta.createForeignKeysForExistingTables() to check the
foreign keys of all entities with existing tables and add missing ones
where both tables exist; useful to run once all desired tables have
been created (through a data load, test script, etc) to round out the
DB meta-data
===========================================================================
Release 1.0-preview1 - 09 Feb 2011
===========================================================================
Release 1.0-preview1 is the first preview release of the Moqui Framework.
This first release includes a number of complete tools, implementation of
most of the Java API, and support for many of the configuration elements
and the various XML files. There are many things left to do before all 1.0
features are implemented and you'll see various "TODO" comments scattered
around, though not every feature yet to be implemented is represented by
such a comment.
This release includes:
- Flexible deployment
- Executable WAR file for command-line data loading and embedded Winstone
servlet container (Derby DB, Atomikos JTA&CP, other required JARs)
- The same WAR file can be dropped in a servlet container like Tomcat or
Jetty, or a more general app server like JBoss or Weblogic
- Supports Derby, HSQL, MySQL, Oracle and Postgres OOTB, support for
additional databases primarily by configuration
- Separate runtime directory with configuration, components, logs,
database, JCR repo, etc; is the same no matter how the WAR is deployed
- Use the supplied MoquiServlet, or write your own based on that example
- Everything runs from an instance of the ExecutionContextFactory, so it
is easy to include in custom programs or deploy through OSGi, etc
- Specify runtime directory path and conf file location using properties
file or System properties (java -D arguments)
- XML Screens
- XML Screen rendering for HTML
- Screen menus and sub-screens
- Hierarchical to any depth, URL is path to screen in hierarchy
- URL building based on configuration
- Sub-screens by directory structure, XML elements, db record
- Screen sub-content (stand-alone, included in screen) including support
for FTL and Confluence Wiki templates, and text and binary files
- Screens and sub-content can be located in files or in a JCR repository
- Can include or inline HTML and other text content
- Visit tracking
- Execution Context & General Facades
- WebFacade for access to Servlet objects, parameter maps, etc
- UserFacade for current user data, login/logout/authentication, etc
- MessageFacade for general and error message management
- L10nFacade for localization of text
- Resource Facade for access to classpath, file, JCR, etc resources,
and for running scripts and rendering templates (with caching for all);
- Interface to implement for any type of template rendering desired
- Interface to implement for any type of resource reference and access
- LoggerFacade for general logging, especially for non-class code
- CacheFacade for general caching, backed by ehcache
- TransactionFacade for general JTA-type operations and tracking what is
currently going on with transactions, where errors originated, etc
- ScreenFacade for rendering screens using the ScreenRender interface
- Service Facade
- Service runners for Java, XML Actions, inline actions, Scripts
- Entity-auto runner for CrUD ops without even defining the service
- Interface for adding your own service runners
- Can call sync, async or scheduled (using Quartz Scheduler)
- Entity Facade
- EntityValue with support for create, update, delete, refresh db
operations, find related, various get and set options
- EntityFind with various conditions, etc supported and results of one,
list, iterator, count, updateAll, or deleteAll.
- Comprehensive data loader with API and command-line access
- Database meta-data support for automatically creating tables at
runtime as they are used
- Primary and secondary sequenced ID generation
- Security
- ESAPI input canonicalization/filtering
- User account and flexible password constraints and management
- Authentication in XML Screens
- Can require encryption in XML Screens
- XSRF protection by requiring encryption of input in body parameters
- XML Actions
- Converts to Groovy code then compiles for good runtime performance
- Embeddable in service definitions, screens, etc
- Example application with screens, sub-content (CSS, html.ftl, cwiki.ftl),
entities and services, demo app and security and l10n data, etc
- Sample configurations for development, staging, and production
- Configurable "root" screen with sample HTML wrappers, login, menus, etc
===========================================================================
Features designed or considered, but not to be included in 1.0 series
===========================================================================
- XML Screens
- Screen tree elements
- Screen section-iterate pagination
- Screen form automatic client JS validation for service in-parameters
for matches, number-range, text-length, text-letters, time-range,
credit-card.@types
- Dynamic Screens (database-driven: DynamicScreen* entities)
- Dynamic Forms (database-driven: DynForm* entities) like the OFBiz
Survey and related entities (DbForm already in place to extend
XML Screen Forms)
- Form field widget library (pre-defined drop-down, etc)
- Entity Facade
- Support for CouchDB, and perhaps other NoSQL databases
- LiquiBase integration, entity.change-set element
- EntitySync tool
- Added view log like current change audit log (AuditLogView?)
- Artifact Execution Facade
- Call ArtifactExecutionFacade.push() (to track, check authz, etc) for
other types of artifacts (if/as determined to be helpful), including:
Component, Webapp, Screen Section, Screen Form, Screen Form Field,
Template, Script, Entity Field
- For record-level authz automatically add constraints to queries if
the query follows an adequate pattern and authz requires it, or fail
authz if can't add constraint
- Tools Screens
- Auto Screen
- Editable data grid, created by form-list, for detail and assoc
related entities
- Entity
- Entity model internal check (relationship, view-link.key-map, ?)
- Database meta-data check/report against entity definitions; NOTE:
use LiquiBase for this
- Script Run (or groovy shell?)
- Service
- Configure and run chain of services (dynamic wizard)
- Scheduler (view scheduled services with cancel and add)
- Artifact Info screens (with in/out references for all)
Source: README, updated 2012-12-30