Class GenericExporter
- All Implemented Interfaces:
Serializable,Exporter
Details of
the export and unexport behavior, including the underlying transport communication protocols used
for remote invocation and additional remote invocation semantics, are defined by the particular
implementation of ITransportConfig configuration object.
When the object exported by
export(Remote) method, the return value is dynamic proxy(SmartStub) which represents a
direct reference to the exported object.
If the exported stub is located in Local VM
with remote object, every invoked method will have a direct reference call on remote object,
otherwise the stub was serialized and moved out side of local VM.
If the exported stub was
never serialized and no reference left pointing to this stub, this stub will be collected by GC
without calling explicitly unexport(boolean) method.
Working with GenericExporter,
OneWayRemoteCall annotation on desired remote method. The remote interface method with defined
OneWayRemoteCall annotation will be called as one-way(async) remote call without return
value and without being blocking while the remote call will be execute by Remote implementation.
Steps to create distributed RPC service.
- Define remote interface
- Implement the remote interface
- Create an instance of GenericExporter with appropriate
ITransportConfigconfiguration object. - export the impl-obj with GenericExporter.
- unexport to remove the remote object, from the runtime of underlying transport protocol.
Example:
public interface IRemoteHello
extends Remote
{
String say( String name )
throws RemoteException;- Since:
- 5.2
- Author:
- Igor Goldenberg
- See Also:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected booleanUnexport the desired obj from the underlying transport protocol and remove the obj from the manage cache.Exports the specified remote object and returns a proxy that can be used to invoke remote methods on the exported remote object.Exports the specified remote object and returns a proxy that can be used to invoke remote methods on the exported remote object.export(Remote impl, ITransportConfig config, boolean allowCache) Exports the specified remote object with desiredITransportConfigconfiguration object and returns a proxy that can be used to invoke remote methods on the exported remote object.booleanisExported(Remote obj) Returnstrueif the provided obj exported by GenericExporter.booleanunexport(boolean force) Unexports the remote object that was exported by thisExportersuch that it will no longer receive remote method invocations that were made possible as a result of exporting it with thisExporter.booleanRemoves the remote object, obj, from the runtime of underlying transport protocol.
-
Constructor Details
-
GenericExporter
Constructor.- Parameters:
config- The configuration object for this exporter. All exported objects will be used byITransportConfig.
-
-
Method Details
-
getConfiguration
- Returns:
- the transport configuration for this exporter instance.
-
export
Exports the specified remote object and returns a proxy that can be used to invoke remote methods on the exported remote object. This method must only be invoked once on a givenExporterinstance.The returned proxy implements an implementation-specific set of remote interfaces of the remote object and may also implement additional implementation-specific interfaces.
A remote interface is an interface that extends the interface
java.rmi.Remoteand whose methods each declare at least one exception whose type isjava.rmi.RemoteExceptionor one of its superclasses.If the
implobject already exported, returns the same proxy instance representing thisimpl- Specified by:
exportin interfaceExporter- Parameters:
impl- a remote object to export- Returns:
- a proxy for the remote object
- Throws:
ExportException- if a problem occurs exporting the objectSecurityException- if aSecurityExceptionoccurs exporting the objectIllegalArgumentException- ifimplisnullIllegalStateException- if an object has already been exported with thisExporterinstance
-
export
Exports the specified remote object and returns a proxy that can be used to invoke remote methods on the exported remote object. This method must only be invoked once on a givenExporterinstance.The returned proxy implements an implementation-specific set of remote interfaces of the remote object and may also implement additional implementation-specific interfaces.
A remote interface is an interface that extends the interface
java.rmi.Remoteand whose methods each declare at least one exception whose type isjava.rmi.RemoteExceptionor one of its superclasses.If the
implobject already exported, returns the same proxy instance representing thisimpl- Parameters:
impl- a remote object to exportallowCache- allow the exported object to cached when serialized over the network- Returns:
- a proxy for the remote object
- Throws:
ExportException- if a problem occurs exporting the objectSecurityException- if aSecurityExceptionoccurs exporting the objectIllegalArgumentException- ifimplisnullIllegalStateException- if an object has already been exported with thisExporterinstance
-
export
public Remote export(Remote impl, ITransportConfig config, boolean allowCache) throws ExportException Exports the specified remote object with desiredITransportConfigconfiguration object and returns a proxy that can be used to invoke remote methods on the exported remote object. This method must only be invoked once on a givenExporterinstance.The returned proxy implements an implementation-specific set of remote interfaces of the remote object and may also implement additional implementation-specific interfaces.
A remote interface is an interface that extends the interface
java.rmi.Remoteand whose methods each declare at least one exception whose type isjava.rmi.RemoteExceptionor one of its superclasses.If the
implobject already exported, returns the same proxy instance representing thisimpl- Parameters:
config- the configuration object to export theimplobject.impl- a remote object to export- Returns:
- a proxy for the remote object
- Throws:
ExportException- if a problem occurs exporting the objectSecurityException- if aSecurityExceptionoccurs exporting the objectIllegalArgumentException- ifimplisnullIllegalStateException- if an object has already been exported with thisExporterinstance
-
_unexport
Unexport the desired obj from the underlying transport protocol and remove the obj from the manage cache. -
unexport
Removes the remote object, obj, from the runtime of underlying transport protocol. If successful, the object can no longer accept incoming RMI calls. If the force parameter is true, the object is forcibly unexported even if there are pending calls to the remote object or the remote object still has calls in progress. If the force parameter is false, the object is only unexported if there are no pending or in progress calls to the object.- Parameters:
obj- the remote object to be unexported pending or in-progress calls; if false, only unexports the object if there are no pending or in-progress calls- Returns:
- true if operation is successful, false otherwise
-
unexport
public boolean unexport(boolean force) Unexports the remote object that was exported by thisExportersuch that it will no longer receive remote method invocations that were made possible as a result of exporting it with thisExporter. The unexport operation may not occur if theforceargument isfalse. This method must only be invoked after theexportmethod has been invoked on thisExporterinstance to export a remote object successfully.This method returns
trueif upon return, the remote object is no longer exported with thisExporter, andfalseif the remote object remains exported with thisExporter. This method will always returntrueif it has returnedtruepreviously.The
forceparameter serves to indicate whether or not the caller desires the unexport to occur even if there are known remote calls pending or in progress to the remote object that were made possible by thisExporter:- If
forceistrue, then the remote object will be forcibly unexported even if there are remote calls pending or in progress, and this method will returntrue. - If
forceisfalse, then this acts as a hint to the implementation that the remote object should not be unexported if there are known remote calls pending or in progress, and this method will either unexport the remote object and returntrueor not unexport the remote object and returnfalse. If the implementation detects that there are indeed remote calls pending or in progress, then it should returnfalse; otherwise, it must returntrue. If the implementation does not support being able to unexport conditionally based on knowledge of remote calls pending or in progress, then it must implement this method as ifforcewere alwaystrue.
If the remote object is unexported as a result of this method, then the implementation may (and should, if possible) prevent remote calls in progress from being able to communicate their results successfully.
- Specified by:
unexportin interfaceExporter- Parameters:
force- iftrue, the remote object will be unexported even if there are remote calls pending or in progress; iffalse, the remote object may only be unexported if there are no known remote calls pending or in progress- Returns:
trueif the remote object is unexported when this method returns andfalseotherwise
- If
-
isExported
Returnstrueif the provided obj exported by GenericExporter.- Parameters:
obj- the object to check.- Returns:
trueif provided obj exported and manage by GenericExporter.
-