In view of the ongoing effort to refine dhis2 into the lean and mean
machine which we know is trying to break out inside of it, and also as
part of my continuing exploration of what exactly is going on, I've
done a bit of an analysis of the jars packaged inside the dhis.war.
(I've got these in a spreadsheet - should put them on the wiki or
somewhere if only I knew how.)

Listed in order of size we have:

name size       cumulative
wstx-api-2.9.jar        1443    1443
acegi-security-tiger-1.0.2.jar  3091    4534
dhis-support-transaction-2.0.1-SNAPSHOT.jar     3653    8187
aopalliance-1.0.jar     4467    12654
dhis-i18n-translationstore-hibernate-2.0.1-SNAPSHOT.jar 6836    19490
dhis-i18n-upgrader-2.0.1-SNAPSHOT.jar   7181    26671
jsr107cache-1.0.jar     8277    34948
dhis-support-external-2.0.1-SNAPSHOT.jar        9416    44364
dhis-useradminandsecurity-2.0.1-SNAPSHOT.jar    9814    54178
staxwax-1.0.4.jar       10956   65134
dhis-i18n-static-2.0.1-SNAPSHOT.jar     12143   77277
dhis.jar        13419   90696
geronimo-spec-jta-1.0-M1.jar    13473   104169
dhis-i18n-db-2.0.1-SNAPSHOT.jar 15162   119331
dhis-service-user-hibernate-2.0.1-SNAPSHOT.jar  15300   134631
asm-attrs-1.5.3.jar     16757   151388
dhis-options-2.0.1-SNAPSHOT.jar 18344   169732
cave-process-1.0.3.jar  19408   189140
dhis-support-hibernate-2.0.1-SNAPSHOT.jar       20773   209913
dhis-service-organisationunit-2.0.1-SNAPSHOT.jar        22173   232086
dhis-service-administration-2.0.1-SNAPSHOT.jar  24072   256158
xpp3_min-1.1.4c.jar     24956   281114
asm-1.5.3.jar   26361   307475
stax-api-1.0.1.jar      26514   333989
commons-email-1.1.jar   30651   364640
commons-fileupload-1.1.1.jar    31909   396549
dhis-web-dashboard-integration.jar      33002   429551
dhis-support-webwork-2.0.1-SNAPSHOT.jar 34793   464344
dhis-web-maintenance-dataadmin.jar      36180   500524
dhis-web-maintenance-settings.jar       36714   537238
commons-logging-api-1.1.jar     44598   581836
commons-codec-1.3.jar   46725   628561
dhis-support-system-2.0.1-SNAPSHOT.jar  51125   679686
commons-logging-1.1.jar 52915   732601
jep-2.24.jar    56755   789356
commons-io-1.1.jar      61562   850918
dhis-service-datamart-default-2.0.1-SNAPSHOT.jar        62188   913106
activation-1.1.jar      62983   976089
oro-2.0.8.jar   65261   1041350
dhis-web-validationrule.jar     65645   1106995
dhis-web-maintenance-user.jar   73276   1180271
dhis-service-reporting-2.0.1-SNAPSHOT.jar       76962   1257233
dhis-web-datamart.jar   77406   1334639
ibatis2-common-2.1.7.597.jar    85038   1419677
velocity-tools-1.2.jar  88194   1507871
dhis-web-maintenance-dataset.jar        90226   1598097
oscore-2.2.4.jar        91078   1689175
xpp3-1.1.3.3.jar        93395   1782570
servlet-api-2.4.jar     97693   1880263
dhis-service-jdbc-2.0.1-SNAPSHOT.jar    101799  1982062
dhis-web-maintenance-organisationunit.jar       104568  2086630
xml-apis-1.0.b2.jar     109318  2195948
rife-continuations-0.0.2.jar    116956  2312904
dhis-service-core-2.0.1-SNAPSHOT.jar    126194  2439098
commons-validator-1.3.1.jar     138956  2578054
commons-digester-1.7.jar        139966  2718020
dhis-web-dataentry.jar  144245  2862265
junit-4.4.jar   161477  3023742
ognl-2.6.9.jar  167958  3191700
ognl-2.6.11.jar 168081  3359781
stax2-api-3.0.1.jar     179977  3539758
commons-beanutils-1.7.0.jar     188671  3728429
xml-apis-1.3.02.jar     194205  3922634
commons-lang-2.1.jar    207723  4130357
dhis-api-2.0.1-SNAPSHOT.jar     213598  4343955
dhis-web-commons-2.0.1-SNAPSHOT.jar     218342  4562297
ehcache-1.5.0.jar       264400  4826697
dhis-web-importexport.jar       281502  5108199
cglib-2.1_3.jar 282338  5390537
spring-core-2.5.6.jar   285491  5676028
xwork-1.2.3.jar 286284  5962312
dhis-web-maintenance-datadictionary.jar 297665  6259977
ibatis2-sqlmap-2.1.7.597.jar    304649  6564626
jcommon-1.0.14.jar      307917  6872543
dom4j-1.6.1.jar 313898  7186441
backport-util-concurrent-3.1.jar        331716  7518157
commons-math-1.2.jar    338488  7856645
log4j-1.2.12.jar        358085  8214730
dhis-web-reporting.jar  376768  8591498
mail-1.4.jar    388864  8980362
velocity-1.5.jar        392124  9372486
dhis-service-importexport-2.0.1-SNAPSHOT.jar    407408  9779894
xstream-1.3.jar 411090  10190984
antlr-2.7.6.jar 443432  10634416
acegi-security-1.0.2.jar        456993  11091409
postgresql-8.3-603.jdbc4.jar    474746  11566155
woodstox-core-asl-4.0.3.jar     481111  12047266
spring-beans-2.5.6.jar  488282  12535548
joda-time-1.5.2.jar     531326  13066874
commons-collections-3.2.jar     571259  13638133
c3p0-0.9.1.2.jar        610790  14248923
jxl-2.6.jar     660390  14909313
mysql-connector-java-5.1.6.jar  703265  15612578
freemarker-2.3.4.jar    789043  16401621
poi-2.5.1-final-20040804.jar    802216  17203837
h2-1.1.109.jar  1163608 18367445
jfreechart-1.0.11.jar   1360956 19728401
jasperreports-2.0.2.jar 1788352 21516753
itext-1.4.8.jar 1891191 23407944
hibernate-3.2.6.ga.jar  2274768 25682712
derby-10.4.2.0.jar      2446767 28129479
spring-2.5.6.jar        2949500 31078979
webwork-2.2.6.jar       3218671 34297650
jdtcore-3.1.0.jar       3555707 37853357
                
Total   37853357        

As you see we are carrying 37M of jar around.  Which sounds about
right - the dhis.war weighs in at about 35M.  That's fairly big - I've
got some thoughts about reducing it which I'd appreciate your comment
on.  Because the above is listed by size, it makes sense to focus on
the bottom candidates as much as possible.  Of the approx 38M, half of
that is taken up by the top 10 jars (out of 104 in total).  The dhis*
jars (34 of them) account for about 3M which means that there are
about 60 'minor' jar dependencies which together account for around
15M.

1.  jdtcore doesn't seem to be required in a production server.  Maybe
it is required for debugging in eclipse.  If we take it out we get
down to a war file of 32.5M which is a 10% improvement and full
functionality (I think)

2.  derby - though I was the one pushing for derby support, it doesn't
100% work, we are so far quite happy with H2 for the embedded stuff
and if we take it out of the production release we get down to 30.2M

How to break the mystical 30M barrier ....

3.  As far as I can see we are not using freemarker at all.  I guess
we use velocity so it makes sense we wouldn't use both.  Take it out
and we'd be down to 29.6M

As far as I can tell these can happen right away.

Other thoughts which can't happen right away:

4.  We should not need to have jxl and poi.  Much though we love
microsoft its enough to love the buggers once.  We need to dump one of
them - probably jxl - and port the existing code to the other.  Am I
right in thinking we are not yet using POI - I haven't found
references to it but maybe I'm grepping the wrong terms.

5.  Related to the derby issue above.  This might be a bit radical.
If we removed ALL the database drivers except perhaps the builtin h2
support, we could distribute the dhis.war + database extension.  Pick
and mix and match your choice.  Not sure if the benefits would be
worth the inconvenience, but it would also force us to look into
pluggable extensability.

6.  reporting - we are currently doing jasper and birt.  Why?  I've no
doubt there's a historical rationale but I am not familiar with it.
Can we drive one direction or the other on this?

There's still a lot of unaccounted for Megabytes left but that's it
for now.  Can we get under 25M?  I think so.

Cheers
Bob

_______________________________________________
Mailing list: https://launchpad.net/~dhis2-devs
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~dhis2-devs
More help   : https://help.launchpad.net/ListHelp

Reply via email to