On Mar 22, 2006, at 9:53 AM, ant elder wrote:

Thought about it a little bit, and in some offline discussion a while ago Jeremy was also interested in that. I think there does need to be a balance so as to not lose the simplicity of the client environment and to utilize
its dynamic nature. I'm definately interested in any feedback or
suggestions. The SCA PHP guys have had similar issues so it would be useful to talk to them or align this with what they do rather than what Java SCA
does.

Maybe - I haven't looked at the PHP stuff. I think doing some of the Java stuff in JavaScript would be pretty strightforward. I'm not completely sure, though, since most of my experience is with Actionscript.

I'm really interested in looking at utilizing Flash.

One technique is to have in the HTML page a hidden Flash movie with no
visual content and expose its XMLSocket to the JavaScript environment. This would work really well when Tuscany has the HTTP system service that Jeremy
has mentioned for the XMLSocket to talk to.

Not all browsers will have the Flash plugin so you still need to support the other ways like HTML streaming, and older browsers don't support streaming so sometimes you'd fall back to using periodic refresh. But all thats hidden from the client as the Tuscany server and client code can interrogate the environment and use what is most appropriate for the environment and the parameters on the SCA binding. The client HTML and scripts remain really
simple and it runs on any browser.

I would probably build some type of message pump in Flash and tunnel it through Javascript. The Flash<-->Javascript integration was pretty bad, though, prior to Flash Player 7.

There are other projects working on these types of things but this seems to have a some benefits over them. One of the problems with other web remoting technologies is they use custom protocols which are often platform specific, but this using JSON makes it platform independent. That and using the SCA config model means these SCA AJAX clients could theoretically be hosted on any SCA platform, and when using the Tuscany HTTP service the performance
would be very competitive.

How about an ECMAScript SDO impl :-) ? I implemented a primitive change tracking mechanism in Actionscript a while back that could do both "dynamic" method and field-level interception so I imagine this would be theoretically possible in Java/ECMAScript.


   ...ant

On 3/22/06, Jim Marino <[EMAIL PROTECTED]> wrote:


This seems interesting but I have a few questions, which are not
really important but arise from curiosity:

I'm curious if you thought about making this look more like SCA
Client & Implementation specs? For example, it may be convenient to
have the APIs look more like the Java C&I spec such as instead of
SCA.xxx doing:

           ModuleContext moduleContext =
CurrentModuleContext.getContext();
          HelloWorldService helloworldService = HelloWorldService
(moduleContext.locateService("HelloWorldServiceComponent"));

I also think dependency injection, metadata, and dynamic generation
of proxies for external services could be supported (with invocation
handlers for policies). I've seen people attach "markers" to the
function object's prototype and/or prototype of a class in
JavaScript.  It would also be nice to be able to support the
asynchronous C&I spec model more closely, e.g. callbacks and ending
sessions by calling a business method. What would be really cool IMO
is an SDO implementation in JavaScript. These things would provide an
interesting client-side model, which could actually be done as a
Javascript-based implementation of an SCA container.

As a side note, I've found Actionscript and Flash have a lot of
capabilities for doing these types of things - e.g. the ability to do
"real" client side async with sockets, including binary sockets in
Flash Player 8.5.  It may even be worth looking at using a
lightweight flash client that just keeps a socket open to the server
and communicates with Javascript to provide real async and local
persistent storage.

Unfortunately, I'm drowning in a bunch of other work right now so I
can't really volunteer for any of this.

Jim

On Mar 22, 2006, at 2:29 AM, ant elder wrote:


Below is the note I posted a few weeks ago about what the JSON-RPC
binding
does, which is to support entryPoints which enabled web pages in a
browser
to make RPC style calls into SCA components on the server. (The
code has
moved from the sandbox now so those links below are wrong)

I'd like to also add support for externalServices which would
enable the
server to push events asynchronously out to the browser client. It
would
work something like the following:

As before the HTML page includes the SCA system script "scripts/
sca.js"
which gets initialised when the page is loaded. That makes the SCA.
object
available in the script environment which is used to make RPC calls
to the
SCA entryPoints as before, but now it also supports registering
handlers for
the methods on any SCA externalServices. For example:

       SCA.myExternalService.foo(fooHandler);

The fooHandler here is a JavaScipt function, such as:

       function fooHandler(s) {
            alert(s);
       }

So that would pop up an alert box on the browser every time the
server side
externalService received a foo message.

The act of registering the handler establishes the channel back to the
server. It could be closed by the client making the call with null
to remove
the handler:

       SCA.myExternalService.foo(null);

There are various techniques for doing these asynchronous
communications,
HTTP streaming, periodic refresh, etc, there's a lot of info about the
techniques at: http://ajaxpatterns.org/HTTP_Streaming.

Exactly how its done is completely transparent to the web client.
There
would be configuration parameters on the SCA binding to configure
which ever
technique is most appropriate for that application and the options
that may
require such as timeout or heartbeat intervals.

This seems way cool to me, but there wasn't any comments on the
original
post so maybe I'm missing something, what do others think about this?

   ...ant


---------- Forwarded message ----------
From: ant elder <[EMAIL PROTECTED]>
Date: Mar 8, 2006 8:59 PM
Subject: Re: How do you register SCDL for a new binding?
To: [email protected]

Thanks to Jeremy and Sebastien for helping with this, I have it
going now
and I've updated the sandbox with code that works:
http://svn.apache.org/repos/asf/incubator/tuscany/sandbox/ant/ jsonrpc/

It enables JavaScript running in a browser to access SCA components
defined
in the web app with an entryPoint using the new binding. All you
have to do
is add one extra script definition line to the HTML:

    <script type="text/javascript" src="scripts/sca.js"></script>

and then user scripts can access all the entryPoints from an SCA
variable
that gets automatically defined:

    var result = SCA.HelloWorldService.getGreetings(name);

There's a sample helloworld app that demonstrates it:
http://svn.apache.org/repos/asf/incubator/tuscany/sandbox/ant/
jsonrpc/helloworldajax/


   ...ant

On 3/6/06, ant elder <[EMAIL PROTECTED]> wrote:



You're a star, thanks!


On 3/6/06, Jean-Sebastien Delfino <[EMAIL PROTECTED]> wrote:



ant elder wrote:


I'm messing about trying to add a new binding to Tuscany but
can't get


it to


work. There must be something I'm missing to register the new
binding


SCDL


as all I get is the exception below saying "Feature ' binding.ajax'


not


found". Could  someone have a quick look if its something
obvious? The
code's up at http://svn.apache.org/repos/asf/incubator/tuscany/
sandbox/ant/


,


the AJAXAssemblyLoaderTestCase shows the problem.

Thanks,

   ...ant

java.lang.RuntimeException:



file:/C:/SCA/SVN/WORK/sca/binding.ajax/bin/org/apache/tuscany/
binding/ajax/assembly/tests/sca.module



    at


org.apache.tuscany.model.scdl.loader.impl.SCDLXMLReader.getRootObj ec
t


(SCDLXMLReader.java:103)
    at


org.apache.tuscany.model.scdl.loader.impl.SCDLXMLReader.getModule(


SCDLXMLReader.java :61)
    at



org.apache.tuscany.model.scdl.loader.impl.SCDLAssemblyModelLoaderI mp
l.loadModule


(SCDLAssemblyModelLoaderImpl.java:101)
    at



org.apache.tuscany.binding.ajax.assembly.tests.AJAXAssemblyLoaderT es
tCase.testLoader


(AJAXAssemblyLoaderTestCase.java:63)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown


Source)


    at java.lang.reflect.Method.invoke(Unknown Source)
    at junit.framework.TestCase.runTest(TestCase.java:154)
    at junit.framework.TestCase.runBare(TestCase.java:127)
    at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java: 124)
    at junit.framework.TestResult.run(TestResult.java:109)
    at junit.framework.TestCase.run (TestCase.java:118)
    at junit.framework.TestSuite.runTest(TestSuite.java:208)
    at junit.framework.TestSuite.run(TestSuite.java:203)
    at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(
RemoteTestRunner.java:478)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(
RemoteTestRunner.java:344)
    at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (
RemoteTestRunner.java:196)
Caused by:


org.eclipse.emf.ecore.resource.Resource $IOWrappedException:Feature '


binding.ajax' not found. ( http:///temp.xml, 23, 24)
    at org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl.load(


XMLLoadImpl.java:283)


    at org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.doLoad(
XMLResourceImpl.java:646)
    at org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.load (
XMLResourceImpl.java:614)
    at org.apache.tuscany.sdo.helper.XMLDocumentImpl.load(
XMLDocumentImpl.java:246)
    at org.apache.tuscany.sdo.helper.XMLDocumentImpl.load(
XMLDocumentImpl.java :225)
    at org.apache.tuscany.sdo.helper.XMLHelperImpl.load(


XMLHelperImpl.java


:72)
    at org.apache.tuscany.sdo.helper.XMLHelperImpl.load(


XMLHelperImpl.java


:66)
    at


org.apache.tuscany.model.scdl.loader.impl.SCDLXMLReader.getRootObj ec
t


(SCDLXMLReader.java:100)
    ... 18 more




Ant,

Good news, I took a look at your AJAX binding in your sandbox and
was
able to get your test case working... You just had a few minor
problems
in your XSD, missing a namespace prefix declaration, and some
left-over
references to axis2.

I am committing the fixes for you. Here are the details:
- In sca-binding-ajax.xsd, removed the <include
location="sca-core.xsd"/> which actually included a copy of the
whole
SCDL schema in your Ajax binding namespace. This is not necessary,
instead the base SCDL XSD needs to be correctly imported so that
your
AJAXBinding can extend the correct base SCDL Binding type.
- Fixed the location attribute in the <import location="....
sca-core.xsd"> to a correct relative location pointing to sca-
core.xsd
in the java/sca/model project from your sandbox/ant/binding.ajax.
- In sca.module, added an ajax namespace prefix declaration for your
Ajax binding namespace and changed <binding.ajax/> to
<ajax:binding.ajax
/>.
- Changed the left over references to axis2 to ajax in sca.module
and
the test case itself.

Hope this helps...

--
Jean-Sebastien












Reply via email to