On 9/20/09 7:32 AM, Matthew D. Swank wrote: […]
I could just make the precompiled lisp files available on the file system, and let asdf load them in my app entry point. Also, if I needed the files to be packaged as jars, or if I didn't want the overhead of asdf searching the system dependencies, I could capture the load order that asdf generates when it compiles the systems and load them in proper order directly.
Loading ASDF packaged code from the filesystem
Of course this all gets a bit messy if library code depends on the asdf systems being available at runtime. Also, can all this happen fast enough to serve a request?
Why not package the library code in ASDF itself, using ASDF's dependency mechanism to pull in the necessary code? For packaging JARs with Java code as ASDF entries, [Alan Ruttenberg's JSS extension][1] allows the specification of JAR files in ADSF under ABCL. The [following snippet][asdf-jar] from private unreleased work of my own, wraps the IRIS WSML reasoner jars necessary to work with in ABCL with a thin Lisp bridge.
As for "can all this happen fast enough to server a request", assuming your application is for user response time for HTTP applications (i.e. on the order of 100ms), the answer is probably no if every request is going to be a "cold start." But this is more a limitation that any JVM-based application faces which is commonly architected around by having workers "warmed up" to the point of serving a request waiting for incoming requests. Practically all modern HTTP applications use some sort of warm-up.
[asdf-jar]:
(defsystem :wsml2reasoner-jars :version "0.6.4" ;; last sync with SVN :depends-on (:abcld) :components ((:module wsml2reasoner :pathname "lib/" :components ((:jar-file "wsml2reasoner"))) (:module iris-libs :pathname "lib/ext/iris-reasoner/iris/" :components ((:jar-file "iris-0.58"))) (:module jgrapht-libs :pathname "lib/ext/iris-reasoner/jgrapht/" :components ((:jar-file "jgrapht-jdk1.5-0.7.1"))) (:module wsmo-libs :pathname "lib/ext/wsmo/" :components ((:jar-file "WSML-grammar-20081202") (:jar-file "wsmo-api-0.6.2") (:jar-file "wsmo4j-0.6.2"))) (:module log4j-libs :pathname "lib/ext/log4j/" :components ((:jar-file "log4j-1.2.14")))))
[1]: http://mumble.net:8080/svn/lsw/trunk/