Along the way of following this discussion, I came up with the following
suggestion:

First of all, this is a good page:
http://outerthought.net/wiki/Wiki.jsp?page=UnderstandingCocoonMounts
It is the kind of HOWTO doc we need in the main docs.





                -====[  Extending <map:mount/>  ]====-





 -============================-
| Part I - the "jar" protocol  |
 -============================-


Let's set the base line with the following popular automount example:

<map:match pattern="auto/*/**">
   <map:mount uri-prefix="auto/{1}/"
src="http://hostname/cocoon/blocks/auto/{1}"/>
</map:match>



How about allowing the following alternatives for src (partially borrowed
from Tomcat):

src="jar:file:/absolute/path/to/a/block.cob"
src="jar:http://hostname:port/path/to/a/block.cob";

The jar protocol is of course the one handled by the standard JDK net
library.
http://java.sun.com/products/jdk/1.2/docs/api/java/net/JarURLConnection.html


Just like JBoss reads EARs from such urls and looks up META-INF/... and
Tomcat reads WARs then looks up WEB-INF/..., we can write in the
specification how Cocoon will read COBs and will look up BLOCK-INF/... (lib,
classes, .xconf, etc.)

This will possibly allow us to borrow a lot from the J2EE specs in terms of
class loading, security, signatures, deployment, life cycle and other
aspects.



                                -0-0-0-



 -=================================-
| Part II - the "service" protocol  |
 -=================================-


Now, we can also merge the WebServiceProxyGenerator and <map:mount/> into
something like:

<map:match pattern="auto/*/**">
   <map:mount uri-prefix="auto/{1}/"
src="service:http://hostname/cocoon/blocks/auto/{1}"/>
</map:match>


Where the src is prefixed with a service protocol, which implies that
requests which
match pattern="auto/*/**" will be forwarded(proxied) to the URL after
service: and the
output will be available to the parent sitemap, just like with regular
mount.

This will allow remote hosting of services/blocks, while to the users of the
current applications it will appear like everything is served by it
directly.
To clarify, as far as the service protocol is concerned, it doesn't matter
what runs the remote site.
It can be any web server, including Cocoon. See the following demo for
example of remote service hosted by Amazon and OpenWiki:
http://www.cocoonhive.org/portal/home


With this in place we can get rid of the current WebServiceProxyGenerator
and replace it with a simple file generator, which uses the cocoon protocol.
In other words, what used to be:


<map:match ...
  <map:generate type="wsproxy" src=http://host123/some/service...


will become:


<map:match
  <map:generate src="cocoon:some/service"

<map:match "some/service"
  <map:mount src="service:http://host123/some/service/...



In addition to sitemap simplicity, the offered approach will also allow the
remote call to return any content type, not necessarily XML. Therefore it
would be possible to refer to it from readers and any other component which
uses the Avalon source resolver.

One more added value is that a site can start simple by using remote
services and then as user demand increases, it will be able to move a Cocoon
block locally by making one simple change, which is replacing the mount src
from service:... to jar:... .


One apparent difficulty with the service protocol is propagating all the
sitemap information normally available to locally mounted sitemaps.
I think that this information should be generally unavailable to remote
services.
However explicit parameters could be passed on. For example:


<map:match "some/service"
  <map:mount src="service:http://host123/some/service/...
    <map:parameter name="request-parameter-to-service-1"
value="{local-sitemap-param-A}"/>
    <map:parameter name="request-parameter-to-service-2"
value="{local-sitemap-param-B}"/>
  </map:mount>




                                -0-0-0-



                         -===[ End of Proposal ]===-



Thoughts?


Ivelin





---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to