Wiki source code of Remoting

Last modified by christoph_lechleitner@iteg_at on 2022-08-08 10.40:02

Show last authors
1 = {{id name="RemotingHome-Introduction"/}}Introduction =
2
3 Remoting is a framework issuing remote calls over TCP/IP with optional TLS support. It provides for callback patterns, broadcating and bean support and interoperates well with the [[spring framework>>url:http://www.springframework.org/||shape="rect"]] and [[OSGi>>url:http://www.osgi.org||shape="rect"]].
4
5 Furthermore, it offers two alternative wire protocols. One is based on java.io.ObjectOuputStream while the other protocol uses a highly optimized binary data stream, which additionally features C++ interoperability through the fancysock library.
6
7 The source code can be checked out from the SVN repository located here:
8
9 {{code language="none"}}
10 http://svn.clazzes.org/svn/remoting
11 {{/code}}
12
13 For manual installation you may download the .jar files from the maven repository:
14
15 {{code language="none"}}
16 http://maven.clazzes.org/org/clazzes/remoting/
17 {{/code}}
18
19 = {{id name="RemotingHome-Mavenintegration"/}}Maven integration =
20
21 We recommend to build your project with [[Maven>>url:http://maven.apache.org/||shape="rect"]]. Just add the following snippets to your {{code language="none"}}pom.xml{{/code}} file:
22
23 {{code language="none"}}
24 <repository>
25 <id>clazzes.org</id>
26 <url>http://mvn.clazzes.org/</url>
27 </repository>
28  
29 <dependency>
30 <groupId>org.clazzes</groupId>
31 <artifactId>remoting</artifactId>
32 <version>yourversion</version>
33 </dependency>
34 {{/code}}
35
36 = {{id name="RemotingHome-Sourcecodeandissuetracker"/}}Source code and issue tracker =
37
38 --Subversion: [[http:~~/~~/svn.clazzes.org/svn/remoting>>url:http://svn.clazzes.org/svn/remoting||shape="rect"]]--
39
40 --Jira: [[REMOTING>>url:https://jira.clazzes.org/browse/REMOTING||shape="rect"]]--
41
42 Git-Mirrors: See [[https:~~/~~/git.clazzes.org/>>url:https://git.clazzes.org/||shape="rect"]], search for "{{code language="none"}}java-libs/rpc{{/code}}".
43
44 = {{id name="RemotingHome-ProtocolandClient/ServerSupport"/}}Protocol and Client / Server Support =
45
46 == {{id name="RemotingHome-BinaryProtocol"/}}Binary Protocol ==
47
48 The binary protocol that is based on but not quite equal to Java serialization.
49
50 Both Java and C++ can act as client and server for this variant.
51
52 === {{id name="RemotingHome-BinaryProtocolC++"/}}Binary Protocol C++ ===
53
54 For C++ see {{code language="none"}}fancysock3-dev{{/code}} from the {{code language="none"}}*-fancylibs-3{{/code}} repos on [[deb.clazzes.org>>url:https://deb.clazzes.org/||shape="rect"]] and [[rpm.clazzes.org>>url:https://rpm.clazzes.org/||shape="rect"]].
55
56 As as starting point look at class {{code language="none"}}Fancy::Sock::RemotingConnectionHandlerFactory{{/code}} (server) and {{code language="none"}}Fancy::Sock::RemotingClientPool{{/code}} (client).
57
58 == {{id name="RemotingHome-JSONProtocol"/}}JSON Protocol ==
59
60 The JSON protocol is based on JSON-RPC-2.0 and supported by a server helper for C++, and there are examples for JavaScript clients (but nothing public yet).
61
62 === {{id name="RemotingHome-JSONProtocolC++"/}}JSON Protocol C++ ===
63
64 For C++ see {{code language="none"}}fancysock3-dev{{/code}} from the {{code language="none"}}*-fancylibs-3{{/code}} repos on [[deb.clazzes.org>>url:https://deb.clazzes.org/||shape="rect"]] and [[rpm.clazzes.org>>url:https://rpm.clazzes.org/||shape="rect"]].
65
66 As as starting point look at class {{code language="none"}}Fancy::Sock::HttpD::JsonRpc2RequestHandler{{/code}}.
67
68 === {{id name="RemotingHome-JSONProtocolJavaScript"/}}JSON Protocol JavaScript ===
69
70 There is no public example from clazzes.org yet, but it's basically JSON-RPC-2.0.
71
72 === {{id name="RemotingHome-JSONSerializationandDeserializationbehaviour&requirements(ofC++backend)"/}}JSON Serialization and Deserialization behaviour & requirements (of C++ backend) ===
73
74 If an object is serialized all fields are serialized. Addtionally there's a field "{{code language="none"}}serialID{{/code}}" that's basically the fully qualified class name of the Java data classe ("POJO"), like {{code language="none"}}org.clazzes.foobar.api.data.MyPojo{{/code}}. All complex fields can be {{code language="none"}}null{{/code}}, including Strings.
75
76 When deserializing a complex top-level object that field "{{code language="none"}}serialID{{/code}}" is required to understand the contained type.
77
78 \\
79
80 \\
81
82 \\