2
<title>Architecture</title>
4
<para>The most critical component of the JBoss Remoting architecture is
5
how servers are identified. This is done via an InvokerLocator, which can
6
be represented by a simple String with a URL based format (e.g.,
7
socket://myhost:5400). This is all that is required to either create a
8
remoting server or to make a call on a remoting server. The remoting
9
framework will then take the information embedded within the
10
InvokerLocator and construct the underlying remoting components needed and
11
build the full stack required for either making or receiving remote
14
<para>There are several layers to this framework that mirror each other on
15
the client and server side. The outermost layer is the one which the user
16
interacts with. On the client side, this is the Client class upon which
17
the user will make its calls. On the server side, this is the
18
InvocationHandler, which is implemented by the user and is the ultimate
19
receiver of invocation requests. Next is the transport, which is
20
controlled by the invoker layer. Finally, at the lowest layer is the
21
marshalling, which converts data type to wire format.</para>
23
<graphic fileref="images/design.jpg" />
25
<para>When a user calls on the Client to make an invocation, it will pass
26
this invocation request to the appropriate client invoker, based on the
27
transport specified by the locator url. The client invoker will then use
28
the marshaller to convert the invocation request object to the proper data
29
format to send over the network. On the server side, an unmarshaller will
30
receive this data from the network and convert it back into a standard
31
invocation request object and send it on to the server invoker. The server
32
invoker will then pass this invocation request on to the user’s
33
implementation of the invocation handler. The response from the invocation
34
handler will pass back through the server invoker and on to the
35
marshaller, which will then convert the invocation response object to the
36
proper data format and send back to the client. The unmarshaller on the
37
client will convert the invocation response from wire data format into
38
standard invocation response object, which will be passed back up through
39
the client invoker and Client to the original caller.</para>
41
<bridgehead>Client</bridgehead>
43
<para>On the client side, there are a few utility class that help in
44
figuring out which client invoker and marshal instances should be
47
<graphic fileref="images/design_client.jpg" />
49
<para>For determining which client invoker to use, the Client will pass
50
the InvokerRegistry the locator for the target server it wishes to make
51
invocations on. The InvokerRegistry will return the appropriate client
52
invoker instance based on information contained within the locator, such
53
as transport type. The client invoker will then call upon the
54
MarshalFactory to get the appropriate Marshaller and UnMarshaller for
55
converting the invocation objects to the proper data format for wire
56
transfer. All invokers have a default data type that can be used to get
57
the proper marshal instances, but can be overridden within the locator
60
<bridgehead>Server</bridgehead>
62
<para>On the server side, there are also a few utility classes for
63
determining the appropriate server invoker and marshal instances that
64
should be used. There is also a server specific class for tying the
65
invocation handler to the server invoker.</para>
67
<graphic fileref="images/design_server.jpg" />
69
<para>On the server side, it is the Connector class that is used as the
70
external point for configuration and control of the remoting server. The
71
Connector class will call on the InvokerRegistry with its locator to
72
create a server invoker. Once the server invoker is returned, the
73
Connector will then register the invocation handlers on it. The server
74
invoker will use the MarshalFactory to obtain the proper marshal instances
75
as is done on the client side.</para>
77
<bridgehead>Detection</bridgehead>
79
<para>To add automatic detection, a remoting Detector will need to be
80
added on both the client and the server side as well as a NetworkRegistry
81
to the client side.</para>
83
<graphic fileref="images/design_detection.jpg" />
85
<para>When a Detector on the server side is created and started, it will
86
periodically pull from the InvokerRegistry all the server invokers that it
87
has created. The detector will then use the information to publish a
88
detection message containing the locator and subsystems supported by each
89
server invoker. The publishing of this detection message will be either
90
via a multicast broadcast or a binding into a JNDI server. On the client
91
side, the Detector will either receive the multicast broadcast message or
92
poll the JNDI server for detection messages. If the Detector determines a
93
detection message is for a remoting server that just came online it will
94
register it in the NetworkRegistry. The NetworkRegistry houses the
95
detection information for all the discovered remoting servers. The
96
NetworkRegistry will also emit a JMX notification upon any change to this
97
registry of remoting servers. The change to the NetworkRegistry can also
98
be for when a Detector has discovered that a remoting server is no longer
99
available and removes it from the registry.</para>
b'\\ No newline at end of file'