← Back to team overview

dhis2-devs team mailing list archive

trimming fat

 

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



Follow ups