Why does the RMI
implementation create so many sockets when my application uses custom socket
factories; or why are stubs (using a custom socket factory) that refer to the
same remote object not equal; or why does the RMI implementation not reuse
server-side ports when I use a custom server socket factory?
The RMI implementation
attempts to reuse open sockets where possible for remote invocations. When a
remote method is invoked on a stub that uses a custom socket factory, the RMI implementation
will reuse an open connection (if any) as long as that socket was created by an
equivalent socket factory. Since client socket factories are serialized to
clients, a single client may have several distinct copies of the same logical
socket factory. To ensure that the RMI implementation will reuse sockets
created by custom socket factories, make sure your custom client socket factory
classes implement the hashCode and equals methods
appropriately. If the client socket factory does not implement these methods
correctly, another ramification is that stubs (using the client socket factory)
that refer to the same remote object will not be equal.
The RMI implementation attempts to reuse server-side ports as well. It will
only do so if there is an existing server socket for the port created by an
equivalent socket factory. Make sure the server socket factory class implements
the hashCode and equals methods too.
If your socket factory has no instance state, a trivial implementation of the hashCode and equals methods are the following:
publicinthashCode(){
Return57;
}
publicbooleanequals(Objecto){
returnthis.getClass()==o.getClass()
}
What is difference RMI
registry and OSAgent ?
RMI
Registry
The rmiregistry command creates and starts a remote
object registry on the specified port on the current host. If port is omitted,
the registry is started on port 1099. The rmiregistry
command produces no output and is typically run in the background. For example:
start rmiregistry
A remote object registry is a bootstrap naming service that is used by RMI
servers on the same host to bind remote objects to names. Clients on local and
remote hosts can then look up remote objects and make remote method
invocations.
The registry is typically used to locate the first remote object on which an
application needs to invoke methods. That object in turn will provide
application-specific support for finding other objects.
The methods of the java.rmi.registry.LocateRegistry
class are used to get a registry operating on the local host or local host and
port.
The URL-based methods of the java.rmi.Naming class
operate on a registry and can be used to look up a remote object on any host,
and on the local host: bind a simple (string) name to a remote object, rebind a
new name to a remote object (overriding the old binding), unbind a remote
object, and list the URLs bound in the registry.
OSAgent
The osagent is a process that allows CORBA servers to
register their objects and assists client applications in the location of
objects. To avoid a single point of failure, the osagent
is designed to be operated on more than one node. Osagent
processes (and the clients and servers that access them) follow a set of rules
to discover each other and cooperate in the location of registered objects.
Difference in between Unicast and Multicast object ?
A
unicast packet is the complete opposite: one machine
is talking to only one other machine. All TCP connections are unicast, since they can only have one destination host for
each source host. UDP packets are almost always unicast
too, though they can be sent to the broadcast address so that they reach every
single machine in some cases.
A multicast packet is from one machine to one or more. The difference between a
multicast packet and a broadcast packet is that hosts receiving multicast
packets can be on different lans,
and that each multicast data-stream is only transmitted between networks once,
not once per machine on the remote network. Rather than each machine connecting
to a video server, the multicast data is streamed per-network,
and multiple machines just listen-in on the multicast data once it's on the
network.
What is the main
functionality of the Remote Reference Layer ?
RRL
exists in both the RMI client and server. It is used by the stub or skeleton
protocol layer and uses the transport layer. RRL is reponsible
for transport-independent functioning of RMI, such as connection management or unicast/multicast object invocation.
No comments:
Post a Comment