-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathRELEASE_NOTES.txt
1630 lines (1363 loc) · 65.7 KB
/
RELEASE_NOTES.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
6.0.0
=====
- Importing excel files improvements :
- The sheet used by the import is the last visited one (i.e it was always the 1st)
- Hidden rows and columns are ignored (i.e hidden rows and columns were imported)
- Formulas are supported
- Cell formatting is ignored, you can use any colors, font, etc.
- Module headerDescription property has been renamed to pageHeaderDescription
- EAxis, EBorderType, EHorizontalAlignment, EHorizontalPosition, ELabelPosition, EOrientation, EPosition,
ESelectionMode enums are now part of the util.gui package (and module). In the rare case where you use them
programmatically, you have to change the import package of those classes.
5.0.0
=====
- There seems to be a problem in Groovy with static constants inherited by interfaces. Jspresso 5 generates interfaces
for your extensions (holding the constants of the computed properties) and makes the entities inherit the generated
extension interfaces. So the constants defined int the new extensions generated interfaces should be available from
the entity classes. This is the case in Java, but seems problematic in Groovy... So unfortunately, when referencing
a constant, you have to reference the interface where it is explicitly defined and not a subclass or subinterface.
This is fully transparent in Java but unfortunately not in Groovy. So whenever you use groovy to code your extensions,
you have to reference the constants where they are actually defined (entity or extension interface).
- The new generator does not use anymore final "_" to name Java constants when they are SQL reserved keywords.
Programs referencing such named constants should be modified accordingly.
- Edit startup/qooxdoo/client/src/main/py/config.json and add :
"extend": [
"jspresso-qooxdoo::common"
],
OR
"extend": [
"jspresso-ext-qooxdoo::common"
],
just below :
"jobs" :
{
"common" :
{
- In order to ease load testing (see #240) , in your javascript code, replace all references to :
qx.io.remote.Rpc
by
org.jspresso.framework.io.Rpc
- In order to implement https://github.com/jspresso/jspresso-ce/issues/187, the org.jspresso.framework.action.IAction
interface now extends org.jspresso.framework.util.exception.IExceptionHandler. This should not require any modification
to existing code unless you directly implement org.jspresso.framework.action.IAction without inheriting
org.jspresso.framework.application.action.AbstractAction. In the latter case, you have now to implement the method
public boolean handleException(Throwable ex, Map<String, Object> context)
- Jetty maven plugin changed its groupId. In the root pom.xml of your project, replace :
<groupId>org.mortbay.jetty</groupId>
by
<groupId>org.eclipse.jetty</groupId>
- Rename all your sjs files from .groovy to .sjs and update your application.groovy content to reflect this change.
- JasperReports plugin changed from codehaus to to alexnederlof
(https://github.com/alexnederlof/Jasper-report-maven-plugin).
Replace your JasperReports compilation section in core/pom.xml by the following one :
<plugin>
<groupId>com.alexnederlof</groupId>
<artifactId>jasperreports-plugin</artifactId>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>jasper</goal>
</goals>
</execution>
</executions>
<configuration>
<outputDirectory>${project.build.directory}/generated-resources/jasperreports</outputDirectory>
</configuration>
</plugin>
- Flex has been upgraded to the latest 4.15 version. If necessary in your project, change all dependencies :
from
<dependency>
<groupId>org.apache.flex.framework</groupId>
<artifactId>flex-framework</artifactId>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.apache.flex.framework</groupId>
<artifactId>framework</artifactId>
<type>swc</type>
<scope>external</scope>
</dependency>
to
<dependency>
<groupId>org.apache.flex</groupId>
<artifactId>framework</artifactId>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.adobe.flash</groupId>
<artifactId>framework</artifactId>
<type>pom</type>
</dependency>
- We have moved to Apache BlazeDS implementation, so replace all blazeds dependencies sections in your webapp modules
by the following one :
<dependency>
<groupId>org.apache.flex.blazeds</groupId>
<artifactId>flex-messaging-remoting</artifactId>
</dependency>
<dependency>
<groupId>org.apache.flex.blazeds</groupId>
<artifactId>flex-messaging-proxy</artifactId>
</dependency>
- Flex davisualization dependency management has been removed. Most of the time, you should be able to safely delete
them. However, whenever necessary, use the following dependencies in your projects Flex modules :
<dependency>
<groupId>org.apache.flex.framework</groupId>
<artifactId>advancedgrids</artifactId>
<type>swc</type>
</dependency>
<dependency>
<groupId>org.apache.flex.framework</groupId>
<artifactId>charts</artifactId>
<type>swc</type>
</dependency>
- Migrated to jfreechart 1.0.19. The artifact groupId changed so replace :
<dependency>
<groupId>jfree</groupId>
<artifactId>jfreechart</artifactId>
</dependency>
by
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
</dependency>
- Migrated to log4j 2.4.1. If you want to migrate your projects too, log4j and log4j-slf4j binding dependencies
should be replaced (keep the scopes) :
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
by
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</dependency>
Note that Log4j 2.x does not support properties configuration files anymore and that the configuration file should be
named log4j2.xml. Please read :
https://logging.apache.org/log4j/2.x/manual/configuration.html
https://logging.apache.org/log4j/2.x/manual/migration.html
- All slf4j (e.g. slf4j-log4j12, log4j) binding dependencies have been removed from the framework. Only the api
dependency remains. This means that, depending on the actual logging framework to use (e.g. log4j), the corresponding
slf4j binding must be provided either as a project dependency or as a runtime dependency (e.g. provided by the
application server).
- commons-lang dependency management has been removed from the root pom in favor of commons-lang3.
4.2
===
4.1
===
- We have migrated to Apache DBCP2.
All explicit dependencies to commons-pool must be removed from your pom.xml, i.e. delete in all pom.xml :
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
</dependency>
You have to change the dependency on the DBCP artifact :
replace in every pom.xml :
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
</dependency>
by :
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
</dependency>
search and replace globally :
org.apache.commons.dbcp.BasicDataSource
by :
org.apache.commons.dbcp2.BasicDataSource
adapt any custom configurations of DBCP datasource using the following document :
http://commons.apache.org/proper/commons-dbcp/configuration.html
- We have created new Qooxdoo themes in Jspresso CE and EE. If you want to benefit from the new themes, please update
your application startup/qooxdoo/client/src/main/py/config.json :
for Jspresso EE :
replace :
{
"path": "${TARGET}/jspresso-ext-qooxdoo-zip/py/library.json",
"as": "jspresso-ext-qooxdoo"
}
by :
{
"path": "${TARGET}/jspresso-ext-qooxdoo-zip/py/library.json",
"as": "jspresso-ext-qooxdoo"
}
,
{
"path": "${TARGET}/jspresso-qooxdoo-theme-zip/py/library.json",
"as": "jspresso-qooxdoo-theme"
}
replace :
"extend" : ["jspresso-ext-qooxdoo::libraries"],
by :
"extend" : [
"jspresso-ext-qooxdoo::libraries",
"jspresso-ext-qooxdoo-theme::libraries"
],
- We have reworked the Flex themes in Jspresso CE and EE. If you want to benefit from the new themes, please update
your application startup/flex/client/src/main/flex/FlexApplicationStartup.mxml the following way :
add for Jspresso CE :
import org.jspresso.framework.flex.controller.ThemedFlexController;
or for Jspresso EE :
import org.jspresso.framework.ext.flex.controller.ThemedFlexController;
and replace :
flexController = new (Enhanced|Default)FlexController(remoteController, new Locale(resourceManager.localeChain[0]).language);
by :
flexController = new ThemedFlexController(remoteController, new Locale(resourceManager.localeChain[0]).language);
For CE, you also have to rework the startup/flex/client/pom.xml. Replace :
<dependency>
<groupId>org.apache.flex.framework</groupId>
<artifactId>spark</artifactId>
<type>swc</type>
<scope>theme</scope>
</dependency>
by :
<dependency>
<groupId>org.apache.flex.framework.themes</groupId>
<artifactId>halo</artifactId>
<type>swc</type>
<scope>theme</scope>
</dependency>
<dependency>
<groupId>org.jspresso.framework</groupId>
<artifactId>jspresso-flex-theme</artifactId>
<type>swc</type>
<scope>theme</scope>
</dependency>
For EE, you also have to rework the startup/flex/client/pom.xml. Add :
<dependency>
<groupId>org.apache.flex.framework.themes</groupId>
<artifactId>halo</artifactId>
<type>swc</type>
<scope>theme</scope>
</dependency>
<dependency>
<groupId>org.jspresso.framework</groupId>
<artifactId>jspresso-flex-theme</artifactId>
<type>swc</type>
<scope>theme</scope>
</dependency>
- Due to migration to Qooxdoo 4.1, you should change startup/qooxdoo/client/src/main/py/config.json the following way :
delete the line :
"CSSMIN_CMD" : "${PYTHON_CMD} ${QOOXDOO_PATH}/tool/bin/cssmin.py",
replace all occurences of "minify-css" by "combine-css"
replace :
"${CATCMD} ${BUILD_PATH_CSS}/${MOBILE_CSS_PATH} ${RESOURCES}/${APPLICATION_CSS} > ${TARGET}/cache-sass/tmp.css",
"${CSSMIN_CMD} < ${TARGET}/cache-sass/tmp.css > ${BUILD_PATH}/resource/${APPLICATION_CSS}"
by :
"${CATCMD} ${BUILD_PATH_CSS}/${MOBILE_CSS_PATH} ${RESOURCES}/${APPLICATION_CSS} > ${BUILD_PATH}/resource/${APPLICATION_CSS}"
replace all occurrences :
${SCSS_CMD}
by :
${SCSS_CMD} --style compressed
- Following our will to support other persistent stores (e.g. MongoDB, see RFE #1234), AbstractHibernateAction and
AbstractHibernateCollectionAction have been deleted. Your actions should inherit BackendAction and
AbstractCollectionAction. Persistences methods, thate were generic, have been migrated to these classes. The only
things that will change are that you will be forced to implicitely cast backend controller to
HibernateBackendController or MongoBackendController, depending on your persistence layer.
- Due to RFE #1221, DefaultCriteriaFactory.createXXXRestriction method signatures have been augmented with
componentDescriptor, queryComponent and context in order to be able to take options in subclasses.
4.0
===
- Modules do not base their equality on object equality anymore. 2 arbitrary modules are now considedered equal
if and only if : they have the same name AND they have the same i18nNameKey AND they have the same view descriptor.
BeanModules augment this rule by checking equality of their beans.
- In the webapp/pom.xml replace the whole flexmojos wrapper plugin execution by the following block :
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<stripVersion>true</stripVersion>
<includeTypes>swf</includeTypes>
<outputDirectory>${project.build.directory}/${project.artifactId}/flex</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
- Wenhever you use the Jetty Maven plugin, please replace the <webApp> configuration tag by <war> in your root pom.xml.
- In order to clarify class usage between Jspresso CE and Jspresso EE, all Jspresso EE classes now belong to the
org.jspresso.framework.ext (sub)package(s)
- Migrated to Apache Flex 4.12. Please change all the references in pom.xml except for datavizualization artifact.
com.adobe.flex.framework
to
org.apache.flex.framework
Whenever you import dependencies that have a transitive dependency towards the old com.adobe.flex.framework
artifacts, you might have to exclude the transitive dependencies like below or you might face flexmojos stating
that you have incompatible compiler / framework versions :
<dependency>
<groupId>com.example.dependency</groupId>
<artifactId>dependency-flex</artifactId>
<type>swc</type>
<exclusions>
<exclusion>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
- We have changed the way spec('') get generated in SJS >= 1.3. Now, when spec('xxx') is declared, the context to
generate depends on the backend/frontend/view previous node. For instance, when generating a spec('xxx') under a
frontend node, the call should be changed from :
frontendBuilder.writeOutputFile('xxx',...)
to
frontendBuilder.writeOutputFile('frontend/xxx',...)
- We have removed the possibility to programmatically set an action to be transactional or asynchronous. Now,
the only way to go is using annotations.
- In order to fullfil RFE #1124, the checkPasswordValidity method signature has been augmented with the action
context as parameter. This allows to test against the session login in order to enforce password strength.
- Removed dependency towards BSF 2.x and now use the JSR-223 (javax.script) that is included in Java6 and onwards.
- USER is now an SQL protected keyword (it actually is in Oracle), so by default, the generated table name is now
appended with an underscore. If you have a USER table in MySQL for instance, either rename it to USER_ or
force its sqlName to 'USER' to keep the legacy name. Same apply for all "user" properties.
3.7
===
- ICollectionPropertyProcessor now use a third parametrized type in order to define the collection elements type. All
your subclasses or implementations should now define this new parametrized type. see RFE #838.
- In your startup/flex/client/pom.xml, make sure that all theme artifacts listed in the dependency section are marked
with <scope>theme</scope>. Ther can be more than one.
- Moved to Java 7. Source and target compilation versions moved from 1.6 to 1.7.
- IQueryViewDescriptorFactory API has changed to satisfy RFE #944. The action contaxt, if any,
is passed to the factory method.
- DefaultCriteriaFactory properted API has changed for a more consistent naming policy. All createXXXRestriction
methods now actually return a criterion and does not have the surrounding detached criteria as parameter.
- If you use jspresso libraries that were not built with Jspresso 3.7+, please add the following lines to
core/pom.xml inside the antrun plugin <target> section in order to remove any collection order-by handed by
Hibernate :
<replaceregexp byline="true" flags="mg" preserveLastModified="true">
<regexp pattern="order-by="[^"]*"" />
<substitution expression="" />
<fileset dir="${xdoclet.dest}">
<include name="**/*.hbm.xml" />
</fileset>
</replaceregexp>
If you don't do the above and use libraries the were built with previous Jspresso versions,
you might recieve errors like "Could not locate table which owns column [ID] referenced in order-by mapping".
This is due to bug https://hibernate.atlassian.net/browse/HHH-7630
- In QueryEntitiesAction, getCriteriaFactory(), getCriteriaRefiner, getComponentRefiner now take the action context
as parameter to enable feature #1074.
- Deprecated org.jspresso.framework.application.backend.action.persistence.hibernate.IQueryComponentRefiner has been
removed in favor of org.jspresso.framework.application.backend.action.IQueryComponentRefiner
- In your index.html, change the background-color values (if any) to #ffffff
- In your webapp/pom.xml, remove <scope>provided</scope> on the following dependency :
<dependency>
<groupId>your.app.groupId</groupId>
<artifactId>artifactId</artifactId>
<type>swf</type>
</dependency>
- In your startup/flex/client/pom.xml file, change :
<locales>
...
</locales>
to
<localesCompiled>
...
</localesCompiled>
- In startup/flex/client/pom.xml, remove all <localesCompiled> nested elements except <locale>en_US</locale>
- In your startup/flex/client/pom.xml files, delete :
<mergeResourceBundle>true</mergeResourceBundle>
- All references to stylesheets, if any, sould be made relative to the mxml file. For example, change :
<mx:Style source="/org/jspresso/hrsample/theme.css" />
to
<mx:Style source="../resources/org/jspresso/hrsample/theme.css" />
- In your startup/flex/client swf project add either (or both) dependency to switch the used theme to spark or halo
unless you have a custom theme :
<dependency>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>spark</artifactId>
<type>swc</type>
<scope>theme</scope>
</dependency>
or
<dependency>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>halo</artifactId>
<type>swc</type>
<classifier>theme</classifier>
<scope>theme</scope>
</dependency>
- Migrated to Flex 4.6
- Migrated to FlexMojos 5.0-beta. You have to change all references to the Flexmojos plugin to the new groupId.
Search and replace :
<groupId>org.sonatype.flexmojos</groupId>
by
<groupId>net.flexmojos.oss</groupId>
- Search and replace :
<targetPlayer>....</targetPlayer>
by
<targetPlayer>11.1.0</targetPlayer>
- If you use Flex 3 legacy skins / themes, add the following <configuration> entry in the FlexMojos plugin entry in
startup/flex/client/pom.xml :
<compatibilityVersion>3.0.0</compatibilityVersion>
- Now using the org.picketbox:jbosssx and org.picketbox:picketbox-spi-bare dependencies in place of the JBossAS one.
When running under JBoss, it is now the dependencies to exclude by marking them <scope>provided</scope>.
- Migrated to Spring 3.2
- Check that all references to Spring hibernate3 package are removed from your project in java,
spring xml and SJS. Do not change any reference to the hibernate3 plugin inside your pom.xml.
- Migrated to Hibernate 4. HibernateTemplate based API has been removed. From now on, you must use
the equivalent getHibernateSession(...) that leverages the Hibernate getCurrentSession() method.
- The API for IBackendController.registerEntity(IEntity entity) changed. There is no return value anymore
since the passed entity is the one registered (no cloning performed)
and the second parameter (isEntityTransient) has been removed since it is now safe to rely on entity.isPersistent().
3.6
===
- Some API methods signature have been improved. No cast is required to the target type anymore when doing a
getSelectedModel(context) for instance. The return type is now parameterized.
- New locales : IT, CS, SK, RU, BG, TR
In order to use the new translation locales in existing projects :
Edit startup/qooxdoo/client/src/main/py/config.json and change :
"LOCALES" : ["en","fr",...],
to
"LOCALES" : ["en","fr",..., "it", "cs", "sk", "ru", "bg", "tr"],
Edit startup/flex/client/pom.xml and change :
<locales>
<locale>en_US</locale>
<locale>fr_FR</locale>
...
</locales>
to
<locales>
<locale>en_US</locale>
<locale>fr_FR</locale>
...
<locale>it_IT</locale>
<locale>cs_CZ</locale>
<locale>sk_SK</locale>
<locale>ru_RU</locale>
<locale>bg_BG</locale>
<locale>tr_TR</locale>
</locales>
Create the it_IT, cs_CZ, sk_SK, ru_RU, bg_BG, tr_TR directories in startup/flex/client/src/main/locales.
- Flex date fields have been made un-resizable in order to fix the bug #980. This may introduce changes in form layouts
(specially filter forms) containing date fields. Please review them carefully.
- The getPropertyView(context) has been removed since the only thing that is actually useful is the underlying
property descriptor. It has been replaced by the getPropertyViewDescriptor(context) method.
- Property processors, if any, will now be invioked on computed properties with delegateWritable=true
- Be sure to install "Jspresso Developer Studio M2E Configurator Feature" along with latest JDS from the Jspresso update-site.
As of this writing, it is only available from the Jspresso SNAPSHOT Eclipse update site, i.e. :
http://www.jspresso.org/external/updates-snapshot/e37/sjsplug/
- Log4j dependencies have been removed from core Jspresso artifacts to ensure that only SLF4J is used. Please ensure that
your code only depends from SLF4J and not from Log4j.
- In order to greatly improve user experience in Eclipse and Jspresso builds speed, we have mavenized SJS and the entity
generator so that they can be finely controlled by M2E (Maven Eclipe integration). Existing projects should migrate to
these new maven plugins by changing the following in core/pom.xml (example taken from HRSample, please adapt to your
project names) :
* delete * :
------------
<execution>
<id>generate-dsl-application</id>
<phase>generate-sources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>${basedir}/src/main/dsl/application.groovy</source>
<properties>
<srcDir>${basedir}/src/main/dsl</srcDir>
<outputDir>${project.build.directory}/generated-resources/dsl</outputDir>
<modelOutputFileName>dsl-model.xml</modelOutputFileName>
<viewOutputFileName>dsl-view.xml</viewOutputFileName>
<frontOutputFileName>dsl-frontend.xml</frontOutputFileName>
<backOutputFileName>dsl-backend.xml</backOutputFileName>
</properties>
<classpath>
<element>
<groupId>org.jspresso.contrib</groupId>
<artifactId>jspresso-sjs</artifactId>
<version>${sjs.version}</version>
</element>
</classpath>
</configuration>
</execution>
* add * :
---------
<plugin>
<groupId>org.jspresso.maven</groupId>
<artifactId>sjs-maven-plugin</artifactId>
<executions>
<execution>
<id>generate-dsl-application</id>
<goals>
<goal>compile-sjs</goal>
</goals>
</execution>
</executions>
</plugin>
* delete * :
------------
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>generate-entities</id>
<phase>generate-sources</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>org.jspresso.framework.tools.entitygenerator.EntityGenerator</mainClass>
<arguments>
<argument>-beanFactorySelector</argument>
<argument>org/jspresso/hrsample/beanRefFactory.xml</argument>
<argument>-applicationContextKey</argument>
<argument>hrsample-model-context</argument>
<argument>-templateResourcePath</argument>
<argument>${generator.templateResourcePath}</argument>
<argument>-templateName</argument>
<argument>${generator.templateName}</argument>
<argument>-outputDir</argument>
<argument>${project.build.directory}/generated-sources/entitygenerator</argument>
<argument>-includePackages</argument>
<argument>org.jspresso.hrsample.model</argument>
</arguments>
</configuration>
</plugin>
* delete * :
------------
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>pre-process-resources</id>
<phase>generate-sources</phase>
<goals>
<goal>resources</goal>
</goals>
</execution>
</executions>
</plugin>
* add * :
---------
<plugin>
<groupId>org.jspresso.maven</groupId>
<artifactId>entitygenerator-maven-plugin</artifactId>
<executions>
<execution>
<id>generate-entities</id>
<goals>
<goal>generate-entities</goal>
</goals>
<configuration>
<beanFactorySelector>org/jspresso/hrsample/beanRefFactory.xml</beanFactorySelector>
<applicationContextKey>hrsample-model-context</applicationContextKey>
<templateResourcePath>${generator.templateResourcePath}</templateResourcePath>
<templateName>${generator.templateName}</templateName>
<includePackages>
<param>org.jspresso.hrsample.model</param>
</includePackages>
</configuration>
</execution>
</executions>
</plugin>
* delete * :
------------
<source>${project.build.directory}/generated-sources/entitygenerator</source> from the build-helper plugin configuration
* delete * :
------------
<resources>
...
</resources>
- Ensure that antrun plugin and ant versions are at least the following. Otherwise, add the properties below to your
root pom.xml :
<antrun-plugin.version>1.8</antrun-plugin.version>
<ant-nodeps.version>1.8.1</ant-nodeps.version>
- In order to speed up builds in Eclipse, please modify all project pom.xml by adding preserveLastModified="true" at the end
of each replaceregexp instruction. For instance :
<replaceregexp byline="true" preserveLastModified="true">
At the end of the antrun tasks, add :
<delete dir="${project.build.directory}/antrun" />
Replace each <tasks>...</tasks> by <target>...</target>
- We have leveraged Spring session synchronization instead of Hibernate's one. This is now much more accurate and flexible
and we don't need to keep track anymore of the underlying transaction. So the API has been reverted for all UOW methods
that don't take any parameter anymore. You can safely get rid of them in your use.
- We have completely reviewed the rules about rounding. Every decimal setters are now intercepted and rounded on the fly using
the maxFractionDigit property which is now garanteed to always return non-null value that defaults to 2.
- Mandatory property checks are now only performed at save / update time. This allows for having temporarilly null values on
mandatory properties until the save is actually performed. Other value integrity pre-processing are kept at set-time.
- EditSelectedComponentAction does not have default hardcoded values anymore. They are now injected through Spring using the bean
"editSelectedComponentActionBase". So whenever you use this class directly in your application, make sure to inherit this parent bean
in order to benefit from the defaults.
3.5.15
======
- Starting from Jspresso 3.5.15, there is no need to augment the service delegates implementation signature with the target
component/entity as first parameter. Jspresso will inject it in the implementation instance in a thread-safe manner so that
it is now accessible using the getComponent() method, exactly like an extension. All you have to do is inherit the abstract class
org.jspresso.framework.model.component.service.AbstractComponentServiceDelegate. This way, service delegates implementation classes
can implement the service interface and everything is cleaner regarding IDE suppport as well as compile-time checks. Note that the old
legacy service delegates are still supported seamlessly.
- In order to introduce support for nested transactions, we have augmented the signature of all TX synchronization methods
on the backend controller in order to pass the underlying transaction as parameter. It is legal to call those methods
with a null parameter when artificially beginnig / committing / rollbacking a UOW in order to manage in-memory only transactions.
So all application code like beginUnitOfWork() can safely be changed to beginUnitOfWork(null)
3.5.14
======
- Due to RFE #812 we have changed the return type of ILovResultViewDescriptorFactory in order to be able to return
an arbitrary view (that must at least be led by a collection view to bind the results). The method createResultViewDescriptor
now returns a more generic BasicViewDescriptor that is dig to find the leading collection view. This allows to implement
LOVs with master-detail result views for instance.
- AbstractTestDataPersister now implements with a final method createTestData(). This is because it has to perform some
mandatory operations around the actual creation of data. The method to override is now called createAndPersistTestData().
You have to rename the existing createTestData method to createAndPersistTestData.
- BackendControllerHolder.setCurrentBackendController() has been splitted in two :
- setSessionBackendController : that should be used by the frontend controller to set the session-wide backend controller
- setThreadBackendController : that should be used by (sub)threads in order to override the session-wide backend controller.
- A new sanity check has been introduced in order to check that an action chain does not modify its internal state during its execution.
Doing so would break the action chain thread-safety and thus produce very undesirable effects in multi-user environments. As a reminder
all dynamic state depending on a certain execution has to transit through the action context that belongs to the execution and thus
is not shared.
- Due to bug #743, the following standard action definitions have been refactored in order to avoid registering a backend action
with "Front" in it's name. You should take care of this change if and only if you have overriden these action definitions
in your project :
<bean id="addAnyToMasterFrontAction" class="org.jspresso.framework.application.backend.action.AddAnyCollectionToMasterAction" />
changed to :
<bean id="addAnyToMasterBackAction" class="org.jspresso.framework.application.backend.action.AddAnyCollectionToMasterAction" />
<bean id="addAnyToMasterFrontAction" parent="addToMasterFrontAction">
<property name="wrappedAction" ref="addAnyToMasterBackAction"/>
</bean>
<bean id="checkAllModulesDirtyStateFrontAction" class="org.jspresso.framework.application.backend.action.module.CheckAllModulesDirtyStateAction" />
changed to :
<bean id="checkAllModulesDirtyStateBackAction" class="org.jspresso.framework.application.backend.action.module.CheckAllModulesDirtyStateAction" />
<bean id="checkAllModulesDirtyStateFrontAction" class="org.jspresso.framework.application.frontend.action.FrontendAction">
<property name="wrappedAction" ref="checkAllModulesDirtyStateBackAction" />
</bean>
<bean id="checkModuleDirtyStateFrontAction" class="org.jspresso.framework.application.backend.action.module.CheckModuleDirtyStateAction" />
changed to :
<bean id="checkModuleDirtyStateBackAction" class="org.jspresso.framework.application.backend.action.module.CheckModuleDirtyStateAction" />
<bean id="checkModuleDirtyStateFrontAction" class="org.jspresso.framework.application.frontend.action.FrontendAction">
<property name="wrappedAction" ref="checkModuleDirtyStateBackAction" />
</bean>
- The instance used as session entity registry by the backend controller is now directly created by the controller instead
of being injected by the DI container. The setter has been removed. In the (rather unexpected) eventuality you have overriden the
"entityRegistry" property on a specific backend controller definition, you should get rid of it.
- A new regex has been introduced in order to secure more strongly local resources downlmoad :
(classpath|http):[A-Za-z0-9_\-/ ]*\.(png|jpg|jpeg|gif|pdf|swf.?)
- getNext/WrappedAction have been made public in order to allow exploring the action chain programmatically.
If you've overridden those methods in subclasses, please align visibility.
- controller onModuleEnter action executes now before the module entry action. This makes the order
of actions executions more coherent, i.e. :
controller.onModuleEnter
module.entry
module.exit
controller.onModuleExit
- in webapp/flex/index.html, replace :
onLoad="window.document['hrsample-startup-flex-client'].focus()"
by
onLoad="focusFlex()"
- in webapp/flex/index.html, replace the whole section (replace ${application} by your application name):
<script langugage='javascript' type="text/javascript">
function getRootURL()
{
return location.href.substring(0,location.href.indexOf("/flex")); ;
}
function stop()
{
// Here you'll need to provide the id of your Flex swf
document.getElementById("${application}-startup-flex-client").stop();
//alert("Disconnected!");
}
</script>
by
<script langugage='javascript' type="text/javascript">
function getRootURL() {
return location.href.substring(0,location.href.indexOf("/flex"));
}
function stop() {
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
var xmlhttp = new XMLHttpRequest();
} else {// code for IE6, IE5
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET", getRootURL()+"/util/stop",false);
xmlhttp.onreadystatechange = function() {
};
xmlhttp.send();
}
function focusFlex() {
var flexApp = document.getElementById("${application}-startup-flex-client");
if(flexApp) {
flexApp.tabIndex = 0;
flexApp.focus();
}
}
</script>
- Add the following servlet definition to your web.xml :
<servlet>
<servlet-name>RemoteUtilServlet</servlet-name>
<servlet-class>org.jspresso.framework.application.startup.remote.RemoteUtilServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RemoteUtilServlet</servlet-name>
<url-pattern>/util/*</url-pattern>
</servlet-mapping>
- Migrated to Qooxdoo 2.0
- onUpdate() was triggered on an entity even if only computed (transient) properties were detected to be modified.
This is not the case anymore. see request #676.
- autoSelectFistRows has been made configurable on charts. Previously, it was always false. Default value is true.
- 2 methods have been added to the IPropertyChangeCapable interface that allow to delay property change notifications.
void blockEvents();
void releaseEvents();
This is used into the UOW cloning / merge process to ensure that the state is completely set before firing such
events.
AbstractPropertyChangeCapable base class implements them.
- In order to fulfill feature request #664, the signature of the method contained in ILovViewDescriptorFactory
has been augmented with a new ESelectionMode parameter that allows to force a selection mode for the LOV result view.
The LovAction can now be parameterized with a selectionMode to force the selection mode of the LOV result view.
Default (legacy) behaviour is obtained by passing null as value for the new parameter.
- Now, Jspresso managed components are only auto-created when referenced by an entity if the property
descriptor referencing them is mandatory. Since a reference property to a Jspresso component has been made mandatory
by default, there is nothing to do in order to migrate, but explicitely setting mandatory:false will disable
component auto-creation thus allowing the developper to have full control on the component reference.
3.5.13
======
- In order to lower coupling between IQueryViewDescriptorFactory and IQueryComponentDescriptorFactory, the signature
of createQueryViewDescriptor has changed to :
createQueryViewDescriptor(IComponentDescriptorProvider<IComponent> componentDescriptorProvider,
IComponentDescriptor<IQueryComponent> queryComponentDescriptor);
Instead of having the responsibility to create the actual query filter descriptor, it is now passed as parameter.
Whenever you need to create a query view descriptor, 1st create a component descriptor using an (injected) query
component descriptor factory, then pass the created query component descriptor as parameter.
- BasicQueryViewDescriptorFactory has changed package
from : org.jspresso.framework.view.descriptor.basic
to : org.jspresso.framework.application.view
- In order to garantee that async action always execute in a brand new context (e.g. using a slave backend controller),
the backend controller is always retrieved from the BackendControllerHolder, i.e. the Frontend controller does not hold any
direct reference to it anymore.
- A subclass of ResourceProviderServlet has been created in order to take care of resources cleaning after
the download of an active resource in order to avoid JDBC connection leaks. The original ResourceProviderServlet
has been made abstract to force the migration. Please replace in your existing web.xml :
org.jspresso.framework.util.resources.server.ResourceProviderServlet
by
org.jspresso.framework.application.backend.resources.server.ControllerAwareResourceProviderServlet
- The API has been changed to include the Icon class that is a wrapper around an iconImageUrl and a dimension properties.
This was necessary to fulfill evolution #628. Setters for dependency injection remain unchanged but the getIconImageUrl() getters
have been removed in favor of a getIcon() getter. The view factory will respect as much as possible the overriden dimension
set using setIconWidth(int) and setIconHeight(int).
- The onLoad() lifecycle interceptor was incorectly triggered during entity technical cloning. From now on,
only the onClone(IEntity sourceEntity) method is called.
- [get|set]Selected[Models|Index] now directly synchs the selection on the corresponding views. ModuleSelectionAction
and ConnectorSelectionAction that were only meant to be chained to apply selection have been suppressed since they
are now useless and should simply be removed from your applications.
- for Jspresso EE users, whenever you use web services, you should update your web.xml by changing. This will ensure
that the new resource cleanup interceptor gets registered at startup and that JDBC connections are correctly returned
to the pool after execution of the web service :
<context-param>
<param-name>resteasy.scan.resources</param-name>
<param-value>true</param-value>
</context-param>
to
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
- in webapp/src/main/webapp/flex/index.html replace :
onUnload
by
onBeforeUnload
3.5.12
======
- The methods of ICriteriaFactory now take the action context as extra parameter.
- This release enforces correct usage of transactions (Unit of Work) and session.
Please, read carefully bugs :
http://mantis.jspresso.org/view.php?id=556
http://mantis.jspresso.org/view.php?id=557
- Fixing the bug http://mantis.jspresso.org/view.php?id=541 , SJS does not change the case of
the workspaces names and descriptions. It was lowering the case of the 1st char but does not do it anymore.
This change might result in missing translations so change your resource bundles property files
accordingly. You should also change the parent parentWorkspaceName custom parameter used in
AddBeanAsSubModuleFrontAction instances.
- New locale : DE
In order to use the new translation locales in existing projects :
Edit startup/qooxdoo/client/src/main/py/config.json and change :
"LOCALES" : ["en","fr","es","pt"],
to
"LOCALES" : ["en","fr","es","pt","de"],
Edit startup/flex/client/pom.xml and change :
<locales>
<locale>en_US</locale>
<locale>fr_FR</locale>
<locale>es_ES</locale>
<locale>pt_BR</locale>
</locales>
to
<locales>
<locale>en_US</locale>
<locale>fr_FR</locale>
<locale>es_ES</locale>
<locale>pt_BR</locale>
<locale>de_DE</locale>
</locales>
Create the de_DE directories in startup/flex/client/src/main/locales.
- We have relaxed a lot of interface APIs around List Of Values. Most of them now use Icomponent instead of IEntity.
A straightforward API alignement will be needed when upgrading.
- All ControllerAware artifacts are now Spring singletons which will ease a lot 3rd party products integration.
see http://mantis.jspresso.org/view.php?id=533
- To prepare for Hibernate 4 migration, the HibernateTemplate usage is now deprectated. From now on, you should use
the equivalent getHibernateSession(...) that leverages the Hibernate getCurrentSession() method. As soon as Jspresso migrates
to Hibernate 4, the Hibernate template access wil be removed.
- To prepare for Hibernate 4 migration, you should change the cache provider in your hibernate configurations (xxx-config.xml)
from <prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>
to <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
- Libraries version update :
Spring: 3.1.0-RELEASE
Hibernate: 3.6.9.Final
- In order to give the opportunity to ignore missing translation keys, we have added 2 methods to the ITranslationProvider
interface, containing a default value :
String getTranslation(String key, String defaultMessage, Locale locale);
String getTranslation(String key, Object[] args, String defaultMessage, Locale locale);
The default message is returned when no translation can be found for the key.
- Whenever you want to use the new direct access feature described in this feature request
http://mantis.jspresso.org/view.php?id=524
you should add the following filter definition in your web.xml descriptor :
<!-- Request params filter section -->