|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectjava.lang.Thread
gr.uoa.di.madgik.grs.proxy.http.mirror.HTTPReaderMirror
public class HTTPReaderMirror
This implementation of the IMirror
interface specializes the
mirroring procedure that needs to be performed from the reader side of the
mirroring procedure. The technology employed is communication over HTTP
connections. The communication protocol is coupled with the one implemented by
the HTTPWriterMirror
which is the writer side counterpart of this
class.
Nested Class Summary |
---|
Nested classes/interfaces inherited from class java.lang.Thread |
---|
java.lang.Thread.State, java.lang.Thread.UncaughtExceptionHandler |
Nested classes/interfaces inherited from interface gr.uoa.di.madgik.grs.proxy.mirror.IMirror |
---|
IMirror.MirroringState |
Field Summary | |
---|---|
static long |
LongMirrorPeriod
The default max period of communication inactivity time span. |
static long |
ShortMirrorPeriod
The default min period of communication inactivity time span. |
Fields inherited from class java.lang.Thread |
---|
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY |
Constructor Summary | |
---|---|
HTTPReaderMirror()
|
Method Summary | |
---|---|
void |
dispose()
Dispose the resources employed by the mirroring implementations |
void |
dispose(boolean purge)
This method disposes the resources that are used by the instance but does so in two phases. |
IBuffer |
getBuffer()
Retrieves the IBuffer that is managed by the IMirror implementation. |
GRS2ProxyMirrorProtocolErrorException |
getInitializationError()
In case the initialization was not successful, and the call to waitInitialization() returned false, this method
will return the error that was recorded during the initialization. |
void |
handle()
This invocation of this method starts a new execution thread where the mirroring procedure is executed. |
void |
overrideBufferCapacity(int capacity)
Instructs the mirror to use a different buffer capacity than that transmitted by the respective HTTPWriterMirror . |
boolean |
pollPartial(long recordIndex,
int fieldIndex)
|
long |
requestPartial(long recordIndex,
int fieldIndex,
IBuffer.TransportOverride override,
java.lang.Object notify)
This method is used by the reader side mirror to request payload that belongs to an IBuffer
item that has been transfered only partially and more data is requested by the reader client |
void |
run()
|
void |
setHostname(java.lang.String hostname)
Sets the name of the host where the respective HTTPWriterMirror
instance is running |
void |
setKey(java.lang.String key)
Sets the key on the remote registry that holds the IBuffer this
mirror is interested in consuming |
void |
setPort(int port)
Sets the port in the remote host where the respective HTTPWriterMirror is listening |
boolean |
waitInitialization()
This method can be used by HTTPReaderMirror clients, that want to
be sure that the initialization procedure of the protocol is completed
before they continue their operation. |
Methods inherited from class java.lang.Thread |
---|
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield |
Methods inherited from class java.lang.Object |
---|
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
public static final long LongMirrorPeriod
ShortMirrorPeriod
is used. Currently this value
is set to 100 milliseconds
public static final long ShortMirrorPeriod
LongMirrorPeriod
is used. Currently this value
is set to 50 milliseconds
Constructor Detail |
---|
public HTTPReaderMirror()
Method Detail |
---|
public void setHostname(java.lang.String hostname)
HTTPWriterMirror
instance is running
hostname
- the name of the hostpublic void setPort(int port)
HTTPWriterMirror
is listening
port
- the port numberpublic void setKey(java.lang.String key)
IBuffer
this
mirror is interested in consuming
key
- the registry key of the IBuffer
to consumepublic void overrideBufferCapacity(int capacity)
HTTPWriterMirror
. Capacity
overriding only takes place if the requested capacity is smaller than the
one specified by the respective HTTPWriterMirror
, otherwise the
latter is used
capacity
- The buffer capacitypublic IBuffer getBuffer()
IBuffer
that is managed by the IMirror
implementation. Depending
on the mirror side, this instance is either the one the writer is authoring, or the one the reader
is accessing.
getBuffer
in interface IMirror
IBuffer
that is managed by the IMirror
implementationIMirror.getBuffer()
public void handle() throws GRS2ProxyMirrorInvalidOperationException
GRS2ProxyMirrorInvalidOperationException
- if the mirroring state does not allow the operation to be
executedpublic void dispose()
This method actually invokes the respective
dispose(boolean)
with an argument of false. This
is because the actual disposing needs to take place when the mirroring
thread is prepared to gracefully exit its execution
dispose
in interface IMirror
IMirror.dispose()
public void dispose(boolean purge)
false
which puts the mirroring thread in a state where the
needed actions are taken to gracefully exit this part of the protocol but
also notify the respective HTTPWriterMirror
to stop the mirroring
procedure gracefully. When the method in again invoked with a
true
argument from the protocol implementing thread, all
resources are disposed.
purge
- whether the resources need to be immediately disposed, or this
need to wait until the protocol thread is ready to purge the
involved resourcespublic boolean waitInitialization()
HTTPReaderMirror
clients, that want to
be sure that the initialization procedure of the protocol is completed
before they continue their operation. If someone invokes this method
before communication has been successfully been established with the
remote HTTPWriterMirror
, and the involved IBuffer
information including the RecordDefinition
s are exchanged and the
IBuffer
is initialized, the method will block him. After this
operation is completed, and for any later invocation, the method will
return control immediately
public GRS2ProxyMirrorProtocolErrorException getInitializationError()
waitInitialization()
returned false, this method
will return the error that was recorded during the initialization. If no
error was recorded, null is returned
public boolean pollPartial(long recordIndex, int fieldIndex) throws GRS2ProxyMirrorDisposedException
the management of the partial requests is performed using
PartialRequestManager
pollPartial
in interface IMirror
recordIndex
- The record index / id, for which the requester has requested data to be deliveredfieldIndex
- The field index of the specific record for which data are requested
GRS2ProxyMirrorDisposedException
- the mirror is already disposedIMirror.pollPartial(long, int)
public long requestPartial(long recordIndex, int fieldIndex, IBuffer.TransportOverride override, java.lang.Object notify) throws GRS2ProxyMirrorInvalidOperationException, GRS2ProxyMirrorDisposedException
IBuffer
item that has been transfered only partially and more data is requested by the reader client
The indicative time returned for the next poll operation is the amount
defined as ShortMirrorPeriod
requestPartial
in interface IMirror
recordIndex
- The index of the record whose payload is requested. As described in Record
, this index coincides with the record id.fieldIndex
- The index of the field belonging to the defined record for which additional data is requestedoverride
- whether or not the field's IBuffer.TransportDirective
should be overridden as explained in IBuffer
notify
- A synchronization object that can be used for the requester to block on until the required data is provided
IMirror.pollPartial(long, int)
should be used
GRS2ProxyMirrorDisposedException
- the mirror is already disposed
GRS2ProxyMirrorInvalidOperationException
- if the PartialRequestManager
has not been initializedIMirror.requestPartial(long, int,
gr.uoa.di.madgik.grs.buffer.IBuffer.TransportOverride,
java.lang.Object)
public void run()
In the context of the mirroring procedure, the execution of this thread
includes the following actions.
Initially, a connection to the remote HTTPWriterMirror
is
established, the details of the employed IBuffer
are retrieved,
as well as the RecordDefinition
s that describe the Record
s that will be retrieved. The appropriate IBuffer
implementation
is instantiated, configured and set with all the retrieved information.
After the initialization is completed, any blocked clients waiting to be
notified on initialization completion are notified.
The main protocol loop is then initialized. On every iteration, a request
is send to the remote HTTPWriterMirror
with the number of records
that could be added to the local IBuffer
, any partial data
requests, as well as the status of the consumption procedure.
In the next step, any event emitted from the reader is send over to the
writer
The next step is to retrieve from the HTTPWriterMirror
any
Record
s send as well as partial data from the requested ones. The
respective information is used to either populate new Record
s and
add them to the local IBuffer
, or to locate and enhance the
Field
s for which additional data have been received.
Any events that are send from the writer are also received
The remote status is also retrieved and the protocol loop continues
unless it should be teardown based on the remote status.
If the remote mirror has responded with the information requested, then
the period of the next protocol loop is defined as the minimum defined in
ShortMirrorPeriod
while in case no needed
information was received the period is set to the maximum defined in
LongMirrorPeriod
run
in interface java.lang.Runnable
run
in class java.lang.Thread
Thread.run()
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |