44.4 Prolog Server Interface
The Prolog interface is based on the idea of a Prolog server that
provides its service by answering queries from external applications
(typically Java applications). The Prolog interface in PrologBeans
is defined in library(prologbeans), which implements the
Prolog server and exports the following predicates:
starts the Prolog server using the options specified. Please
start/[0,1] will not return until a server shutdown
occurs. Options should be a list of zero or more of:
- an integer denoting the port number of the Prolog server (default:
8066). If Val is a variable then some unused port will be
selected by the OS, the actual port number can be obtained with
get_server_property/1, typically from a
- a list of atoms denoting the hosts (in form of IP-addresses) that are
accepted by the Prolog server (default:
- an integer denoting the duration of a session in seconds. The session will be
removed if it has been inactive more than this timeout when the
session garbage collect starts. If the session timeout is set
to zero there will be no garbage collect on sessions
- an integer denoting the minimum time in seconds between two consecutive
session garbage collections. If the timeout is set to zero there will
be no garbage collect on sessions (default:
shuts down the server and closes the sockets and the streams after
processing all available input. There are three modes:
- as soon as possible (default).
- after all sessions have ended (all sessions have either been
explicitly removed by request of the client application, or they have
been garbage collected). Please note:
there can still be connections to the Prolog server even when all
sessions have ended.
- after all connections to the Prolog server are closed. Please note:
there can still be user sessions left when all connections have been closed.
registers a query and the corresponding predicate. Before the registration
any previously registered query matching
Query will be removed (as if
unregister_query(Query) was called). The predicate,
PredicateToCall will be called, as if by
once(PredicateToCall), when a query matching
Query is received. Before calling the query, the variable
SessionVar, if given, is bound to the id of the current
session. Session ids are typically generated in web applications that
track users and mark all consecutive web-accesses with the same
- unregisters all queries matching Query.
returns the value of a given parameter in a given session. If no
value exists, it will return the default value. Arguments:
- is the id of the session for which values have been stored
- an atom, is the name of the parameter to retrieve
- is the value that will be used if no value is stored
- is the stored value or the default value if nothing was stored
stores the value of the given parameter. Please note: any pre-existing
value for this parameter will be overwritten. Note that
session_put/3 will not be undone when backtracking (the current
implementation is based on
- is the id of the session for the values to store
- an atom, is the name of the parameter to store
- the value to be stored
Registers PredicateToCall to be called (as if by
)) when the event matching Event occurs
(event matching is on principal functor only). If the goal fails or
raises an exception a warning is written to
user_error but the failure
or exception is otherwise ignored. Arguments:
- is the event template, see below.
- an arbitrary goal.
- becomes bound to a (ground) term that can be used with
unregister_event_listener/1 to remove this event listener.
The predefined events are as follows:
- called before the first call to a query for this session
- called before the session is about to be garbage collected (removed)
- called when the server is about to start (enter its main loop)
- called when the server is about to shut down
Attempt to register an event listener for other events than the
predefined events will throw an exception.
More than one listeners can be defined for the same event. They will be
called in some unspecified order when the event occurs.
Unregister a previously registered event listener. The Id is the
value returned by the corresponding call to
register_event_listener/3. It is an error to attempt to
unregister an event listener more than once.