root/main/trunk/gli/lib/README.txt @ 31649

Revision 31649, 6.5 KB (checked in by ak19, 3 years ago)

Updated GLI's batch and bash scripts to refer to the new JNA jar files and added a description of these jar files, there purpose, their version and where to get them into the lib/README.txt file.

Line 
1---------------------------
2A. THE apache.jar FILE
3---------------------------
4
5GLI's apache.jar is a custom jar file that collects together apache libraries necessary to compile, build and run GLI. There's no documentation on the various jar files that it contains, but I've guessed by inspecting the contents.
6
7Some of the contents are from xercesImpl.jar and xml-apis.jar, which may need to be kept up-to-date in tandem, since they are related and interdependent jar files as updates to xalan.jar for instance come with correspondingly updated xerces, xml-apis and other related jars.
8
9
10Commit r29729 adds the contents of xml-apis.jar (sax) and xercesImpl.jar (both found in GS3/web/WEB-INF/lib else packages/tomcat/lib) into apache.jar, replacing the older xerces and xml-apis contained in apache.jar.
11This update was necessary to handle commit r29687 where web.xml was split into web.xml and servlets.xml, with the former including the latter as an entity. GLI needs to use an EntityResolver to work with this, but the older xerces and xml-apis in apache.jar would still result in GLI failing to start, unable to parse web.xml because of the way in which servlets.xml was included. The xercesImpl and xml-apis jars in GS3/web/WEB-INF/lib (copied into packages/tomcat/lib) contain versions of these jars that do make the EntityResolver in GLI work.
12
13
14---------------------------
15CONTENTS OF apache.jar
16---------------------------
17
18Overview of the contents of apache.jar and whether they got updated in the upcoming commit 29729.
19
20- javax: came with the updated version of xml-apis.jar
21- license: came with the updated version of xml-apis.jar
22
23- com: not sure where the contents came from, but they're not apache. Left them as-is.
24
25- org:
26    - w3c: replaced with w3c folder from xml-apis.jar from GS3/web/WEB-INF/lib (packages/tomcat/lib)   
27        also added /org/w3c/dom/html/HTMLDOMImplementation.class of xercesImpl.jar in here, to replace the older version
28    - xml: replaced with xml folder from xml-apis.jar from GS3/web/WEB-INF/lib (packages/tomcat/lib)
29    - saxpath: left as-is. See jaxen below.
30    - jaxen: left as-is. The latest version is 1.1.6 from jaxen.codehaus.org/releases.html, but it seems to be a separate project from apache's xerces and xml-apis and therefore not tightly connected with them. The latest version of jaxen includes saxpath, which means that jaxen and saxpath may be tightly connected to each other and require concurrent updating, even if they're not dependent on xerces and xml-apis and therefore not require concurrent updating with them.
31
32    - apache: most of the contents, being the html, wml, xerces and xml folders have been replaced by their counterparts from the current version of xercesImpl.jar used in GS3/web/WEB-INF/lib (packages/tomcat/lib)
33        - xmlcommons: replaced with org/apache/xmlcommons folder from xml-apis.jar from GS3/web/WEB-INF/lib (packages/tomcat/lib)
34        - log4j: left as-is.
35        - commons: left as-is.
36            - codec: appears to be from commons-codec,
37            - logging: appears to be from commons-logging.
38            - not sure where the 4 other subfolders of commons (beanutils, collections, digester, httpclient) are from. See commit message of http://trac.greenstone.org/log/gli/trunk/lib/apache.jar?rev=14319 for ideas.
39       
40
41Essentially, in commit 29729, the entire contents of GS3 web-lib's xml-apis.jar and xercesImpl.jar have been added to apache.jar after unzipping it, replacing earlier versions already present. The "javax" and "licence" toplevel folders of apache.jar are proper additions, deriving from xml-apis.jar. All other contents of apache.jar have been left as they were.
42
43
44---------------------------
45UPDATING apache.jar
46---------------------------
47
48After unzipping apache.jar, its contents were updated to use the later xerces and xml-apis as described above.
49
50How to recreate the apache.jar:
51> cd gli/lib/apache
52> jar -cvf apache.jar *
53
54The apache.jar file gets generated inside gli/lib/apache, move it into gli/lib. Then commit it.
55
56Further changes to makejar.sh/bat, to mention the new javax subfolder, since it may also need to be unzipped from apache.jar along with the other contained libraries, so that xml-apis' javax too can be included in GLI.jar when this is generated, in case there is any dependence on javax in the rest of xml-apis' classes.
57
58
59
60
61------------------------------------------------
62B. THE jna.jar and jna-platform.jar FILES
63------------------------------------------------
64
65JNA = Java Native Access. These jar files are used by SafeProcess.java (in GLI and GS3 src code) to obtain the process ID of external processes launched by Java, so that on Windows, we can use the process ID to get the process IDs of subprocesses that were launched by our external process, and terminate them successfully.
66
67Generally, on Windows, process.destroy() only destroys the external process launched by Java. Not subprocesses.
68
69SafeProcess now can terminate an external process and any subprocesses it launched, whereas formerly, on Windows, it would leave subprocesses running as orphans. This was noticed when GLI would run full-import.pl on a build, this would launch import.pl. When the build was cancelled through GLI, the full-import.pl script would be successfully terminated in Windows, but import.pl would still run to termination. A windows specific fix has been added for this, so that cancelling a build through GLI on Windows now does what Linux did by default on Java Process.destroy(): terminate any subprocesses launched by the process.
70
71
72The official JNA source code project had been moved to Github when we discovered we needed it. However, the github JNA project hasn't yet made the jar files available, despite its GettingStarted documentation starting with an instruction to download the jna.jar. See https://github.com/java-native-access/jna/blob/master/www/GettingStarted.md
73
74SafeProcess.java currently uses JNA version 4.1.0, which is from 2013. The jna-4.1.0.jar and jna-platform-4.1.0.jar were made available by the Maven MVN repository and were downloaded from https://mvnrepository.com/artifact/net.java.dev.jna/jna/4.1.0 and https://mvnrepository.com/artifact/net.java.dev.jna/jna-platform/4.1.0. See also https://mvnrepository.com/artifact/net.java.dev.jna/jna
75
76The 2 JNA jar files were renamed to jna.jar and jna-platform.jar and were placed into gli/lib, for GLI's SafeProcess.java. This required an update to the gli/fli and makegli/makejar bash and batch scripts.
77For the GS3 source code copy of SafeProcess.java, these files will be placed in web/WEB-INF/lib and may require an update to build.xml for compiling and running.
78
Note: See TracBrowser for help on using the browser.