Wiki source code of Remoting
Last modified by christoph_lechleitner@iteg_at on 2022-08-08 10.40:02
Show last authors
| author | version | line-number | content |
|---|---|---|---|
| 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 | \\ |