[Armedbear-devel] handling dependencies

Mark Evenson evenson at panix.com
Mon Aug 18 07:30:38 UTC 2014


On 17 Aug 2014, at 22:37, Eduardo Bellani <ebellani at gmail.com> wrote:

[…]

> I am trying to build a servlet using ABCL. The servlet is a middleware
> that will expose an API, consume JSON, and return JSON. I will also
> store some data into a postgres RDBMS.
> 
> I've used the google-app-engine example as a basis to build a skeleton
> of my app, with a Java class providing a proxy for the servlet. If I
> don't use any dependencies on my project, everything runs ok. My
> problem is that I have the following system descriptor:
> 
> (asdf:defsystem #:abcl-servlet
>  :serial t
>  :description "An example of a servlet using the ABCL stack."
>  :author  "Eduardo Bellani <ebellani at gmail.com>"
>  :license "Beerware v. 42"
>  :depends-on (:jsown
>               :postmodern)
>  :components ((:module :src
>                        :components ((:file "package")
>                                     (:file "servlet-interface")))))

N.b. my more recent experimentation with Lisp servlets can be found in
[abcl-servlet][1], which should (eventually) supersede the googlecode work.
Unfortunately, building ‘abcl-servlet’ at the moment requires Netbeans to be
intalled, which is something I eventually want to make an optional dependency.
Never-the-less, studying org.abcl.servlet.Lisp is probably worth something to
you.

[1]: https://bitbucket.org/easye/abcl-servlet

If you have ABCL running in the servlet, you should be able to use ASDF to find
these dependencies.  

In my recent project I added all of my ASDF dependencies to WAR as
“asdf/<SYSTEM>” including “illithid” the system that I am running, and then use
the following code in the servlet to kick things off.  This requires that one
runs the servlet in “exploded mode” so that ServletContext.getRealPath()
returns a location on the filesystem.  Not all servlet containers support an
"exploded mode”, but Tomcat certainly does.

(defun servlet-root ()
  (concatenate ‘string 
	       ;; relies on there being a static field to reference the ServletContext
               ;; cf. https://bitbucket.org/easye/abcl-servlet
               (#"getRealPath" (java:jfield "org.abcl.servlet.Lisp" "servletContext") "/")
               "/"))

(defun configure-asdf ()
  (asdf:initialize-source-registry 
   `(:source-registry 
     :ignore-inherited-configuration
     (:tree ,(merge-pathnames "asdf/" (servlet-root))))))

(cl:in-package #:cl-user)
(illithid-servlet::configure-asdf)
(setf *load-verbose* t)
(push :hunchentoot-no-ssl *features*)
(asdf:load-system :illithid)
(illithid:start)

-- 
"A screaming comes across the sky.  It has happened before but there is nothing 
to compare to it now."






_______________________________________________
Armedbear-devel mailing list
Armedbear-devel at common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/armedbear-devel



More information about the armedbear-devel mailing list