se.sics.prologbeans
Class PrologSession

java.lang.Object
  extended by se.sics.prologbeans.PrologSession

public class PrologSession
extends java.lang.Object

PrologSession handles the connection with the Prolog Server. Currently only synchronous connections with the server are supported.


Constructor Summary
PrologSession()
          Creates a new PrologSession instance with default Prolog server settings.
 
Method Summary
protected  void cancelQuery()
          Called by the timeout monitor when a query takes too long.
 void connect()
          Connects to the Prolog server.
static boolean debugging()
           
 void disconnect()
          Closes the connection with the Prolog server.
 QueryAnswer executeQuery(java.lang.String query)
          Sends a query to the Prolog server and waits for the answer before returning the QueryAnswer.
 QueryAnswer executeQuery(java.lang.String query, Bindings bindings)
          Sends a query to the Prolog server and waits for the answer before returning the QueryAnswer.
 QueryAnswer executeQuery(java.lang.String query, Bindings bindings, java.lang.String sessionID)
          Sends a query to the Prolog server and waits for the answer before returning the QueryAnswer.
 java.lang.String getHost()
          Returns the host of the Prolog server (exactly as registered in setHost()).
 int getPort()
          Returns the port of the Prolog server.
static PrologSession getPrologSession(java.lang.String name)
          Returns the PrologSession registered in JNDI with the given name.
static PrologSession getPrologSession(java.lang.String name, javax.servlet.http.HttpSession httpSession)
          Returns the PrologSession registered in JNDI with the given name.
 int getTimeout()
          Returns the timeout in milliseconds before the connection to the Prolog server is reset (when a query is not answered).
 boolean isAlwaysClosing()
           
 boolean isAutoConnecting()
          Returns the state of the auto connect mode.
 boolean isConnected()
          Returns true if a connection with the Prolog server is open and false otherwise.
 void setAlwaysClose(boolean close)
           
 void setAutoConnect(boolean autoConnect)
          Sets the connection mode of this PrologSession.
 void setHost(java.lang.String prologServerHost)
          Sets the host of the Prolog server (default is localhost).
 void setPort(int prologServerPort)
          Sets the port of the Prolog server (default 8066).
 void setTimeout(int timeout)
          Sets the timeout in milliseconds before the connection to the Prolog server is reset (when a query is not answered).
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PrologSession

public PrologSession()
Creates a new PrologSession instance with default Prolog server settings.

Method Detail

debugging

public static boolean debugging()

getTimeout

public int getTimeout()
Returns the timeout in milliseconds before the connection to the Prolog server is reset (when a query is not answered).


setTimeout

public void setTimeout(int timeout)
Sets the timeout in milliseconds before the connection to the Prolog server is reset (when a query is not answered). Setting the timeout to 0 will disable timeouts for this prolog session. Default is 2000 milliseconds. When a connection times out it will be closed silently.

Parameters:
timeout - int timeout in milliseconds or 0 to disable timeouts

getPrologSession

public static PrologSession getPrologSession(java.lang.String name)
Returns the PrologSession registered in JNDI with the given name. Use this method in application servers where services are registered using JNDI. Please note: the application server must be configured to register the PrologSession with the given name for this method to work.

Parameters:
name - the name of the prolog session
Returns:
the named prolog session or null if no such session could be found

getPrologSession

public static PrologSession getPrologSession(java.lang.String name,
                                             javax.servlet.http.HttpSession httpSession)
Returns the PrologSession registered in JNDI with the given name.The PrologSession will make use of sessions and the session id will be the same as in the HTTPSession. Use this method in web application servers with support for servlets and HTTPSession (and when support for sessions is desired). Note: This will cause the PrologSession to include the session id in its queries.

Parameters:
name - the name of the prolog session
httpSession - the http session
Returns:
the named prolog session

getPort

public int getPort()
Returns the port of the Prolog server.


setPort

public void setPort(int prologServerPort)
Sets the port of the Prolog server (default 8066).

Parameters:
prologServerPort - the port of the Prolog server

getHost

public java.lang.String getHost()
Returns the host of the Prolog server (exactly as registered in setHost()).


setHost

public void setHost(java.lang.String prologServerHost)
Sets the host of the Prolog server (default is localhost). The host can be specified as either IP-address or host name.

Parameters:
prologServerHost - the host as an IP-address or host name

isAlwaysClosing

public boolean isAlwaysClosing()

setAlwaysClose

public void setAlwaysClose(boolean close)

setAutoConnect

public void setAutoConnect(boolean autoConnect)
Sets the connection mode of this PrologSession. If set to true it will ensure that it is connected to the Prolog server as soon as a call to executeQuery() or anything else causing a need for communication happens. This is by default set to false.


isAutoConnecting

public boolean isAutoConnecting()
Returns the state of the auto connect mode.

See Also:
setAutoConnect(boolean)

executeQuery

public QueryAnswer executeQuery(java.lang.String query)
                         throws java.io.IOException,
                                IllegalCharacterSetException
Sends a query to the Prolog server and waits for the answer before returning the QueryAnswer. Anonymous variables (underscore, _), will be ignored, and thus not accessible in the QueryAnswer. executeQuery throws IOException if communication problems with the server occurs. Please note: executeQuery will only return one answer.

Parameters:
query - the query to send to the prolog server. The characters in the query are restricted to ISO-8859-1.
Returns:
the answer from the prolog server
Throws:
java.io.IOException - if an error occurs. A possible cause is a timeout.
IllegalCharacterSetException
See Also:
setTimeout(int)

executeQuery

public QueryAnswer executeQuery(java.lang.String query,
                                Bindings bindings)
                         throws java.io.IOException,
                                IllegalCharacterSetException
Sends a query to the Prolog server and waits for the answer before returning the QueryAnswer. bindings are variable bindings for the given query and will ensure that the values are stuffed correctly.

An example:

QueryAnswer answer = executeQuery("evaluate(In,Out)", new Bindings().bind("In","4*9."));

Parameters:
query - the query to send to the prolog server The characters in the query are restricted to ISO-8859-1.
bindings - the variable bindings to use in the query
Returns:
the answer from the prolog server
Throws:
java.io.IOException - if an error occurs. A possible cause is a timeout.
IllegalCharacterSetException
See Also:
setTimeout(int)

executeQuery

public QueryAnswer executeQuery(java.lang.String query,
                                Bindings bindings,
                                java.lang.String sessionID)
                         throws java.io.IOException,
                                IllegalCharacterSetException
Sends a query to the Prolog server and waits for the answer before returning the QueryAnswer. bindings are variable bindings for the given query and will ensure that the values are stuffed correctly.

Parameters:
query - the query to send to the prolog server The characters in the query are restricted to ISO-8859-1.
bindings - the variable bindings to use in the query
sessionID - the session id to give to the prolog server
Returns:
the answer from the prolog server
Throws:
java.io.IOException - if an error occurs. A possible cause is a timeout.
IllegalCharacterSetException
See Also:
setTimeout(int)

connect

public void connect()
             throws java.io.IOException
Connects to the Prolog server. By default executeQuery() will automatically connect to the server when called.

Throws:
java.io.IOException

isConnected

public boolean isConnected()
Returns true if a connection with the Prolog server is open and false otherwise.


disconnect

public void disconnect()
Closes the connection with the Prolog server. The connection can be opened again with connect().


cancelQuery

protected void cancelQuery()
Called by the timeout monitor when a query takes too long. Override this method to handle the timeout in some way other than silently closing the connection.