forked from moqui/moqui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathReleaseNotes.txt
1496 lines (1388 loc) · 82.7 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.3.3 - Planned for 21 Mar 2014
===========================================================================
Moqui Framework 1.3.3 is a minor new feature and bug fix release.
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
- Updated Apache HttpCore to 4.3.1, HttpClient to 4.3.2, Commons Logging
to 1.1.3, Commons Codec to 1.6
- Added Apache Commons CSV 1.0-SNAPSHOT 20140122
- 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
- The loadData execution uses anonymous user for authc and allows any authz
for services triggered on data load
Bug Fixes:
- Fixed extraneous close script tags in screen/form HTML output
- Fixed right/east container-panel field name so size, etc settings apply
- Fixed calls to startFormListRow that were missing new parameters added
to the method; resolves SourceForce Bug #39
- Fixed issue with a form-list with header form in a dynamic-container; now
updates within the containing div using the results of the form submit
- Fixed issue with service name comparison when running SECA rules
- Auto reverse relationships better support titles
- DataDocument no longer includes null fields, empty Maps and Lists
- Fixed issue with null oldStatusId and setting new statusChanged automatic
fields in entity-auto service implementation
- Fixed entity-find.search-form-inputs.@input-fields-map attribute, groovy
generated left out quotes
- Fixed NPE in EntityUserField code
- Changed searchFormInputs to default to equals instead of contains; more
efficient queries and works for numbers, dates, etc
- Changed saved session messages and errors to be separate from
MessageFacade ones so they still display but don't stop other services
from running
- Fixed EntityFacadeImpl.getAllEntityNames() to not return invalid entity
names, caused problems with AuthScreen, etc after an attempt to use an
entity with an invalid name
- Fixed issue with Entity ECA rules where fields set to null were reset
back to the value from the DB
- Fixed issues with export with dependents including making sure all
auto-reverse relationships are in place and properly handing
relationships with titles when deferring export for fk dependency
- Fixed issue where secondary sequenced ID did not preserve disableAuthz
- Fixed issue with DENY record not stopping sub-screens access
===========================================================================
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://quartz-scheduler.org/documentation/quartz-2.2.x/cookbook/JobInitPlugin
- 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
===========================================================================