gr.uoa.di.madgik.grs.proxy.tcp
Class TCPStoreReaderProxy

java.lang.Object
  extended by gr.uoa.di.madgik.grs.proxy.tcp.TCPReaderProxy
      extended by gr.uoa.di.madgik.grs.proxy.tcp.TCPStoreReaderProxy
All Implemented Interfaces:
IProxy, IReaderProxy

public class TCPStoreReaderProxy
extends TCPReaderProxy

This proxy extends the TCPReaderProxy capabilities by adding an additional logic layer on top of the original extended base capabilities. This additional logic layer serves to contact the IBufferStore that can then create a locator capable of being managed by the underlying TCPReaderProxy instance.

Author:
gpapanikos

Nested Class Summary
 
Nested classes/interfaces inherited from interface gr.uoa.di.madgik.grs.proxy.IProxy
IProxy.ProxyType
 
Field Summary
 
Fields inherited from interface gr.uoa.di.madgik.grs.proxy.IProxy
ProxyScheme, ProxyStoreScheme
 
Constructor Summary
TCPStoreReaderProxy()
          Creates a new instance
 
Method Summary
 void fromLocator(java.net.URI locator)
          Populates an instance of the IReaderProxy implementer with the information provided through the specific locator URI
 IBuffer getBuffer()
          After the proxy has been initialized, through this method, the IBuffer that can be used by the reader to access the writer side IBuffer can be retrieved
static boolean isOfType(java.net.URI locator)
          Checks if the provided URI is of a type that can be managed by an instance of this class.
 
Methods inherited from class gr.uoa.di.madgik.grs.proxy.tcp.TCPReaderProxy
getHostname, getPort, overrideBufferCapacity
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TCPStoreReaderProxy

public TCPStoreReaderProxy()
Creates a new instance

Method Detail

fromLocator

public void fromLocator(java.net.URI locator)
                 throws GRS2ProxyInvalidArgumentException,
                        GRS2ProxyInvalidOperationException
Populates an instance of the IReaderProxy implementer with the information provided through the specific locator URI

This method parses the provided URI to retrieve the needed information. An example of the URI this proxy can manage is grs2-proxy://foo.bar.gr:53361?key=272b934d-e796-4c30-944c-44ec2aec7eb7#TCP

This method parses the provided URI locator that is expected to be in the form of the following example grs2-store-proxy://foo.bar.gr:53361?key=272b934d-e796-4c30-944c-44ec2aec7eb7#TCPStore. After the parsing is completed, a connection is made to the provided host and port where it is expected that an instance of the TCPStoreConnectionHandler is listening. The key of the IBufferStore is send and the URI locator is retrieved which is then forwarded to the underlying TCPReaderProxy to take over any subsequent actions

Specified by:
fromLocator in interface IReaderProxy
Overrides:
fromLocator in class TCPReaderProxy
Throws:
GRS2ProxyInvalidArgumentException - If the provided locator is not of the expected type of the parsing procedure does not provide the valid information needed
GRS2ProxyInvalidOperationException - if there was a problem initializing the underlying TCPReaderProxy
See Also:
TCPReaderProxy.fromLocator(java.net.URI)

getBuffer

public IBuffer getBuffer()
                  throws GRS2ProxyInvalidOperationException
After the proxy has been initialized, through this method, the IBuffer that can be used by the reader to access the writer side IBuffer can be retrieved

Initializes a TCPReaderMirror to handle the reader side mirroring procedure. The mirror is set with the information available to the proxy, using the TCPReaderMirror.setKey(String), TCPReaderMirror.setPort(int) and TCPReaderMirror.setHostname(String) and then the TCPReaderMirror.handle() method is invoked. The proxy waits for the mirroring procedure to be initialized blocking using TCPReaderMirror.waitInitialization() and if there was any error during the initialization procedure, it is retrieved and thrown using TCPReaderMirror.getInitializationError(). After this procedure is completed, the mirroring procedure continues in the TCPReaderMirror thread of execution. The returned IBuffer is the one available though TCPReaderMirror.getBuffer() and is populated from TCPReaderMirror

This method should only be used after the initialization step of the fromLocator(URI) has been completed. After this is done, any call to this method simple forwards the request to he underlying TCPReaderProxy.getBuffer() method

Specified by:
getBuffer in interface IReaderProxy
Overrides:
getBuffer in class TCPReaderProxy
Returns:
The IBuffer that is serving the reader
Throws:
GRS2ProxyInvalidOperationException - if a call to this overriding method is done even after the the store has been contacted and the underlying TCPReaderProxy needs to be used.
See Also:
TCPReaderProxy.getBuffer()

isOfType

public static boolean isOfType(java.net.URI locator)
Checks if the provided URI is of a type that can be managed by an instance of this class. It bases its checks on the URI scheme and the fragment type. An example of the URI this proxy can manage is grs2-store-proxy://foo.bar.gr:53361?key=272b934d-e796-4c30-944c-44ec2aec7eb7#TCPStore

Parameters:
locator - the locator URI that needs to be checked
Returns:
true is this proxy class can handle the locator, false otherwise