Moqui Changelog

What's new in Moqui 2.1.3

Dec 4, 2020
  • New Features:
  • Java 11 now supported with some additional libraries (like javax.activation) included by default; some code changes to address deprecations in the Java 11 API but more needed to resolve all for better future compatibility (in other words expect deprecation warnings when building with Java 11)
  • Built-in ElasticSearch client in the new ElasticFacade that uses pooled HTTP connections with the Moqui RestClient for the ElasticSearch JSON REST API; this is most easily used with Groovy where you can use the inline Map and List syntax to build what becomes the JSON body for search and other requests; after this release it will replace the old moqui-elasticsearch component, now included in the framework because the large ES jar files are no longer required
  • RestClient improvements to support an externally managed RequestFactory to maintain a HttpClient across requests for connection pooling, managing cookies, etc
  • Support for binary render modes for screen with new ScreenWidgetRender interface and screen-facade.screen-output element in the Moqui Conf XML file; this was initially implemented to support an xlsx render mode implemented in the new moqui-poi tool component
  • Screen rendering to XLSX file with one sheet to form-list enabled with the form-list.@show-xlsx-button attribute, the XLS button will only show if the moqui-poi tool component is in place
  • Support for binary rendered screen attachments to emails, and reusable emailScreenAsync transition and EmailScreenSection to easily add a form to screens to send the screen render as an attachment to an outgoing email, rendered in the background
  • WikiServices to upload and delete attachments, and delete wiki pages; improvements to clone wiki page

New in Moqui 2.1.2 (Jul 24, 2019)

  • Service include for refactoring, etc with new services.service-include element
  • RestClient now supports retry on timeout for call() and 429 (velocity) return for callFuture()
  • The general worker thread pool now checks for an active ExecutionContext after each run to make sure destroyed
  • CORS preflight OPTIONS request and CORS actual request handling in MoquiServlet headers configured using cors-preflight and cors-actual types in webapp.response-header elements with default headers in MoquiDefaultConf.xml allowed origins configured with the webapp.@allow-origins attribute which defaults the value of the 'webapp_allow_origins' property or env var for production configuration; default to empty which means only same origin is allowed
  • Docker and instance management monitoring and configuration option improvements, Postgres support for database instances
  • Entity field currency-amount now has 4 decimal digits in the DB and currency-precise has 5 decimal digits for more currency flexibility
  • Added minRetryTime to ServiceJob to avoid immediate and excessive retries
  • New Gradle tasks for managing git tags
  • Support for read only clone datasource configuration and use (if available) in entity finds
  • Bug Fixes:
  • Issue with DataFeed Runnable not destroying the ExecutionContext causing errors to bleed over
  • Fix double content type header in RestClient in certain scenarios

New in Moqui 2.1.0 (Oct 23, 2017)

  • Non Backward Compatible Changes:
  • New compile dependency on Log4J2 and not just SLF4J
  • DataDocument JSON generation no longer automatically adds all primary key fields of the primary entity to allow for aggregation by function in DataDocument based queries (where DataDocument is used to create a dynamic view entity); for ElasticSearch indexing a unique ID is required so all primary key fields of the primary entity should be defined
  • The DataDocumentField, DataDocumentCondition, and DataDocumentLink entities now have an artificial/sequenced secondary key instead of using another field (fieldPath, fieldNameAlias, label); existing tables may work with some things but reloading seed data will fail if you have any DataDocument records in place; these are typically seed data records so the easiest way to update/migrate is to drop the tables for DataDocumentField/Link/Condition entities and then reload seed data as normal for a code update
  • If using moqui-elasticsearch the index approach has changed to one index per DataDocument to prep for ES6 and improve the performance and index types by field name; to update an existing instance it is best to start with an empty ES instance or at least delete old indexes and re-index based on data feeds
  • The default Dockerfile now runs the web server on port 80 instead of 8080 within the container
  • New Features:
  • Various library updates
  • SLF4J MDC now used to track moqui_userId and moqui_visitorId for logging
  • New ExecutionContextFactory.registerLogEventSubscriber() method to register for Log4J2 LogEvent processing, initially used in the moqui-elasticsearch component to send log messages to ElasticSearch for use in the new LogViewer screen in the System app
  • Improved Docker Compose samples with HTTPS and PostgreSQL, new file for Kibana behind transparent proxy servlet in Moqui
  • Added MoquiAuthFilter that can be used to require authorization and specified permission for arbitrary paths such as servlets; this is used along with the Jetty ProxyServlet$Transparent to provide secure access to things server only accessible tools like ElasticSearch (on /elastic) and Kibana (on /kibana) in the moqui-elasticsearch component
  • Multi service calls now pass results from previous calls to subsequent calls if parameter names match, and return results
  • Service jobs may now have a lastRunTime parameter passed by the job scheduler; lastRunTime on lock and passed to service is now the last run time without an error
  • View-entity now supports member-entity with entity-condition and no key-map for more flexible join expressions
  • TransactionCache now handles more situations like using EntityListIterator.next() calls and not just getCompleteList(), and deletes through the tx cache are more cleanly handled for records created through the tx cache
  • ResourceReference support for versions in supported implementations (initially DbResourceReference)
  • ResourceFacade locations now support a version suffix following a hash
  • Improved wiki services to track version along with underlying ResourceReference
  • New SimpleEtl class plus support for extract and load through EntityFacade
  • Various improvements in send#EmailTemplate, email view tracking with transparent pixel image
  • Improvements for form-list aggregations and show-total now supports avg, count, min, max, first, and last in addition to sum
  • Improved SQLException handling with more useful messages and error codes from database
  • Added view-entity.member-relationship element as a simpler alternative to member-entity using existing relationships
  • DataDocumentField now has a functionName attribute for functions on fields in a DataDocument based query
  • Any DataDocument can now be treated as an entity using the name pattern DataDocument.${dataDocumentId}
  • Sub-select (sub-query) is now supported for view-entity by a simple flag on member-entity (or member-relationship); this changes the query structure so the member entity is joined in a select clause with any conditions for fields on that member entity put in its where clause instead of the where clause for the top-level select; any fields selected are selected in the sub-select as are any fields used for the join ON conditions; the first example of this is the InvoicePaymentApplicationSummary view-entity in mantle-usl which also uses alias.@function and alias.complex-alias to use concat_ws for combined name aliases
  • Sub-select also now supported for view-entity members of other view entities; this provides much more flexibility for functions and complex-aliases in the sub-select queries; there are also examples of this in mantle-usl
  • Now uses Jackson Databind for JSON serialization and deserialization; date/time values are in millis since epoch
  • Bug Fixes:
  • Improved exception (throwable) handling for service jobs, now handled like other errors and don't break the scheduler
  • Fixed field.@hide attribute not working with runtime conditions, now evaluated each time a form-list is rendered
  • Fixed long standing issue with distinct counts and limited selected fields, now uses a distinct sub-select under a count select
  • Fixed long standing issue where view-entity aliased fields were not decrypted
  • Fixed issue with XML entity data loading using sub-elements for related entities and under those sub-elements for field data
  • Fixed regression in EntityFind where cache was used even if forUpdate was set
  • Fixed concurrency issue with screen history (symptom was NPE on iterator.next() call)

New in Moqui 2.0.0 (May 9, 2017)

  • Moqui Framework 2.0.0 is a major new feature and bug fix release, with various non backward compatible API and other changes.
  • This is the first release since 1.0.0 with significant and non backwards compatible changes to the framework API. Various deprecated methods have been removed. The Cache Facade now uses the standard javax.cache interfaces and the Service Facade now uses standard java.util.concurrent interfaces for async and scheduled services. Ehcache and Quartz Scheduler have been replaced by direct, efficient interfaces implementations.
  • This release includes significant improvements in configuration and with the new ToolFactory functionality is more modular with more internals exposed through interfaces and extendable through components. Larger and less universally used tool are now in separate components including Apache Camel, Apache FOP, ElasticSearch, JBoss KIE and Drools, and OrientDB.
  • Multi-server instances are far better supported by using Hazelcast for distributed entity cache invalidation, notifications, caching, background service execution, and for web session replication. The moqui-hazelcast component is pre-configured to enable all of this functionality in its MoquiConf.xml file. To use add the component and add a hazelcast.xml file to the classpath with settings for your cluster (auto-discover details, etc).
  • Moqui now scales up better with performance improvements, concurrency fixes, and Hazelcast support (through interfaces other distributed system libraries like Apache Ignite could also be used). Moqui also now scales down better with improved memory efficiency and through more modular tools much smaller runtime footprints are possible.
  • The multi-tenant functionality has been removed and replaced with the multi-instance approach. There is now a Dockerfile included with the recommended approach to run Moqui in Docker containers and Docker Compose files for various scenarios including an automatic reverse proxy using nginx-proxy. There are now service interfaces and screens in the System application for managing multiple Moqui instances from a master instance. Instances with their own database can be automatically provisioned using configurable services, with initial support for Docker containers and MySQL databases. Provisioning services will be added over time to support other instance hosts and databases, and you can write your own for whatever infrastructure you prefer to use.
  • To support WebSocket a more recent Servlet API the embedded servlet container is now Jetty 9 instead of Winstone. When running behind a proxy such as nginx or httpd running in the embedded mode (executable WAR file) is now adequate for production use.
  • If you are upgrading from an earlier version of Moqui Framework please read all notes about Non Backward Compatible Changes. Code, configuration, and database meta data changes may be necessary depending on which features of the framework you are using.
  • In this version Moqui Framework starts and runs faster, uses less memory, is more flexible, configuration is easier, and there are new and better ways to deploy and manage multiple instances. A decent machine ($1800 USD Linux workstation, i7-6800K 6 core CPU) generated around 350 screens per second with an average response time under 200ms. This was running Moqui and MySQL on the same machine with a JMeter script running on a separate machine doing a 23 step order to ship/bill process that included 2 reports (one MySQL based, one ElasticSearch based) and all the GL posting, etc. The load simulated entering and shipping (by internal users) around 1000 orders/minute which would support thousands of concurrent internal or ecommerce users. On larger server hardware and with some lower level tuning (this was on stock/default Linux, Java 8, and MySQL 5.7 settings) a single machine could handle significantly more traffic.
  • With the latest framework code and the new Hazelcast plugin Moqui supports high performance clusters to handle massive loads. The most significant limit is now database performance as we need a transactional SQL database for this sort of business process (with locking on inventory reservations and issuances, GL posting, etc as currently implemented in Mantle USL).

New in Moqui 1.5.3 (Nov 6, 2015)

  • This release includes various smaller improvements and bug fixes, and a number of library updates. There are no significant new features but many smaller improvements and cleanups. There are around 400 commits since the last release and an increase in size from around 65k lines to around 67k lines of text (primarily Java, Groovy, XML, XSD, and FTL files; not including files from other projects). The System and Tools apps have 56 screens and 121 forms. Moqui has 127 entities and 70 services.
  • New Features:
  • Library Updates Apache Camel to 2.15.3 Apache Commons Codec to 1.10 Apache Commons CSV to 1.2
  • Apache Commons Email to 1.4
  • Apache Commons File Upload to 1.3.1
  • Apache Commons Validator to 1.4.1
  • Apache FOP to 2.0 (with Batik 1.8 and XML Graphics Commons 2.0.1)
  • Apache HTTP Core to 4.4.3
  • Apache HTTP Client to 4.5
  • Apache Jackrabbit to 2.10.1
  • Apache Shiro to 1.2.4 Drools and KIE to 6.2.0.Final Elasticsearch to 1.7.1
  • Ehcache to 2.10.0
  • Freemarker to 2.3.23
  • Groovy to 2.4.4 Liquibase to 3.4.1
  • OrientDB to 2.1.2
  • OWASP ESAPI to 2.1.0 (with AntiSamy 1.5.3)
  • SLF4J to 1.7.12
  • other misc updates
  • Added Travis CI configuration for continuous integration testing, now setup for the moqui/moqui project with a badge reporting status
  • Changed form-list macros to use HTML table elements instead of div with table styles
  • Various localization improvements
  • ArtifactHit and ArtifactHitBin timing fields are now number-decimal instead of number-integer to record sub-millisecond timing; internal changes for more precise timing, also calc of standard deviation, etc; existing databases may need column type changes
  • Added link.@entity-name and related attributes for convenience as an alternative to display-entity or link with row-actions lookup
  • Added link.@tooltip attribute for tooltips on any link
  • The Auto Screens in the Tools app now have a link to get screen/form XML for the various forms (find, CrUD) for the current entity; handy as a starting point when creating a bunch of new screens for various entities
  • Entity Data Loader class, command line, and DataImport screen now support a list of component names to load data from when loading by data type
  • The entity.@create-only attribute now only checked if fields are changed
  • If service-call.@ignore-error=true now logs and clears error messages
  • Added support for a 'default' locale value for LocalizedMessage and LocalizedEntityField as a fallback if no locale or base locale record is found; used to better support placeholder message keys meant to always be localized
  • Added @text-map attribute to link, label, and display for expanded fields in the @text attribute Added shortened names for various methods in ResourceFacade (template, script, expression, condition, expand) and localize in L10nFacade
  • Added link.@encode attribute like that on other elements, encodes link text by default (avoid HTML injection based attacks)
  • Added image.@condition, @style, and @parameter-map attributes and parameter sub-element like those on label, etc
  • Added screen history drop-down to navbar, WebFacade code to keep history
  • Screen menu names are now expanded (put data prep in pre-actions)
  • Added screen.@menu-image and @menu-image-type attributes; when rendering a screen gets the last menu-image in the screen render path (available from ScreenUrlInfo)
  • Bug Fixes:
  • Fixed issues with adding missing columns to database
  • Fixed issues where EntityValue objects from cache were mutable
  • Fixed issue where requests to different hostnames for the same server resulted in redirecting to the first hostname used in a request
  • The Gradle loadSave and reloadSave tasks now handle H2 files as well
  • The EXAMPLE1 tenant is now setup for H2 instead of Derby, fixing issues with testing of tenant and related functionality
  • Fixed issue with form field options in certain cases where an EntityValue was pushed onto the context (which should never be done)
  • Fixed issue when a drop-down with dynamic-options depends on a field with a display or display-entity widget as the hidden input did not have the @id attribute needed to get the field's value
  • Fixed issue when alias-all is used with a member-entity that is a view-entity where all expanded aliases would be ignored in the outer view
  • Fixed issue where member-entities of a view-entity used as a member-entity and the fields of that view member-entity were aliased with an alias-all with a @prefix or other name not matching the field were trimmed because no matching field was in the fields to select
  • XML Actions ${iterate.@entry}_hasNext is now _has_next to be more consistent with section-iterate and others using this FTL inspired name
  • Fixed issue with select column names when doing a distinct query with upper cased order by fields, now adds function to select clause as well as order by clause (GitHub issue #146)

New in Moqui 1.5.2 (May 5, 2015)

  • New Features:
  • Added H2 1.4.187, configuration for H2 Database
  • set as default embedded database instead of Derby in default setup can be accessed remotely on port 9092 using a URI like jdbc:h2:tcp://localhost:9092/MoquiDEFAULT
  • H2 console available by default (see web.xml) at /h2
  • Updated Atomikos to 4.0.0M4, Bitronix to 3.0.0-SNAPSHOT (built from source in GitHub repo), FreeMarker to 2.3.22, Groovy to 2.4.3
  • Updated OrientDB to 2.0.8, tested and fixed a few issues
  • Updated Apache Commons Codec to 1.9, Apache Commons Logging to 1.2, Apache HttpClient and HttpCore to 4.4.1, JNA to 4.1.0
  • Significant performance improvements based on profiling
  • a big part of this is using the Groovy @CompileStatic annotation for strict typing and direct method calls for improved performance in many frequently called parts of the framework
  • other approaches used in various places include better caching and local tracking of frequently used data and integer for loop iteration instead of using Iterator (or for in, for :)
  • overall the overhead of advanced features of the framework such as artifact authorization and hit counting are significantly reduced
  • entity, service, and screen operations are dramatically faster
  • observed common entity and service operations 3-8x faster, and screen rendering around 3x faster; with these updates some performance improvement is always possible but this gets pretty close to the limit
  • this effort involves over 3000 lines of code changes, nearly 10% of the roughly 35k lines of Java & Groovy code in the framework implementation
  • ScreenUrlInfo has been cleaned up with single use parts split into the UrlInstance class; these are currently internal implementation classes so this isn't an API change, but this is a non-backward compatible change and some code using the ScreenRenderImpl and ScreenUrlInfo may need to be updated similar to the changes in DefaultScreenMacros.html.ftl
  • Added section.@condition attribute that does the same thing as section.condition.expression but more concise
  • CUPS print server integration and print job management services and admin screens in the System app; can render XSL-FO screens to PDF/etc and print, print ResourceFacade resources, and direct print other documents
  • Various improvements to concurrency and load handling
  • Production mode artifact cache warming now does more so that initial page loads are much faster, and heavy loads from start are handled better
  • Bug Fixes:
  • Fixed issue with XML Form display-entity where an EntityValue was pushed onto the context (bad in the first place, changed to push Map clone of EV) and if there was an error in the string expand it stayed
  • No longer create auto reverse relationships for relationships going to the same entity, results in multiple relationships with the same name and the reverse one can get picked up and isn't the one desired
  • Fixed issues with loading KIE modules and JAR files from components on indows caused by issue in BaseResourceReference URI handling
  • Fixed issue with startup-add-missing=true and runtime-add-missing=false where entities in a group without an explicit datasource would never have their tables created
  • Fixed issues with OrientDB wrapper objects related to EntityFacade

New in Moqui 1.5.1 (May 5, 2015)

  • New Features:
  • Updated Elasticsearch to 1.5.0, Apache Lucene to 4.10.4
  • More consistent handling of empty in service, entity, and screen when we don't want the Groovy definition of empty (ie don't consider 0 numbers or false boolean to be empty)
  • Support for CharSequence in various places (context, entity, service, screen, etc) to handle not just String but also GString when it doesn't get converted and StringBuffer, StringBuilder, etc where convenient
  • Improved HTTP response code handling, now uses 401 only for authc/login failures, 403 (forbidden) for artifact authz failures, and 429 (too many requests) for tarpit failures
  • Entity auto services (create, update, and store) now support related records in Maps and Lists in the Map passed to the service call, following the same pattern used for incoming JSON documents (the same code is used for both)
  • Entity Facade:
  • More consistent handling of is-null; support is-not-null, not-between
  • Document mappings (type definitions, etc) are now put automatically when a DataDocument indexed with ElasticSearch is first used (by index or search) with types for numbers, dates, etc needed for analytics and also not_analyzed set for all id* type entity fields
  • In DataDocument the fields on the primary entity are no longer in a Map/object but rather are in the root of the document, simpler and more consistent with the structure used elsewhere
  • Added EntityServices.search#CountBySource service to do analytics searches using ElasticSearch; there is a real-world example of the use of this service in Mantle for current and projected inventory data
  • Added @short-alias attribute for entity and relationship, can be used for any entity or relationship reference, but mainly meant for use in entity REST request URLs and other entity path operations
  • Implemented automatic entity REST interface that supports GET/find, POST/create, PUT/store, PATCH/update, and DELETE/delete operations; supports a variety of bulk operations and flexible find options including pagination and the various features of EntityFind.searchFormInputs() that are used for find forms in XML Screens; this is a RESTful API that follows various best practices and security is handled through artifact authorization and tarpits at the entity level; for examples see the comments in rest.xml
  • Improved relationship info (EntityDefinition.getRelationshipsInfo()) and dependent entity handling
  • Added EntityDetail screen in the Tools app with info about entity and related entities
  • EntityDataLoader and EntityDataWriter, along with the DataImport and DataExport screens in the Tools app, now support JSON files including embedded related (or other entity) records like the REST interface
  • EntityDataLoader for XML files also supports nested records; with the PK field inheritance from parent records this can significantly reduce redundancy in data load files and make them easier to read/maintain
  • EntityDataWriter for XML files now exports nested elements for dependent records using a similar pattern to that used for JSON out
  • Bug Fixes:
  • Fixed issue with link.@dynamic-load-id attribute loading the result of the load() function instead of doing nothing but calling the load method; this caused issues in browsers like FireFox that render the result of a a.@href javascript: expression
  • Fixed issue with sparse screen paths (starting with a '//') where a high-level screen like the echopath screen with @allow-extra-path=true would be used instead of a more complete, and correct, match; sparse paths no longer allow extra path elements, which is desirable for intended use of sparse paths to specify target screens, transitions, and sub-screen resources; extra path elements generally come in request URLs where sparse paths are not allowed anyway
  • Fixed issue where adding ".xml" to a request URL for a screen would treat the screen XML file as a sub-screen resource and return the contents; now treats screen XMl files as if they don't exist, ie results in a 404 error
  • Fixed issue with EntityFind where if a ListCondition with an OR operator was passed before passing other conditions then the top-level conditions would be OR'ed together instead of AND'ed
  • Fixed issues with Date (without time, ie java.sql.Date) parsing and formatting due to weirdness with time zone and truncating the time part of the Date representation in long millis since epoch; see comments in L10nFacadeImpl.groovy for more details
  • Fixed issue with canonicalized (for security, decoding) parameters including JSON documents passed in the body where lists containing anything other than strings (CharSequence actually) were emptied; most lists in parameters only contain strings so this hasn't come up before, but for more complex JSON documents it is an issue
  • Fixed issues with determining dependent entities, now more consistent by looking for reverse relationships with appropriate criteria
  • Fixed a few issues with the Tools auto screens and entity edit screens related to relationships

New in Moqui 1.5.0 (Mar 10, 2015)

  • This release includes a number of UI improvements in XML Screens and Forms
  • including lazy-loading trees (with jstree), more complete database-driven
  • forms, general form response saving (together support DB-driven surveys,
  • and can also be used with any XML Form), ability to include entire screen
  • sections in other screens, required screen parameters so explicit checking
  • isn't necessary (most screens with parameters need this), significant style
  • improvements based on updated Metis (and Bootstrap, jquery, etc), a new
  • dark/light style switcher, and restored use of screen themes to load CSS,
  • JS, images, inserted text and templates, and much more.
  • One major new feature in this release is EntitySync which duplicates data
  • between systems based on update timestamps. This can move data between
  • tenants, systems on different networks and used for different purposes, and
  • so on. Another major feature is the system-system messaging that is a store
  • and forward message queue, or in other words it persists outgoing messages
  • to allow retry in sending or even modify and retry, and incoming messages
  • to allow retry in processing, modify and retry, etc. This can be used along
  • with or instead of a lower-level message queue to provide more visibility
  • at a business level and to facilitate production support for messages with
  • issues. It is configurable so that different services can be used to
  • process different messages (send, receive, consume). Both EntitySync and
  • System-System Messages are new and not yet vetted in production so should
  • be considered beta features as of this release.
  • The Tools application has been split into System and Tools applications
  • targeted at the different roles of system administrators and developers.
  • There are new screens in the System app for security (users, user groups,
  • and artifact groups with preferences, permissions, authz, tarpits), for
  • Entity Sync to review status and create/maintain, and for System-System
  • Messages to review incoming and outgoing messages and handle issues with
  • messages. There are also improvements in the Tools screens for developers
  • including various Auto Screen improvements, an Artifact Statistics screen
  • with counts of various artifacts and improved service detail with
  • highlighted display of actual and generated source.
  • New Features:
  • Updated Apache Camel to 2.14.1, Apache CSV to 1.1, Apache Derby to 10.11.1.1, Apache FOP to 1.1 (now includes Batik 1.7), Apache Lucene to 4.10.3, Apache Shiro to 1.2.3, Ehcache to 2.9.0, ElasticSearch to 1.4.4, Freemarker to 2.3.21, Groovy to 2.4.1 (indy), Liquibase to 3.3.2, OrientDB to 1.7.9, Winstone to 1.7.0
  • Updated Metis Admin Template to version 2.2.7; this updates jQuery to 2.1.1, jQuery UI to 1.11.0, Bootstrap to 3.2.0, and various other updates
  • More profiling (with JProfiler) and performance improvements, especially in the Entity and Screen Facades
  • Added elFinder connector for the Moqui ResourceFacade
  • Added Tools screen to browse ResourceFacade resources using elFinder
  • Can now schedule services with a cron string in Tools Run Service screen
  • Added cache warming on start (disabled in dev conf)
  • Various improvements to Tools screens for layout and pagination
  • Added convert#Uom service
  • Added clone#DataDocument service
  • Added WebFacade.sendResourceResponse() method to stream content from any Resource Facade location
  • Artifact Authz now gets parameters from entity and service operations and if new ArtifactGroupMember.filterMap field is populated checks each filter entry to see if it matches corresponding parameter entry, otherwise authz rule does not apply
  • Added System-System Message functionality with persisted outgoing and incoming messages and services to manage queueing, sending, receiving, and consuming
  • Added UI for administration of System-System Messages
  • Added UI for Security administration (users, user groups, and artifact groups with preferences, permissions, authz, tarpits)
  • Added UI for EntitySync administration
  • Added sync service call transaction options (ignore and cache) to match those available through the service definition
  • Made XML Actions service-call.@transaction options match those in the service definition, added code generation for all options
  • Added ServiceFacade.callJsonRpc() method to more conveniently call remote JSON-RPC services
  • XML Screen:
  • Added tree element for XML Screen that renders a lazy-loaded tree with links using jstree (currently version 3.0.3); see the wiki.xml screen in HiveMind for an example of its use
  • Added section-include element to include a section from another screen
  • Various XML Screen elements have more consistent id behavior with string expansion and adding the listEntryIndex suffix, which is now also set in section-iterate (in addition to form-list as before)
  • Added container-box to XML Screen with header, toolbar, and body
  • Improved container element in XML Screen with better id handling and a type which (in HTML) translates to the tag used.
  • Added @style attributes to link and label in XML Screen
  • In a form-list with no @list-entry attribute creates a ${@list}_entry field along with the _index and _has_next fields for convenience in getting at the object in the List (which implements the Map interface, often an EntityValue and nice to get at it directly)
  • Added form-single.field-layout.field-row-big element to do what field-row used to do with more than 2 field-ref elements, putting all fields in a single column
  • Put CSS references back in theme instead of direct in webroot.xml
  • Added support for header logo, header title, body class, and footer items in theme to make applications easier to brand through theme data
  • Added theme support for header navbar items with FTL snippets coming from the database theme records, example in the Mantle MyAccount app to show count of unread incoming messages and link to view them
  • Added dark/light pseudo-theme switcher, switches body classes from Bootstrap on the fly and saves user preference (default comes from theme)
  • Links are now disabled when going to a screen the user is not authorized for along with failed transition condition
  • Screen paths can now start with a // and be a sparse path where each name in the path is searched for in the subscreen hierarchy from the root screen; can also find content this way; note that this may involve loading a lot of screen definitions and in dev mode will be slower, but in production (cache timeouts turned off) the full expanded path is cached as are the screen definitions so there is very little overhead
  • To help with XML Screen loading overhead, especially in dev mode with timeouts turned on, now only reloads if the file's last modified time has changed
  • Added date-period form field widget to show drop-downs for this/next/last day/week/month/year as an alternative to an explicit date range
  • Added link.@dynamic-load-id attribute to load a link into a dynamic-container using its ID
  • Added 'screen' option for link.@url-type to refer directly to a screen without going through a transition (technically transition can do this too, but looks funny); made @url-type an expanded string
  • Added support for screen.parameter.@required attribute, show error message instead of rendering screen if a parameter is not passed
  • XML Form text-line auto-complete now passes through parameters defined on the screen and transition
  • Added XML Form text-line.ac-show-value attribute which defaults to true and if set to false doesn't use the span by the input box to show what was selected
  • DbForm forms can now be used independently rather than just modifying existing XML Screen forms by using 'moqui.screen.form.DbForm' or 'DbForm' as the location, before the hash (#), in the @extends attribute
  • Added FormResponse/Answer entities to save form responses from any form based on form field names; can be used with DbFrom to have flexible database driven survey forms
  • Autocomplete fields (with text-line.@ac-transition) now hide the ID/value and put the label in the input box; they also do a server call with the initial value to get a label for it if there is no @ac-initial-text attribute
  • Added container-row and row-col elements for 12 column responsive layouts currently implemented with the Bootstrap 12 col styles
  • Added transition-include element to reuse transition definitions
  • Added @condition attribute to link and label elements
  • Added support _openDialog parameter or context field to specify a dialog (container-dialog or dynamic-dialog) to show on load
  • Entity Facade:
  • Added in operator (_op) for searchFormInputs/search-form-inputs
  • Added entity.field.@default attribute with a Groovy expression to set a default for a field based on other fields, constants, etc
  • Added DataDocumentCondition.operator field, uses same operator values as XML Actions econdition.@operator
  • Added update option to field.enable-audit-log to create audit records for updates only, not creates
  • Added entity.@sequence-primary-prefix attribute for a per-entity prefix that can be and expanded string expression using field values, etc
  • Removed EECA triggers for find operations; these are not generally useful and add overhead to the typically significant number of find operations, including cached ones
  • Initial implementation of EntitySync feature with example in the example component; should be considered beta but has gone through various tests in non-production environments
  • Added entity.@enable-audit-log attribute which is used as the default for all fields of the entity
  • Added EntityAuditLog.artifactStack field with the artifact stack used to do the audited update
  • Entity ECA rules that run after an update and have get-original-value=true now really get the originalValue from before the update even though they run after.
  • Bug Fixes:
  • Fixed security issue where current password was stored in UserPasswordHistory with 2-way encryption. Now only previous passwords are stored in UserPasswordHistory on password change, and they are stored n the hashed (one-way encrypted) form along with the salt and hash type.
  • Fixed delete buttons not working on the Find Auto Screen
  • Fixed links with images (link.image element) FTL error
  • Required service parameters used to use the Groovy definition of empty but this is annoying for numbers and such (a zero is generally a valid non-empty service parameter), so now uses null for any object or zero length String as the definition of empty for required parameters
  • Fixed issues with complex-alias where aliased entities were not add to list of aliased entities used and alias level function was not added
  • Fixed tx cache issue where a value could be updated after putting it into the cache causing an attempt to read the original to get an updated value
  • Changed ResourceReference.init() to use ExecutionContextFactory instead of ExecutionContext for cases where the object is long-lived
  • Fixed search#DataDocuments issues with documentType parameter, adding it to the count query (was getting wrong counts because it was left out), set to null if an empty String as ElasticSearch treats that as a real one
  • Fixed issue with a distinct query where order by fields are not selected, Entity Facade now automatically selects order by fields for distinct queries
  • Fixed issue with merging row-actions in list forms, was cloning row-actions node instead of the actions nodes under it
  • Fixed issue with form-list-column nodes not getting removed when merging
  • Fixed issue with deepCopyNode copying attributes, the original Node's attribute Map was used instead of being copied allowing attributes to be modified in the copy of the Node
  • Fixed thread deadlock issue in dev mode (with ArtifactHit entity logging enabled) caused by refreshing DataFeed and DataDocument settings in a scheduled job and page request happening around the same time
  • Fixed thread contention issue checking ArtifactHit near startup
  • Fixed issue with EntityValue.checkFks using find instead of findAll to get type one relationships
  • Fixed issue with lastUpdatedStamp not getting set on updates
  • Fixed fairly recent issue with service auth* parameters being ignored in service calls, especially remote service calls
  • EntityFind.count() now selects all fields by default to match what list() and iterator() do, and to not mess things up when calling count() before calling iterator()
  • In XML Forms the display and display-entity field types no longer default o the value from the @text attribute, if there is no direct entry value the hidden field should be empty
  • Fixed issue with Quartz service calls and job data associated with the trigger, now gets data map from job and trigger
  • Fixed issue with the Content-Type HTTP header in JSON requests when it has one or more parameters.

New in Moqui 1.4.1 (Aug 14, 2014)

  • New Features:
  • Updated Apache Jackrabbit to 2.8.0, Apache Lucene to 4.8.1, ElasticSearch to 1.2.1
  • Added UserGroupPreference, like UserPreference but for user groups. UserFacade.getPreference() now looks for group preference when no user preference is found.
  • Changed Service ECA rules with @when of tx-commit or tx-rollback to attach to the transaction after the service is run so that results of the service run are available.
  • Changed datasource configuration so that if datasources other than the one for the default-group-name (transactional) are not specified then the default-group-name one is used. There is a similar change for the TenantDataSource so that only the one for the default-group-name (transactional) is required for each tenant.
  • Changed the Derby database default configuration to use a single MoquiDEFAULT database instead of separate transactional, analytical, nosql, and tenantcommon databases. Also changed the EXAMPLE1 tenant to use the tenantId as the database name, setting a pattern for other tenants.
  • Added basic tenant provisioning services and various multi-tenant improvements and fixes to improve multi-tenant capabilities.
  • Changed the way database time zone and locale work so they are the same for all users, either configured (@database-time-zone and @database-locale attributes on the moqui-conf.entity-facade element) or the Java system defaults. This is instead of using the user's time zone and locale because that is inconsistent and may get undesired values back, ie getting a different Timestamp object back because of a different user time zone.
  • Added screen.@tenants-allowed attribute to restrict which tenant(s) a screen may be used in. The tools application is now restricted to the DEFAULT tenant using this attribute in Tools.xml.
  • Changed Data Document _index field to be tenantId + "__" + DataDocument.indexName instead of just DataDocument.indexName to use a separate set of indexes for each tenant.
  • Scheduled service jobs (including async) are now authorized before the job is scheduled, and when the username/userId is passed through does a no password authc for that user and turns off authz for the service call; this is a mechanism for handling service calls outside the main flow and still maintaining security.
  • Changed the ArtifactHit/Bin artifactName for screen, screen-content, and transition to use their internal Resource Facade location (like component://...) instead of external URL
  • Bug Fixes:
  • Changed commit() to rollback if commit fails to cleanup the transaction, can happen for example with TransactionCache has a DB error during pre-commit.
  • ArtifactHit count now skipped for UserAccount to avoid infinite recursion (shows as a StackOverflow exception).
  • EntityValue.containsKey() now returns true if there is a value for the key (even null), not just if it is a valid field name; this was inconvenient for various things, especially when treating EntityValue like a Map.
  • Fixed issue where Service ECA rules with @when of tx-commit or tx-rollback were never run.
  • Fixed issue with primary sequenced ID where cached current bank was shared among tenants even though DB values were separate, now cached current bank is also separate.
  • Fixed GitHub issue #26 where the Calendar used for setting Date/etc values was not valid because the cached Calendar object in UserFacadeImpl was set in a query before getting the UserAccount, and not reset by getUserAccount() (ie calling clearPerUserValues()).
  • Changed Quartz jobs (async and scheduled service calls) to run in the tenant they were initiated in instead of always in the DEFAULT tenant
  • Fixed issue with setBlob and the Postgres JDBC driver (GitHub issue #28), similar to pull request #29.
  • Fixed issue where SubscreensItem records with a userGroupId were filtered for the user active when the screen is first loaded as opposed to the user active each time the screen is rendered.
  • Fixed issue where TransactionCache was ignored for entities with no table in the database, for OrientDB datasource, and in general for the EntityListIteratorWrapper object.

New in Moqui 1.4.0 (Mar 26, 2014)

  • Significant new features include: incorporating the Metis Admin Template,
  • adding Twitter Bootstrap and updating jQuery/jQueryUI, added Bitronix
  • transaction manager and pluggable JTA implementation support, added JBoss
  • KIE and Drools with framework and component knowledge base support,
  • Markdown support, JSON-RPC improvements, data loading improvements to
  • support CSV files and calling services to load data, a Quartz Scheduler
  • history in the DB and a Quartz persistence implementation, and services to
  • clean Quartz history as well as Moqui artifact hit and hit bin histories.
  • There are various bug fixes and stability improvements in this release for
  • things like PostgreSQL support, input data handling, form-list and general
  • pagination, Tomcat and other Servlet container deployment, and email
  • sending.
  • This release is backward compatible with the previous release (1.3.2),
  • though some configuration changes may be needed and custom HTML/JS may need
  • to be updated for the new JS libraries and Metis Admin Template.
  • New Features:
  • Added the Metis Admin Template version 2.1.3; This includes an update to jQuery 2.0.3, Bootstrap 3.0.3, jQuery UI 1.10.3, and many other JS libraries.
  • Added Bitronix BTM 2.1.4 as alternative to Atomikos
  • Added JBoss KIE and Drools libraries (version 6.0.0.Final) and Moqui API additions for getting a KieContext, plus Moqui automatically loads and builds component kie directories when present
  • Added Markdown4J 2.2
  • Added Apache Commons CSV 1.0-SNAPSHOT 20140122
  • Updated Apache HttpCore to 4.3.1, HttpClient to 4.3.2, Commons Logging to 1.1.3, Commons Codec to 1.6
  • Updated Apache Lucene to 4.6.1, ehcache to 2.8.1, ElasticSearch to 1.0.1, Groovy to 2.2.2
  • Updated Winstone to 1.0.5 (note this is very different from 0.9.10)
  • Added ISO 8601 date/time parsing as another default in L10nFacade
  • Added transition.@read-only attribute to skip XSRF check for insecure parameters when the transition does not modify data, and when data is not too sensitive
  • Added transition.parameter sub-elements to declare additional parameters for a transition, just like and in addition to the screen parameters
  • Added Markdown wiki support for files with extensions .md and .markdown using Markdown4J, and .md.ftl or .markdown.ftl for FTL + Markdown
  • Added clean#ArtifactData service to remove ArtifactHit/Bin records older than a certain number of days (default 60), and a XML configured Quartz job with a trigger to run it every day at 2AM
  • Entity Facade:
  • Enhanced EntityDataLoader to also call services, just use the service name (leave out hash (#)) instead of entity name for the XML element
  • Enhanced EntityDataLoader to support CSV files with the entity or service name on the first line, then a header line, then the data lines
  • The entity-find-one.@value-field attribute can now be an existing Map that is not an EntityValue and if so entity fields are added to the Map instead of assigning the find result to @value-field
  • Improved EntityFind and EntityList for cached pagination
  • Service Facade:
  • Removed Dzhuvinov JSON-RPC jars (implemented internally now)
  • Improved and fixed JSON-RPC remote service client and auto server
  • Changed service.@validate=false to still apply defaults and type conversions for defined in-parameters, but not exclude undefined params or error on other validation errors
  • Added parameter.@default attribute which is like the @default-value attribute except that it is a field name or expression for the default field value.
  • Added SchedulerHistory and code to populate it on various Quartz Scheduler events, and scheduled service to clean up old records
  • Added EntityJobStore to do persistence for Quartz Scheduler through the Entity Facade instead of direct to DB for easier deployment and more consistent operation with other parts of Moqui Framework
  • Transaction Facade:
  • Added transaction-facade.@use-transaction-cache attribute, defaults to true, set to false to disable the TransactionCache globally
  • Added new transaction-facade sub-elements transaction-jndi and transaction-internal instead of single transaction-factory; transaction-internal has a class attribute to specify an implementation of the TransactionInternal interface to init/destroy the JTA impl
  • TransactionFacade now has active Synchronization registry like the active XAResource registry per transaction that existed before
  • Moved XAResource tools to Synchronization: TransactionCache, OrientDB tx handler, ServiceCallSpecial.registerOnCommit() and registerOnRollback(), Service ECA rule tx-commit and tx-rollback, EntityDataFeed
  • Bug Fixes:
  • Due to some quirks in Shiro ehcache support it is disabled by default; it is still supported for use in distributed environments with shared auth cache (see shiro.ini for details)
  • Fixed issue with entity-condition in a view-entity when the econdition value matched a localized string different from the original value
  • Fixed issue with form-single and form-list.@transition when it matches a localized string (especially on MySQL or other DBs with case insensitive string matching), now only expands transition value if it contains a "${"
  • Fixed not-like entity condition operator which was treated as like
  • Fixed bug in EntityFind.searchFormInputs using ec.web.parameters instead of context; parameters are added to the context and other things may be too before this is called, so best to just use the context
  • Changed data stored on login to be done in separate transactions so that the records aren't locked for the full surrounding tx preventing the same user from auth for other transactions
  • Fixed issue with runtime/db directory not being included in gradle addRuntime and ant add-runtime, caused Derby to do funny things and OrientDB to not run at all under Tomcat and other external containers
  • Fixed issue with Logger initializing before moqui.runtime is set when running under external servlet containers like Tomcat
  • Fixed issue with DbResourceReference.putStream which tried to pass an InputStream to the JDBC driver, which isn't likely to be handled; now reads from the stream to a byte[] and wraps in a SerialBlob
  • Fixed issue when startup-add-missing is true but runtime-add-missing is false it would not really check and add missing on startup
  • Improvements to DB meta data handling for databases like Postgres that default to lower-case table, column, and foreign names
  • Fixed issue with sri.getFieldValuePlainString() calling toString on BigDecimal objects as BigDecimal.toString() uses scientific notation by default and aside from being annoying the parser doesn't handle it and treats things like 100 represented as 1E2 as 1
  • Fixed issue with iterate over a Map when key attribute is set where the key and value were switched in the specified field names
  • Links (including URL parameter and hidden form) now handle Timestamp and BigDecimal the same as hidden form fields. This resolves issues with time zones for Timestamps, and with number parsing for BigDecimals.
  • Fixed issues with transition path-parameter when screen has no actions where transition was not removed from the path name list and path, screen, and transition parameters were not expanded for response parameters
  • Fixed issue in sendEmailTemplate.groovy where webappName was passed into the screen render for the HTML for the email, but not the plain text
  • Fixed issues related to entity-find.@cache attribute used inconsistently in generated code, and more generally with filtering and pagination when using both entity-find.@cache=true and entity-find.search-form-inputs, especially along with entity-find.date-filter.

New in Moqui 1.3.2 (Nov 26, 2013)

  • The main new feature is a write-through per-transaction cache that
  • effectively simulates the database for the scope of the transaction and
  • does all DB updates with a single connection just before commit. This
  • transaction cache is enabled on service definitions using the cache and
  • force-cache options for the service.@transaction attribute. With this in
  • place various Mantle services now run 2-3 times as fast with results
  • validated by extensive automated tests.
  • Another set of new features covers internal profiling for artifact
  • execution (entities, services, screens, transitions, etc). There are
  • various forms of output available including a full artifact call tree with
  • times, a consolidated tree to see own and total for artifacts in context,
  • and a hot spot list by own or total time. This is similar to Java-level
  • profiling tools but focuses on business level artifacts and with a low
  • overhead gathers data always but only generates reports when needed.
  • OrientDB is now included in the framework by default instead of only in an
  • addon component as before. This is useful as a general graph and document
  • database and as an alternative through the Entity Facade for high-write
  • entities like ArtifactHit.
  • New Features:
  • Updated Apache Camel to 2.12.1, Ehcache to 2.7.5, Groovy to 2.1.9,
  • Quartz Scheduler to 2.2.1, SLF4J to 1.6.6, Shiro to 1.2.2, Spock to 0.7
  • Updated ElasticSearch to 0.90.7 and Lucene to 4.5.1
  • OrientDB is now included in the framework by default instead of only in
  • an addon component to have an embedded document and graph NoSQL database;
  • this and other graph databases can be used through the Blueprint and
  • Gremlin APIs
  • Various changes to EntityDatasourceFactory, EntityFindBase, etc to better
  • support other non-JDBC data sources like OrientDB
  • Implemented write-through per-transaction cache (TransactionCache)
  • enabled through the service.@transaction attribute cache and force-cache
  • options or through direct initialization; this is a pretty big new
  • feature that significantly improves performance of various types of
  • services, but has certain limitations as described in the JavaDoc notes
  • in the TransactionCache class and code using it should be tested
  • thoroughly
  • Added econdition.@or-null attribute to make the condition an or between
  • the specified condition and null
  • Added entity.@allow-user-field attribute to specify when UserField defs
  • are considered, for security and performance reasons
  • Added entity.@create-only attribute for immutable entities
  • Added eeca.@get-original-value attribute to get the original (db) value
  • if run on update or delete and before the entity operation
  • Screen form-single forms automatically add a "_formMap" field to the
  • context with the Map used for the form; useful for reused forms that may
  • specify different form-single.@map values
  • XML Actions iterate generates _index and _hasNext fields
  • ArtifactFacade tracks artifact running time, keeps an hierarchical
  • instead of flat history, and can print a tree of the history; can also
  • create a consolidated tree across larger runs to see an overview of own
  • and total time per artifact; can also create a hot spots list by own or
  • total time per artifact to see which took the most time
  • Added gradle tasks to save the Derby databases and ElasticSearch data
  • after a load (loadSave) and to clean out and reload the saved data
  • (reloadSave)
  • Some improvements to error message logging and handling in data loader,
  • ServiceTrigger, and set rollback only
  • When tables are created on the fly they are now only created for write
  • operations, finds just return no results if table does not exist and
  • do not create the table
  • Bug Fixes:
  • Fixed issue in ListCondition with null list entries, and improved the
  • factory method with condition List parameter when List has only one
  • condition to just use that condition
  • Fixed issue in service input conversion treating empty values as nulls
  • Fixed some minor and rare Entity Facade errors as part of more extensive
  • testing for TransactionCache and a code cleanup and consolidation effort

New in Moqui 1.3.1 (Oct 21, 2013)

  • New Features:
  • Performance improvements based on profiling (tested screens run around 1.3 to 2 times as fast)
  • form-list and section-iterate automatically add *_index and *_has_next context fields following the pattern used in Freemarker
  • formDisplayOnly parameter (or context value) to make the form render as display-only (read-only)
  • dynamic and static layouts
  • static layout uses entire browser width and is CSS based
  • dynamic layout uses jQuery Layout plugin and supports closing, resizing, fixed header/footer, separate scrolling left/right, etc
  • popup menus are in the header to save space and for easier layout
  • set action inside form field sub-elements and widget-template-include for parameterized widget-template definitions
  • XML Form pass through of matches (regexp) validation from service
  • Added ServiceTrigger entity to call a service when the record is created; useful for triggering data setup services on data load and so on
  • The loadData execution uses anonymous user for authc and allows any authz for services triggered on data load
  • Bug Fixes:
  • Fixed extraneous close script tags in screen/form HTML output
  • Fixed right/east container-panel field name so size, etc settings apply
  • Fixed calls to startFormListRow that were missing new parameters added to the method; resolves SourceForce Bug #39
  • Fixed issue with a form-list with header form in a dynamic-container; now updates within the containing div using the results of the form submit
  • Fixed issue with service name comparison when running SECA rules
  • Auto reverse relationships better support titles
  • DataDocument no longer includes null fields, empty Maps and Lists
  • Fixed issue with null oldStatusId and setting new statusChanged automatic fields in entity-auto service implementation
  • Fixed entity-find.search-form-inputs.@input-fields-map attribute, groovy generated left out quotes
  • Fixed NPE in EntityUserField code
  • Changed searchFormInputs to default to equals instead of contains; more efficient queries and works for numbers, dates, etc
  • Changed saved session messages and errors to be separate from
  • MessageFacade ones so they still display but don't stop other services from running
  • Fixed EntityFacadeImpl.getAllEntityNames() to not return invalid entity names, caused problems with AuthScreen, etc after an attempt to use an entity with an invalid name
  • Fixed issue with Entity ECA rules where fields set to null were reset back to the value from the DB
  • Fixed issues with export with dependents including making sure all auto-reverse relationships are in place and properly handing relationships with titles when deferring export for fk dependency
  • Fixed issue where secondary sequenced ID did not preserve disableAuthz
  • Fixed issue with DENY record not stopping sub-screens acces

New in Moqui 1.3.0 (Jul 29, 2013)

  • New Features: -
  • Updated Gradle build files to work with Gradle 1.6 (may not work with earlier versions)
  • Updated Apache Camel to 2.11.1, Apache Commons Validator to 1.4.0, Apache Derby to 10.10.1.1, ehcache to 2.7.2, Freemarker to 2.3.20, Groovy to 2.1.6, Quartz Scheduler to 2.1.7
  • Added ElasticSearch 0.90.2 and Lucene 4.3.1 ElasticSearch files are under runtime/elasticsearch and it is initialized and destroyed with the rest of the framework - With ElasticSearch, Lucene, and full ehcache instead of just core the size of Moqui Framework has grown from ~24MB to ~42MB
  • Both ElasticSearch and Camel can be disabled to not init automatically
  • Introduced StatusFlow, StatusFlowItem and StatusFlowTransition entities for improved status flow support. A StatusItem may be used in multiple flows, each flow having its own set of status items and transitions.
  • Entity Facade
  • Added EntityDynamicView.addRelationshipMember() method to easily add member-entity based on relationship definition
  • Added Entity Data Document feature configured by DataDocument* entities which produce a sort of view entity (built on the fly with EntityDynamicView); the actual data documents are nested Maps and Lists produced by the EntityFacade.getDataDocuments() method
  • Added Entity Data Feed feature configured by DataFeed* entities; a feed is associated with one or more DataDocuments that are pushed to a service or pulled through a method call; the first part implemented is a real-time push triggered by entity changes for entities that are part of associated DataDocuments and the document(s) produced and sent to the feed receive service when a transaction is successfully committed
  • Added index#DataFeedDocuments service to easily index all documents associated with a DataFeed within a date range
  • Added search#DataDocuments service which uses ElasticSearch; supports pagination and so on
  • Added Tool app screens for index, search, and export DataDocuments
  • Improved date/time and number parsing for String values passed to an entity, partly so that implicit entity-auto services are more usable
  • Changed to use full entity name (with package) in more places including the entity cache
  • XML Screen and Form
  • Added XML Form fields-not-referenced element to specify where to render the fields not explicitly referenced under the field-layout element
  • Small adjustment to transition parameter so that if explicitly defined as empty that will be used instead of defaulting to value from context or web parameters
  • Screen transition response plain URLs now assemble parameters using response parameter sub-elements
  • Improved form-list with form-list-column so that hidden fields are always rendered along with the form element
  • Added span with id for form-list cell display fields and classes on it for currency and field value Java classes (BigDecimal, Timestamp, etc) plus CSS to center numbers and right align currency amounts
  • Added XML Form field widget element auto-widget-service and auto-widget-entity to do the same thing as auto-fields-* except that they are applied to a single field for more granular control without a bunch of ignores
  • Added dynamic-dialog element to XML Screens; like the container-dialog element but loads the dialog contents from the server when opened
  • Added form-list.@paginate-always-show attribute, defaults to true; set to false to hide pagination control and row count when there is only one page of rows to display; SourceForge feature request #8
  • Added widget-templates file and widget-template-include element under XML Form fields to include widget-templates for widget reuse
  • Added form-list.@skip-form element for use with plain tables that will have nothing to submit; in HTML leaves out form elements
  • Added dynamic-container element to easily setup a section of the screen that is loaded separately from the server for easy update
  • Added background-* attributes to form-single to submit the form in the background and optionally show a message on success and reload a dynamic-container by id
  • In HTML generation script tags spread throughout HTML are now consolidated into a single script tag at the end of the screen output
  • Added editable element like a label but when you click on it an edit box appears to allow editing of the single field (this uses the jeditable jquery plugin)
  • Added WebFacade.sendTextResponse() method to send plain text response - Added User NotificationMessage feature to send messages to users through active listeners or persist them to track receipt and handle delivery when the user is next available. The message is a JSON String (representing a Map). Custom listeners can be added as implementations of the NotificationMessageListener interface. Message pulling is also supported for things like message screens. Listeners may be created for delivery means such as WebSocket, email, etc.
  • Bug Fixes:
  • Fixed URLs for Mantle UBPL links using active screen URL as the default base URL instead of the full URL of the current screen
  • Fixed issue where form-list-column and field-layout nodes in an extended screen modified the original node from the base screen
  • Fixed issue in entity-auto create where automatically set fromDate was not returned in the service result
  • Fixed issue in screens with a form-list and then a form-single where listEntryIndex bleeds over and results in a _?? to field IDs and such
  • Fixed issue with date/time parsing and formatting to more consistently user user time zone, avoids time discrepancies between input and display while leaving hidden fields as plain toString/etc
  • Fixed issue with date and time values going to and from the database when the current user has a time zone different from the system by passing a Calendar object with the user's time zone to the PreparedStatement and ResultSet methods for Date, Time, and Timestamp
  • Fixed issue with automatic case insensitive order by on non-String fields; now ignored automatically when not applicable
  • Fixed issue with hidden fields in form-list header-fields when rendered in HTML with the default macros where the title appeared even if all field types were hidden, and if @hide was set to true the hidden input would not be rendered
  • Fixed issue in XML Form when a field-row is under a field-group element where the field-row was ignored and the fields in the group were displayed twice
  • Fixed issue when making a condition with an empty Map, List, etc returns null instead of an invalid condition
  • Fixed issue with entity find one on a view-entity with no PK fields where no matter the conditions it was considered a full set of PK field constraints causing it to throw out the actual find constraints
  • Fixed issue with form-list formatting when the @multi=true attribute and form-list-column elements are both used in the same form
  • Fixed issue where IN and NOT IN did not add parenthesis if the value was not a Collection; also added splitting of String values used with IN and NOT IN by comma for convenience in specifying these lists of ID values
  • Fixed issues where sequenced values with a non-entity seqName threw an exception and increment by one didn't increment the bank, causing a duplicate key error from the database on insert
  • Fixed issue in Auto Screens where automatic links had wrong parameter name for the entity name (had entityName, now aen)
  • Fixed issue where if a standalone screen (or with lastStandalone set) has pre-actions the screens before it were not pushed to get authz setup; SourceForge Bug #30
  • Fixed issue with display.@currency-unit-field attribute with numbers larger than 1000 because it used the BigDecimal String constructor to parse a String formatted with a comma thousands separator; the L10nFacade.formatCurrency() method now uses a proper locale-aware number parser to parse numbers, and the display FTL macro has been updated to use the field value object directly instead of changing it to a String and then parsing it back to format as currency;
  • Fixed issue with two back-to-back form-list using skip-end on the first and skip-start on the second; now rows are simply appended as would be expected instead of multiple form-list-outer/etc elements
  • Fixed issue where view-entity.entity-condition.date-filter did not work with an empty @valid-date attribute
  • Fixed a few issues with EntityDynamicView (failure to get group name, some better error handling, etc)
  • Fixed issue with view-entity automatic trimming based on used fields where a member-entity with no used fields but that is needed to joining to another member-entity with used fields was not included
  • Fixed issue with tx-commit and tx-rollback parameter missing in method call to run service
  • Fixed bug in MoquiStart where Manifest was sometimes null causing a class not found exception

New in Moqui 1.2.0 (Jan 3, 2013)

  • 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

New in Moqui 1.1.1 (Sep 24, 2012)

  • 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

New in Moqui 1.1.0 (Aug 10, 2012)

  • 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

New in Moqui 1.0.1 (Jan 4, 2012)

  • 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
  • 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

New in Moqui 1.0.0 (Nov 22, 2011)

  • 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)

New in Moqui 1.0 RC 1 (Aug 4, 2011)

  • 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
  • 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

New in Moqui 1.0 Beta 2 (Aug 4, 2011)

  • 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 /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

New in Moqui 1.0 Beta 1 (Aug 4, 2011)

  • 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

New in Moqui 1.0 Preview 3 (Aug 4, 2011)

  • 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

New in Moqui 1.0 Preview 2 (Aug 4, 2011)

  • 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.

New in Moqui 1.0 Preview 1 (Aug 4, 2011)

  • 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