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