Thanks for this Anatole made things quite clearer and saved me a lot
of time.

I own LCDS 2.6, so as in your PS I'd like to know where can i find
these LCDS 2.6 sections you are referring to.

Also, since you have the knowledge on this, could you help out on this
topic as well?
http://tech.groups.yahoo.com/group/flexcoders/message/108292

Thanks so much,
Alexander


--- In [email protected], "Anatole Tartakovsky"
<[EMAIL PROTECTED]> wrote:
>
> The real question is - does it move you in the right direction.
>  Architecturally, (long) RemoteObject call is a one-way-at-a-time
road with
> typical congestions including latency, inability to detect lost
> packages/dups/out of sequence. RTMP is usually 2 pairs of 2-way sockets
> (Publishing and Subscriptions), using "acknowledgements" on each
side rather
> then responses. "Blocking" model of request/response over
non-blocking IO
> model of RTMP will most likely put a lot of pressure on the resource
> consumption and performance. By using Publisher/Subscriber objects
as higher
> level tunnels you can solve much more of typical problems of RIA
apps.To add
> by-directional (pull and push) "RemoteObject" functionality to the
RTMP you
> have to start with endpoints - basically keeping track of
> messageId/CorrelationIds as standard functionality of RemoteObject with
> standard timeouts will not suffice. Deciding if you want code
distributed
> between endpoint and adapter is really up to you - but keeping endpoints
> unchanged is not really an option, and then you have to decide on
number of
> places to maintain the code.
> As far as adding remoting destinations - it is trivial from messaging as
> well - you can get implementation from BlazeDS
> sources
C:\blazeds-source\modules\remoting\src\java\flex\messaging\services\remoting\adapters\JavaAdapter).
> It would go like this (optimization removed for brevity):
> 
>     public Object invoke(Message message)    {
>         RemotingDestination remotingDestination =
> (RemotingDestination)getDestination();
>         RemotingMessage remotingMessage = (RemotingMessage)message;
>         FactoryInstance factoryInstance =
> remotingDestination.getFactoryInstance();
> 
>         // We don't allow the client to specify the source for
>         // Java based services.
>         String className = factoryInstance.getSource();
>         remotingMessage.setSource(className);
> 
>         String methodName = remotingMessage.getOperation();
>         List parameters = remotingMessage.getParameters();
>         Object result = null;
> 
>         try
>         {
>             // Test that the target method may be invoked based upon
> include/exclude method settings.
>             if (includeMethods != null)
>             {
>                 RemotingMethod method =
> (RemotingMethod)includeMethods.get(methodName);
>                 if (method == null)
>                     MethodMatcher.methodNotFound(methodName, null, new
> Match(null));
> 
>                 // Check method-level security constraint, if defined.
>                 SecurityConstraint constraint =
method.getSecurityConstraint
> ();
>                 if (constraint != null)
> 
> 
getDestination().getService().getMessageBroker().getLoginManager().checkConstraint(constraint);
>             }
>             else if ((excludeMethods != null) &&
excludeMethods.containsKey
> (methodName))
>                 MethodMatcher.methodNotFound(methodName, null, new
> Match(null));
> 
>             // Lookup and invoke.
>             Object instance = createInstance(
> factoryInstance.getInstanceClass());
>             if (instance == null)
>             {
>                 MessageException me = new MessageException("Null
instance
> returned from: " + factoryInstance);
>                 me.setCode("Server.Processing");
>                 throw me;
>             }
>             Class c = instance.getClass();
> 
>             MethodMatcher methodMatcher =
> remotingDestination.getMethodMatcher();
>             Method method = methodMatcher.getMethod(c, methodName,
> parameters);
>             result = method.invoke(instance, parameters.toArray());
> 
> As soon as you have result, you wrap it into message, apply
correlationId
> from the messages original request - and you are done.
> 
> Regards,
> Anatole Tartakovsky
> Farata Systems
> 
> PS. If you are just looking for RemoteObject request/response long
> transaction support), look into BlazeDS/LCDS 2.6 sections for long
> httprequest - that solution might work well for some applications
> 
> On Mon, Mar 31, 2008 at 12:58 PM, Alexander Tsoukias <[EMAIL PROTECTED]>
> wrote:
> 
> >   I am trying to find out if there is a way to do same logic as when
> > using RemoteObject with coldfusion, but instead of using (http
> > polling) AMF to use the RTMP protocol.
> >
> > In my logic, i would just create a new destination in
> > remoting-config.xml and add a channel ie: my-rtmp.
> >
> > Would this work? If not, can this be at all done?
> >
> > Thanks,
> > Alexander
> >
> >  
> >
>


Reply via email to