Next: Getting Started, Up: lib-jasper [Contents][Index]
Jasper is a bi-directional interface between Java and
SICStus. The Java side of the interface consists of a Java package
(se.sics.jasper
) containing classes representing the SICStus
runtime system (SICStus
, SPTerm
, etc). The Prolog part
is designed as a library module (library(jasper)
).
Please note: If only uni-directional communicaton from Java
to Prolog is needed, then the newer
library('jsonrpc/jsonrpc_server')
(see lib-jsonrpc) is
probably an easier way to expose a Prolog program to a client written
in some other programming language, such as Java. One advantage is
that it uses a standardized, text-based, protocol for communication,
which makes it easier to integrate with arbitrary client languages
(not just Java), test, and troubleshoot. Like the Jasper library the
JSON-RPC library gives the client access to the full power of Prolog,
including backtracking and constrained variables.
The library module library(jasper)
(see The Jasper Library)
provides functionality for controlling the loading and unloading the JVM
(Java Virtual Machine), method call functionality
(jasper_call/4
), and predicates for managing object
references.
Jasper can be used in two modes, depending on which system acts as
Parent Application. If Java is the parent application, then the SICStus
runtime kernel will be loaded into the JVM using the
System.loadLibrary()
method (this is done indirectly when
instantiating a SICStus
object). In this mode, SICStus is loaded
as a runtime system (see Runtime Systems).
As of release 3.9, it is possible to use Jasper in multi threaded
mode. This means that several Java threads can call SICStus runtime
via a server thread. The communication between the client threads and
the server thread is hidden from the programmer, and the API is based
on Java Interfaces
, which are implemented both by the multi thread
capable classes and the pre-3.9 classes, which are restricted to single
threaded mode. The decision whether to run in single thread mode or in
multi threaded mode can thus be left until runtime.
If SICStus is the parent application, then Java will be loaded as a
foreign resource using the query
use_module(library(jasper))
. The Java engine is initialized using
jasper_initialize/[1,2]
.