Changeset 12433
- Timestamp:
- 02/08/10 12:59:35 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/doc/design/pathnames/abcl-jar-url.text
r12422 r12433 4 4 Mark Evenson 5 5 Created: 09 JAN 2010 6 Modified: 24 JAN20106 Modified: 08 FEB 2010 7 7 8 8 Notes towards sketching an implementation of "jar:" references to be 9 contained in PATHNAMEs within ABCL 10 9 contained in PATHNAMEs within ABCL. 11 10 12 11 Goals … … 31 30 #p"jar:jar:http://example.org/abcl.jar!/foo.abcl!/foo-1.cls" 32 31 33 3. MERGE-PATHNAMES working for JAR entries 32 3. MERGE-PATHNAMES working for JAR entries in the following use cases: 34 33 35 34 (merge-pathnames "foo-1.cls" "jar:jar:file:baz.jar!/foo.abcl!/foo._") … … 47 46 6. References "jar:<URL>" for all strings <URL> that java.net.URL can 48 47 resolve works. 48 49 7. Make jar pathnames work as a valid argument for OPEN. 50 51 8. Enable the loading of ASDF systems packaged within jar files. 52 53 Status 54 ------ 55 56 As of svn r12431, all the above goals have been implemented and tested 57 *except* for: 58 59 5. DIRECTORY working within JAR files 60 61 7. Make jar pathnames work as a valid argument for OPEN. 49 62 50 63 … … 70 83 71 84 * If the DEVICE is a String it must be a String that successfully 72 constructs a URL via the java.net.URL(String) constructor85 references a URL via the java.net.URL(String) constructor 73 86 74 87 * Only the first entry in the the DEVICE list may be a String. … … 98 111 99 112 100 // UC 1-- JAR entry113 // UC2 -- JAR entry 101 114 pathname: { 102 115 namestring: "jar:file:baz.jar!/foo.abcl" … … 217 230 218 231 219 220 Problems221 --------222 223 1. DEVICE PATHNAMES require the context within the nested PATHNAME224 structure to be interpreted correctly.225 226 Result: Be careful when manipulating PATHNAMEs that refer to JARs227 228 229 232 History 230 233 ------- 231 234 232 In the use of PATHNAMEs linked by the DEVICE field, we found the problem 233 that UNC path support uses the DEVICE field 234 235 Result: JARs located on UNC mounts can't be referenced. via '\\'. 235 Previously, ABCL did have some support for jar pathnames. This support 236 used the convention that the if the device field was itself a 237 pathname, the device pathname contained the location of the jar. 238 239 In the analysis of the desire to treat jar pathnames as valid 240 locations for LOAD, we determined that we needed a "double" pathname 241 so we could refer to the components of a packed FASL in jar. At first 242 we thought we could support such a syntax by having the device 243 pathname's device refer to the inner jar. But with in this use of 244 PATHNAMEs linked by the DEVICE field, we found the problem that UNC 245 path support uses the DEVICE field so JARs located on UNC mounts can't 246 be referenced. via '\\'. 236 247 237 248 i.e. jar:jar:file:\\server\share\a\b\foo.jar!/this\that!/foo.java 238 249 239 would not have 240 241 So lution: Instead of having DEVICE point to a PATHNAME, have DEVICE242 be a list of PATHNAMES 250 would not have a valid representation. 251 252 So instead of having DEVICE point to a PATHNAME, we decided that the 253 DEVICE shall be a list of PATHNAMES, so we would have: 243 254 244 255 pathname: { 245 256 namestring: "jar:jar:file:\\server\share\foo.jar!/foo.abcl!/" 246 device: ( pathname: { 247 name: "foo" 248 type: "abcl" 249 } 257 device: ( 250 258 pathname: { 251 259 host: "server" … … 254 262 type: "jar" 255 263 } 256 } 257 258 Which order for the list? Outermost first or last? Outermost first. 259 264 pathname: { 265 name: "foo" 266 type: "abcl" 267 } 268 } 269 270 Although there is a fair amount of special logic inside Pathname.java 271 itself in the resulting implementation, the logic in Load.java seems 272 to have been considerably simplified. 273
Note: See TracChangeset
for help on using the changeset viewer.