<?xml version="1.0" encoding="utf-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>
<channel>
	<title>Comments on: Protocol agnostic middleware</title>
	<atom:link href="http://www.snell-pym.org.uk/archives/2004/08/03/protocol-agnostic-middleware/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.snell-pym.org.uk/archives/2004/08/03/protocol-agnostic-middleware/</link>
	<description>Sarah and Alaric Snell-Pym living in interesting times</description>
	<pubDate>Tue, 22 May 2012 16:24:37 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Snell-Pym &#187; Too many projects</title>
		<link>http://www.snell-pym.org.uk/archives/2004/08/03/protocol-agnostic-middleware/comment-page-1/#comment-109709</link>
		<dc:creator>Snell-Pym &#187; Too many projects</dc:creator>
		<pubDate>Sun, 27 Sep 2009 21:42:49 +0000</pubDate>
		<guid isPermaLink="false">http://snell-pym.org.uk/archives/2004/08/03/protocol-agnostic-middleware/#comment-109709</guid>
		<description>&lt;p&gt;[...] my old protocol agnostic middleware idea. "Middleware" is a bit of a dirty word these days, so perhaps "framework" would be better. I [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] my old protocol agnostic middleware idea. "Middleware" is a bit of a dirty word these days, so perhaps "framework" would be better. I [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Snell-Pym &#187; Middleware</title>
		<link>http://www.snell-pym.org.uk/archives/2004/08/03/protocol-agnostic-middleware/comment-page-1/#comment-40745</link>
		<dc:creator>Snell-Pym &#187; Middleware</dc:creator>
		<pubDate>Mon, 04 Jun 2007 10:12:39 +0000</pubDate>
		<guid isPermaLink="false">http://snell-pym.org.uk/archives/2004/08/03/protocol-agnostic-middleware/#comment-40745</guid>
		<description>&lt;p&gt;[...] Once upon a time, I had an idea that middleware should be really easily accessible from different protocols. [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] Once upon a time, I had an idea that middleware should be really easily accessible from different protocols. [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: alaric</title>
		<link>http://www.snell-pym.org.uk/archives/2004/08/03/protocol-agnostic-middleware/comment-page-1/#comment-3</link>
		<dc:creator>alaric</dc:creator>
		<pubDate>Wed, 04 Aug 2004 12:47:57 +0000</pubDate>
		<guid isPermaLink="false">http://snell-pym.org.uk/archives/2004/08/03/protocol-agnostic-middleware/#comment-3</guid>
		<description>&lt;p&gt;Well, for a lot of simple exported procedures that fall within a range of "obvious" types - integers, strings, floats, lists, sets, dictionaries - mappings to all of the main RPC protocols can be auto generated.&lt;/p&gt;

&lt;p&gt;For things not intended to be an RPC protocol, it gets more interesting. You can take two approaches (and I would be inclined to offer both). For example, with SMTP, there could be two interfaces: One where the client obeys the middleware server's conventions, and one where the opposite applies.&lt;/p&gt;

&lt;p&gt;The former interface would involve sending email in a format specified by the middleware service. Eg, a message to &lt;code&gt;[name of procedure]@[server]&lt;/code&gt; with the body being plain text and containing zero or more &lt;code&gt;param=value&lt;/code&gt; strings, with a defined syntax for the textual representation of each of the types supported by the middleware server (perhaps the XMLy thing SOAP uses). This can invoke any exported procedure. The return value of the procedure is serialised into text and sent as a standard email reply.&lt;/p&gt;

&lt;p&gt;For the latter interface, if the exported procedure is specially marked as being an SMTP command handler - through metadata, through a naming convention, or just through having a single parameter of type "SMTPEmailMessage", then the message itself is not parsed in any way; it is handed direct to the SMTP command handler to process as it sees fit. This is for use when you do not control the format the client sends the messages in.&lt;/p&gt;

&lt;p&gt;In some cases, you will have an RPC protocol that supports some type or concept that is not really supportable by others - in RMI, one could have an instance of a Swing class as a parameter, and supporting that in a non-Java environment would be untenable. Support for such things can only be provided by having special protocol-dependent mappings; if the middleware were written in Java, then exported procedures with Java-dependent signatures would only be available via RMI and not via SMTP.&lt;/p&gt;

&lt;p&gt;So there's no need to disallow features that can't be made available over all protocols; and only when a procedure is needed that cannot be accessed by any protocol available to the client under development due to such a feature restriction would anybody need to worry about manually writing protocol mappings on the server.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Well, for a lot of simple exported procedures that fall within a range of "obvious" types - integers, strings, floats, lists, sets, dictionaries - mappings to all of the main RPC protocols can be auto generated.</p>

<p>For things not intended to be an RPC protocol, it gets more interesting. You can take two approaches (and I would be inclined to offer both). For example, with SMTP, there could be two interfaces: One where the client obeys the middleware server's conventions, and one where the opposite applies.</p>

<p>The former interface would involve sending email in a format specified by the middleware service. Eg, a message to <code>[name of procedure]@[server]</code> with the body being plain text and containing zero or more <code>param=value</code> strings, with a defined syntax for the textual representation of each of the types supported by the middleware server (perhaps the XMLy thing SOAP uses). This can invoke any exported procedure. The return value of the procedure is serialised into text and sent as a standard email reply.</p>

<p>For the latter interface, if the exported procedure is specially marked as being an SMTP command handler - through metadata, through a naming convention, or just through having a single parameter of type "SMTPEmailMessage", then the message itself is not parsed in any way; it is handed direct to the SMTP command handler to process as it sees fit. This is for use when you do not control the format the client sends the messages in.</p>

<p>In some cases, you will have an RPC protocol that supports some type or concept that is not really supportable by others - in RMI, one could have an instance of a Swing class as a parameter, and supporting that in a non-Java environment would be untenable. Support for such things can only be provided by having special protocol-dependent mappings; if the middleware were written in Java, then exported procedures with Java-dependent signatures would only be available via RMI and not via SMTP.</p>

<p>So there's no need to disallow features that can't be made available over all protocols; and only when a procedure is needed that cannot be accessed by any protocol available to the client under development due to such a feature restriction would anybody need to worry about manually writing protocol mappings on the server.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Ben</title>
		<link>http://www.snell-pym.org.uk/archives/2004/08/03/protocol-agnostic-middleware/comment-page-1/#comment-2</link>
		<dc:creator>Ben</dc:creator>
		<pubDate>Wed, 04 Aug 2004 12:14:41 +0000</pubDate>
		<guid isPermaLink="false">http://snell-pym.org.uk/archives/2004/08/03/protocol-agnostic-middleware/#comment-2</guid>
		<description>&lt;p&gt;All very well and good, but won't each protocol end up supporting only the lowest common denominator of all the other protocols? Otherwise you'll end up writing bindings for all services supported, instead of just one service definition. It's the "little jiggling" that you hint at which is going to be the major problem.&lt;/p&gt;

&lt;p&gt;If there isn't a neat way of writing one easy definition for every protocol which supports everything you might want to use, all in one go, then you might as well just implement a private interface which runs on localhost only, and write all the bindings yourself using the pre-existing tools for each protocol. As is done now.&lt;/p&gt;

&lt;p&gt;Nice idea though. It would be rather handy.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>All very well and good, but won't each protocol end up supporting only the lowest common denominator of all the other protocols? Otherwise you'll end up writing bindings for all services supported, instead of just one service definition. It's the "little jiggling" that you hint at which is going to be the major problem.</p>

<p>If there isn't a neat way of writing one easy definition for every protocol which supports everything you might want to use, all in one go, then you might as well just implement a private interface which runs on localhost only, and write all the bindings yourself using the pre-existing tools for each protocol. As is done now.</p>

<p>Nice idea though. It would be rather handy.</p>]]></content:encoded>
	</item>
</channel>
</rss>

