org.apache.jdo.impl.fostore
Class VerifyHandler

java.lang.Object
  extended byorg.apache.jdo.impl.fostore.RequestHandler
      extended byorg.apache.jdo.impl.fostore.InsertHandler
          extended byorg.apache.jdo.impl.fostore.UpdateHandler
              extended byorg.apache.jdo.impl.fostore.VerifyHandler

class VerifyHandler
extends UpdateHandler

Process requests to verify instances in the datastore.

Author:
Dave Bristor

Nested Class Summary
(package private) static interface RequestHandler.HandlerFactory
          Means by which subclasses are created.
 
Field Summary
protected  FOStoreServerConnection con
          Connection on which the Request arrived.
(package private) static RequestHandler.HandlerFactory factory
           
protected  int length
          Length of the data in the Request.
(package private) static org.apache.commons.logging.Log logger
          Logger
private static I18NHelper msg
          I18N Support
protected  Reply reply
          Subclasses use this Reply instance to send data back to their corresponding client-side request.
 
Constructor Summary
private VerifyHandler(Reply reply, int length, FOStoreServerConnection con)
           
 
Method Summary
protected  boolean getOkToFinish()
          The RollbackHandler should override this and return false, so that finishers are not run when we are rolling back.
(package private)  RequestFinisher handleRequest()
          Verify that instance exists and/or its values match those in the client.
(package private) static void handleRequests(FOStoreServerConnection con)
          Handles all requests that can be read at this time from the given connection.
protected  Block readBlock(FOStoreInput in)
           
protected  void setOkToCommit(boolean okToCommit)
          The CommitHandler should override this and save the given value, then use it to determine whether or not to commit.
protected  void updateDB(OID realOID, OID provOID, Block block, FOStoreDatabase db)
          Replace a block in the database.
protected  boolean verify(OID oid, boolean verifyFields, Block block)
          Verify before image versus database state of an object.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

msg

private static final I18NHelper msg
I18N Support


factory

static final RequestHandler.HandlerFactory factory

reply

protected final Reply reply
Subclasses use this Reply instance to send data back to their corresponding client-side request.


length

protected final int length
Length of the data in the Request.


con

protected final FOStoreServerConnection con
Connection on which the Request arrived.


logger

static final org.apache.commons.logging.Log logger
Logger

Constructor Detail

VerifyHandler

private VerifyHandler(Reply reply,
                      int length,
                      FOStoreServerConnection con)
Method Detail

handleRequest

RequestFinisher handleRequest()
                        throws java.io.IOException,
                               FOStoreDatabaseException
Verify that instance exists and/or its values match those in the client.

Overrides:
handleRequest in class UpdateHandler
Throws:
java.io.IOException
FOStoreDatabaseException

verify

protected boolean verify(OID oid,
                         boolean verifyFields,
                         Block block)
                  throws java.io.IOException,
                         FOStoreDatabaseException,
                         UpdateHandler.DoesNotExistException
Verify before image versus database state of an object.

Parameters:
oid - OID of object to be verified
verifyFields - If true, verify that values of the data corresponding to oid in the database match those in the given block; if false verify that object corresponding to oid exists.
block - Block of data for value verification; may be null if verifyFields is false.
Returns:
true if verify succeeds as per verifyFields.
Throws:
java.io.IOException - if stream errors.
FOStoreDatabaseException - if any errors in the database.
UpdateHandler.DoesNotExistException - if the object to be updated does not exist.

updateDB

protected void updateDB(OID realOID,
                        OID provOID,
                        Block block,
                        FOStoreDatabase db)
                 throws java.io.IOException,
                        FOStoreDatabaseException
Replace a block in the database.

Overrides:
updateDB in class InsertHandler
Parameters:
provOID - provisional OID.
realOID - OID to use as key in the database.
block - Block to be inserted in database.
db - Database into which block is replaced.
Throws:
java.io.IOException - for stream errors.
FOStoreDatabaseException - for any database error except for object not found.
See Also:
InsertHandler.updateDB(org.apache.jdo.impl.fostore.OID, org.apache.jdo.impl.fostore.OID, org.apache.jdo.impl.fostore.Block, org.apache.jdo.impl.fostore.FOStoreDatabase)

readBlock

protected Block readBlock(FOStoreInput in)
                   throws java.io.IOException
Throws:
java.io.IOException

getOkToFinish

protected boolean getOkToFinish()
The RollbackHandler should override this and return false, so that finishers are not run when we are rolling back.


setOkToCommit

protected void setOkToCommit(boolean okToCommit)
The CommitHandler should override this and save the given value, then use it to determine whether or not to commit.


handleRequests

static void handleRequests(FOStoreServerConnection con)
Handles all requests that can be read at this time from the given connection. Reads the number of requests, then reads each one and, in turn, invokes the handleRequest operation on each.

The data it generates for the client is documented; see ReplyHandler.processReplies(java.io.DataInput, org.apache.jdo.impl.fostore.Message).

If after all requests are thusly handled, none have indicated that the second round of handling, called finishing, is not to be done, then performs this second round. The finishers that are invoked are precisely those which were returned from each request's handleRequest invocation, and the finishers have their finish() methods invoked in the same order in which the requests were originally invoked.

Finally, writes the number of replies (at the beginning of the reply data, in a spot that was set aside for this purpose), and sends replies back to the client.

This method is very paranoid about error checking, which clutters it up some, but is necessary to ensure that the server keeps running.