forked from moqui/moqui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ReleaseNotes.txt
2274 lines (2103 loc) · 125 KB
/
ReleaseNotes.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Moqui Framework Release Notes
===========================================================================
Release 1.6.0 - TBD
===========================================================================
Moqui Framework 1.6.0 is a major new feature and bug fix release.
TODO
Non Backward Compatible Changes
- The Screen Facade and ScreenRender interfaces are now in the
org.moqui.screen package (moved from org.moqui.context); most apps do
not use these explicitly, but any code that does needs to be changed
New Features
- Library Updates
- Apache Camel to 2.16.1
- Apache Commons Validator to 1.5.0
- Apache Derby to 10.12.1.1
- Apache HttpClient to 4.5.1
- Apache HttpCore to 4.4.4
- Apache Jackrabbit to 2.11.2
- Ehcache to 2.10.1
- ElasticSearch to 1.7.3
- Groovy to 2.4.5
- H2 to 1.4.190
- JNA to 4.2.1
- JavaMail to 1.5.4
- KIE, Drools to 6.3.0.Final
- Liquibase to 3.4.2
- Log4J to 2.4.1
- OrientDB to 2.1.4
- Quartz Scheduler to 2.2.2
- Screen and Form Features
- Added ScreenTest interface and implementation; easy tool for testing
screens with no Servlet container in place; this uses test stubs for
WebFacade, ServletContext, HttpSession, HttpServletRequest, and
HttpServletResponse
- Added screen and transition render tests for the System and Tools apps
- All XML Form field widgets now support expansion in tooltip string
- When a form-single is rendered the form map is added to a pushed
(isolated) context and popped after; field values can now be referenced
directly in expressions in @condition, @text, etc attributes
- Integration Features
- New Service REST API tool
- define REST resources and methods in XML files (see rest-api-1.6.xsd)
- map methods under resources to service calls and entity operations
- REST resource/id visits are pushed as artifacts so authz may be
granted for parts or all of a REST API by the API instead of by
underlying service or entity
- see example Service REST API in example.rest.xml
- call REST methods through the /rest/s1 transition
- see example client calls in the rest.xml screen definition file
- get Swagger API definition from /rest/service.swagger
- get RAML API definition from /rest/service.raml
- New RestClient API, available through ec.service.rest(), with various
options for doing HTTP requests and parsing response
- Added json-schema for Entity REST API: for all entities get
/rest/entity.json, for a single entity get /rest/entity.json/${name}.json
- Added RAML API definition for Entity REST API at /rest/entity.raml
- Added Swagger API definition for Entity REST API at /rest/entity.swagger
- Entity REST API supports master definitions through
/rest/m1/${entity}/${master} or /rest/v1/${entity}?master=${master};
see comments in the rest.xml screen definition XML file for examples
- Added RAML API definition for Entity Master REST API at /rest/master.raml
- Added Swagger definition for Entity Master REST at /rest/master.swagger
- SystemMessage entity has additional fields to identify messages
- Changed receive#SystemMessage to an interface, now use
receive#IncomingSystemMessage for remote calls, will call the
SystemMessageType.receiveServiceName service if specified to save message
- Added EDI handler (parser and generator), used in Mantle for X12 messages
- Email Features
- Various improvements to email message polling (calling EM-ECA rules)
including support for Java System Properties pass through and fix for
password pass through for IMAPS/etc
- Email ECA structure significantly improved, for details see the
org.moqui.EmailServices.process#EmailEca service interface
- Improved sending EmailTemplate with support for reply to and bounce
addresses from EmailTemplate and CC/BCC addresses from both EmailTemplate
and service parameters
- Security Features
- Better protection against CSRF/XSRF attaches with a session token as per
https://www.owasp.org/index.php/CSRF_Prevention_Cheat_Sheet;
- when enabled (webapp.@require-session-token in Moqui Conf XML file not
false) a moquiSessionToken parameter must be passed
- applies to all transition requests with actions by all methods except,
GET after the first request in a session
- for REST/etc API calls with authentication for each call is ignored
- can be disabled per screen transition with @require-session-token=false
- Password reset now sets a reset password separate from the current
password that may only be used to change the password; current password
stays valid for password change or login (if email-require-change=false)
- Entity Features
- Added field.@create-only attribute, defaults to entity.@create-only
value, create only now checked at field level on update (only at entity
level on delete)
- New concept of explicit master entity definitions with details made up of
related entities; definitions go in new entity.master element; there are
new methods in EntityValue, EntityList, and EntityFind to get value Maps
for the master record plus all details
- EntityDataLoader has new options for loading CSV files to specify the
entity or service name and field list through the API instead of in
records 1 and 2 of the CSV file
- EntityDataLoader has new defaultValues Map option for default values to
be used by field/parameter name for entity stores and service calls
- Components may now have a component.xml with a single component element,
the same component element that is used in the Moqui Conf XML file; if a
name is specified it will override the directory name; added a depends-on
element which modifies the component order at runtime
- Component directories (referred to by component-list.component-dir in the
Moqui Conf XML file) now supports a components.xml file (must use that
filename) to specify which components to load and in which order
- Localized strings may now contain a double hash (##) to specify context
where a single word in the default language (ie English) is ambiguous; at
runtime if no matching LocalizedMessage is found the text before the
double hash will be used to lookup records or as the default value
- Service to lookup IP geo data (from freegeoip.net), called by default on
login (can be disabled with server-stats.@visit-ip-info-on-login)
- Transaction Cache better supports creates/updates/deletes within a
transaction; instead of consolidating all changes into one it keeps a
list of changes and runs in order to avoid issues with foreign keys, etc
Bug Fixes
- Fixed issue in the Tools EntityDetail screen where entities with many
dependents (like Enumeration, Uom, etc) caused an out of memory error;
GitHub issue #149
- Fixed XML Actions FTL error for entity-find.@having-econditions
- Fixed issue where ResourceFacadeImpl.setInContext localized values when
expanding; caused problems with set elements in widget-template-include
- Fixed issue with multiple render-mode elements where there is no
text.@type attribute; GitHub issue #158
===========================================================================
Release 1.5.3 - 11 Sep 2015
===========================================================================
Moqui Framework 1.5.3 is a minor new feature and bug fix release.
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)
===========================================================================
Release 1.5.2 - 2 May 2015
===========================================================================
Moqui Framework 1.5.2 is a minor new feature and bug fix release.
The main improvement in this release is significantly better performance.
Overall performance is about 3x faster, with various lower level entity and
service operations around 10x faster. There are also various improvements
to stability, especially in production under a load. Some of these are from
better concurrency handling and other improvements in Moqui, others from
updates to libraries including a newer version of Bitronix TM.
The H2 database is now used by default instead of Derby. There is now a
CUPS server integration using Cups4J including services to print, and
services and screens for managing printers and print jobs.
There are fixes for running Moqui on Microsoft Windows, and for using the
OrientDB database through the Entity Facade. These were both supported in
the past but were broken in recent versions of Moqui Framework.
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
Windows 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
changes since 1.5.0
===========================================================================
Release 1.5.1 - 29 Mar 2015
===========================================================================
Moqui Framework 1.5.1 is a minor new feature and bug fix release.
New features in this release include various enhancements to DataDocument
functionality and the introduction of the search#CountBySource to be used
for analytics and reporting using ElasticSearch as the data store. Note
that as part of these changes the fields of the primary entity of a
DataDocument are in the root map/object of the document instead of in a
map/object names for the primary entity.
There is also new functionality for handling JSON documents in more places
including load/import and write/export of entity data and a generic entity
REST interface following various RESTful best practices. See the rest.xml
screen file for more details (comments there with examples, etc).
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
===========================================================================
Release 1.5.0 - 07 Mar 2015
===========================================================================
Moqui Framework 1.5.0 is a major new feature and bug fix release.
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.
NOTE: This release, just as the previous, required JDK 7 to run. It also
includes the invoke dynamic variation of Groovy (which requires Java 7)
for significantly enhanced performance.
NOTE: The webroot, tools, and example components are now in the new
runtime/base-component directory instead of the runtime/component directory
to keep them separate from add-on components. There is also a new
runtime/component-lib directory for library components that are loaded
after mantle (if present) and before the components in the
runtime/component directory.
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, thanks to contribution
from Osman Nuri Okumuş (onokumus), the author of Metis; 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
in 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
to 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.
===========================================================================
Release 1.4.1 - 01 Aug 2014
===========================================================================
Moqui Framework 1.4.1 is a minor new feature and bug fix release. Many of
the new features and bug fixes are related to multi-tenant support
including better isolation of tenants and tenant provisioning services.
Other fixes and improvements are related to Service ECA rules, jobs, DB
setup, and the tx cache.
This release also has various embedded documentation (annotations, etc)
improvements done along with the Making Apps with Moqui book which is now
available and has comprehensive documentation of Moqui Framework and a
summary of Mantle Business Artifacts.
NOTE: Starting with this version Moqui Framework requires Java 7 or later
because updated libraries require Java 7. Partly because of this Moqui
itself will also start to use Java 7 features.
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.
===========================================================================
Release 1.4.0 - 21 Mar 2014
===========================================================================
Moqui Framework 1.4.0 is a major new feature and bug fix release.
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
(see https://github.com/onokumus/Bootstrap-Admin-Template);
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.
===========================================================================
Release 1.3.2 - 20 Nov 2013
===========================================================================
Moqui Framework 1.3.2 is a minor new feature and bug fix release.
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
===========================================================================
Release 1.3.1 - 20 Oct 2013
===========================================================================
Moqui Framework 1.3.1 is a minor new feature, bug fix, and performance
enhancement release.
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