We borrowed the code for the alarm clock UI from Adobe’s manual on programming
ActionScript 3. This example was used there for explaining events (see http://livedocs
.adobe.com/flex/3/html/help.html?content=16_Event_handling_7.html). For your con-
venience, we’ve included this code in Flash Builder’s project NetworkingSamples, which
contains all examples from this chapter.
In Example 6-28’s Flex application you can find the consumer that is ready to consume
messages from the destination 
ControlCenter
RemoteObject
is used to start or stop the
server-side feed.
Example 6-28. RemotingViaStreaming.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:remoting="com.farata.remoting.*"
xmlns:example="com.example.programmingas3.clock.*"
<mx:Consumer destination="ControlCenter"  id="co"
message="handleMessage(event.message)"/>
<mx:RemoteObject destination="ControlCenterRO" id="ro"/>
<mx:Button label="Start" click="ro.start()"/>
<mx:Button label="Stop" click="ro.stop()"/>
<mx:Label text="Time"/>   <mx:Label width="259" id="serverClock"/>
<mx:Script>
<![CDATA[
import com.farata.remoting.RemoteCall;
import mx.messaging.messages.IMessage;
private function handleMessage(msg:IMessage) : void {
if (msg.body is RemoteCall) {
var rc:RemoteCall = msg.body as RemoteCall;
this[rc.methodName].apply(this, rc.parameters.source);
}
}
public function setTime( d:Date) : void {
serverClock.text = d.toTimeString();
clock.setTime( d);
}
]]>
</mx:Script>
</mx:Application>
When the consumer receives the message, the function 
handleMessage()
extracts the
instance of 
RemoteCall
from the message body and calls the method whose name is
located in the property 
RemoteCall.methodName
:
var rc:RemoteCall = msg.body as RemoteCall;
this[rc.methodName].apply(this, rc.parameters.source);
A Server As a Command Center r | 317
Convert pdf images to jpg - Convert PDF to JPEG images in C#.net, ASP.NET MVC, WinForms, WPF project
How to convert PDF to JPEG using C#.NET PDF to JPEG conversion / converter library control SDK
convert pdf pages to jpg; convert pdf picture to jpg
Convert pdf images to jpg - VB.NET PDF Convert to Jpeg SDK: Convert PDF to JPEG images in vb.net, ASP.NET MVC, WinForms, WPF project
Online Tutorial for PDF to JPEG (JPG) Conversion in VB.NET Image Application
convert pdf image to jpg; convert pdf into jpg
In Example 6-28, this 
[rc.methodName]
gets the reference to the 
Function
object based
on the received name, which is 
setTime()
here. Then the function 
apply()
calls this
method, passing parameters contained in the 
RemoteCall
object.
This technique is yet another way to implement the Command design pattern, but here
the server publishes a message that is a command to the client to call a function specified
in 
methodName
.
Extending the Protocol
Although this technique of making RPC calls from the server is pretty cool, you can
make it even better by hiding the processing of the received messages at the protocol
level, so that the application developers will use this enhanced consumer without
needing to know how it works under the hood.
First, extend the AMF endpoint and move the consumer portion into the new class
RemoteStreamingChannel
, which extends the standard 
StreamingAMFChannel
, which will
be responsible for filtering and executing remote procedure calls.
Note the meta tag 
[Mixin]
in Example 6-29. In Flex, it’s used to ensure that a static
initializer’s code located in the method 
init()
will be executed as soon as the
SystemManager
becomes available.
Example 6-29. RemoteStreamingChannel.as
package com.farata.messaging.channel{
import com.farata.remoting.RemoteCall;
import flash.utils.Dictionary;
import mx.managers.ISystemManager;
import mx.messaging.Consumer;
import mx.messaging.channels.StreamingAMFChannel;
import mx.messaging.events.MessageEvent;
import mx.messaging.messages.IMessage;
[Mixin]
public class RemoteStreamingChannel extends StreamingAMFChannel{
public static var destinations:Dictionary = new Dictionary();
super(id, uri);
}
// if the receieved message is an instance of the RemoteCall,
// get the destination and call the passed method on it
protected function filterAndInvoke( evt:MessageEvent ) : void {
var msg : IMessage = evt.message;
if (msg.body is RemoteCall) {
var rc:RemoteCall = msg.body as RemoteCall;
318 | | Chapter 6: Open Source Networking Solutions
Online Convert PDF to Jpeg images. Best free online PDF JPEG
it as easy as possible to convert your PDF Download and try RasterEdge.XDoc.PDF for .NET processing, converting, compressing and stroing images, documents and
convert pdf image to jpg image; convert pdf to jpg converter
Online Convert Jpeg to PDF file. Best free online export Jpg image
So, feel free to convert them too with our tool. Easy converting! It enables you to build a PDF file with one or more images.
best pdf to jpg converter; convert pdf page to jpg
if ( destination )
var result:* =
else
//log the error
trace( "missing destination " + rc.destinationName );
evt.preventDefault();
}
}
//stub for static initializer
var c:Consumer = new Consumer();
c.destination = "ControlCenter";
c.subscribe();
}
}
}
If the code in Example 6-28 was calling the specified function on the 
this
object, you
can make it more generic by specifying the destination object on the client and calling
the function on it:
destination[rc.methodName].apply(destination, rc.parameters.source);
To let BlazeDS know that you want to use this endpoint on the client instead of the
original 
StreamingAMFChannel
, change the channel configuration in services-config.xml
(Example 6-30).
Example 6-30. Modified channel definition in services-config.xml
<channel-definitionid="my-streaming-amf"
class="com.farata.messaging.channel.RemoteStreamingChannel">
streamingamf"
class="com.farata.nioblaze.messaging.endpoints.NioAmfEndpoint"/>
</channel-definition>
The application in Example 6-31 uses the new channel.
Example 6-31. RemotingViaStreamingGeneric.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:remoting="com.farata.remoting.*"
xmlns:example="com.example.programmingas3.clock.*"
layout="vertical" horizontalAlign="left">
<mx:RemoteObject destination="ControlCenterRO" id="ro"/>
<mx:Button label="Start" click="ro.start()"/>
<mx:Button label="Stop" click="ro.stop()"/>
A Server As a Command Center r | 319
C# Create PDF from images Library to convert Jpeg, png images to
C# Create PDF from Raster Images, .NET Graphics and REImage File with XDoc Batch convert PDF documents from multiple image formats, including Jpg, Png, Bmp
convert pdf pictures to jpg; bulk pdf to jpg converter online
VB.NET PDF Convert to Images SDK: Convert PDF to png, gif images
VB.NET components for batch convert high resolution images from PDF. Convert PDF documents to multiple image formats, including Jpg, Png, Bmp, Gif, Tiff, Bitmap
conversion of pdf to jpg; change pdf to jpg format
<mx:Script>
<![CDATA[
import com.farata.messaging.channel.RemoteStreamingChannel;
]]>
</mx:Script>
</mx:Application>
Upon the 
creationComplete
event, this application assigns the 
SimpleClock
object as
the client destination of all that goes under the name 
clock
:
RemoteStreamingChannel.destinations['clock']=simpleClock;
The server-side sender from Example 6-27 is sending a command to call the function
setTime()
of the destination clock, which is now mapped to the instance of the
SimpleClock
component:
msg.setBody(new RemoteCall("clock", "setTime", params));
The destination clock was not used in the MXML application shown in Exam-
ple 6-28, which was calling the function 
setTime()
on the 
this
object no matter what.
But the more generic application shown in Example 6-31 explicitly routes the server
calls to the destination 
clock
.
And the clock (Figure 6-9) is ticking, driven by the reverse RPC calls from the server.
Figure 6-9. The clock controlled by the server
320 | | Chapter 6: Open Source Networking Solutions
C# Image Convert: How to Convert Adobe PDF to Jpeg, Png, Bmp, &
C# sample code for PDF to jpg image conversion. This demo code convert PDF file all pages to jpg images. // Define input and output files path.
batch pdf to jpg converter; convert pdf to jpg c#
C# Image Convert: How to Convert Tiff Image to Jpeg, Png, Bmp, &
RasterEdge.XDoc.Office.Inner.Office03.dll. RasterEdge.XDoc.PDF.dll. RasterEdge.XDoc. PowerPoint.dll. This demo code convert TIFF file all pages to jpg images.
changing file from pdf to jpg; .net convert pdf to jpg
Now you own a communication channel on both the server and client sides and you’re
ready to program high-level protocols.
Custom Serialization and AMF
AMF is a very efficient protocol, and part of that efficiency is thanks to the strict rules
for supporting a limited set of data types in an optimized way. One of the most frequent
cases in which it needs to be customized is when you have to work with non-UTC
Date
and 
Time
. UTC stands for Coordinated Universal Time.
First, you need to understand how Flex deals with transfer of the 
Date
objects. Dates
are always transferred to/from Flex clients as UTC 
Date
, where no time zone informa-
tion is available on the object. Translation to the UTC/local time happens automatically
on the AMF protocol level, which adds the client time zone offset to the incoming dates
and subtracts it from outgoing ones.
The server does not know about the client’s time zone; it always operates in UTC time.
This means that if a user from New York City entered 1:00 p.m. as the time, a user in
Denver, Colorado, will see it as 11:00 a.m. In some applications, such behavior may
be desirable, but this is not the case in a global application in which the users can be
located around the world.
The user wants to enter the time in the client’s local time; 1:00 p.m. will be 1:00 p.m.
regardless of the time zone of the person who entered this time.
For example, requests for an appointment for the installation of the local TV cable
service may be handled by a call center located on the other side of the globe. Ashish
from the call center talks to you, and if you agreed to see the cable guy at 10:00 a.m.,
he enters 10:00 a.m. in the application. By the way, the server can be located in yet
another time zone. This should be irrelevant for the distributed RIA.
Such an application has to operate without the use of time zones, or, for that matter,
in one time zone. This can be done either on the server side by keeping the client time
zone information in the session and adjusting the dates on each transfer or by com-
municating the date as a 
String
. In either case, it requires additional application code
that should be added in multiple places that deal with dates.
However, there is more elegant solution if, during data transfer, you’ll be using the
ActionScript metadata tag 
transient
. Examine Example 6-32, which contains the code
of an ActionScript DTO called 
LineItemDTO
.
Example 6-32. LineItemDTO.as
package com.farata.datasource.dto{
import flash.events.EventDispatcher;
[RemoteClass(alias="com.farata.datasource.dto.LineItemDTO")]
[Bindable(event="propertyChange")]
Custom Serialization and AMF F | | 321
VB.NET Create PDF from images Library to convert Jpeg, png images
Components to batch convert PDF documents in Visual Basic .NET class. NET converter control for exporting high quality PDF from images.
convert .pdf to .jpg online; change format from pdf to jpg
C# TIFF: C#.NET Code to Convert JPEG Images to TIFF
Use C# Code to Convert Jpeg to Tiff. Define Jpeg images list. string[] imagePaths = { @"C:\demo1.jpg", @"C:\demo2.jpg", @"C:\demo3.jpg" }; // Construct List
changing pdf file to jpg; convert pdf to jpg batch
public class LineItemDTO extends EventDispatcher {
private var _myDate : Date;
// myDateUTC is not to be used on the client
protected function get myDateUTC() : Date {
return _myDate==null? null:
}
// myDateUTC is not to be used on the client
protected function set myDateUTC( value : Date ):void {
var oldValue:Object = _myDate;
if (oldValue !== value) {
this._myDate = value == null? null:
}
}
[Transient]
public function get myDate() : Date {
return _myDate;
}
public function set myDate( value : Date ):void {
var oldValue:Object = this._myDate;
if (oldValue !== value) {
this._myDate = value;
dispatchUpdateEvent("myDate", oldValue, value);
}
}
On the server, its Java twin may look like Example 6-33.
Example 6-33. LineItemDTO.java
package com.farata.datasource.dto;
import java.io.Serializable;
import java.util.*;
public class LineItemDTO implements Serializable{
transient public java.util.Date myDate;
// This getter is serialized as a property myDateUTC
public java.util.Date getMyDateUTC() {
return myDate;
}
public void setMyDateUTC(java.util.Date value){
this.myDate = value;
}
}
322 | | Chapter 6: Open Source Networking Solutions
Please note the use of the keyword 
transient
, which server-side JVM interprets like
this: “Don’t serialize the value of this member variable when you’ll be sending the
LineItemDTO
instances over the wire.”
On the other hand, when JavaBean LineItemDTO.java gets serialized, the word get gets
cut off from the 
getMyDateUTC
and arrives as a 
myDateUTC
property of the object
LineItemDTO.as, where it’s automatically converted into the UTC 
Date
.
That’s all there is to it. You have normal public variables on both sides, and AMF
serialization works transparently, keeping the 
Date
and 
Time
values in the UTC zone
on both sides (you also need to set the JVM time zone to UTC), and now you are always
operating in the server’s time zone.
This code will work in any implementation of the AMF protocol: BlazeDS, LCDS,
OpenAMF, WebORB, GraniteDS, and so on.
Armed with this knowledge, reevaluate your needs for local versus global time to avoid
the follow-up calls from the call center in India at 2:00 in the morning.
Even though this example uses custom AMF serialization for dates, you may use the
same technique to provide custom serialization for any other application-specific
objects.
Security Appliances
Once you’ve developed and tested your Flex application locally, and you’re ready to
share it with the rest of the world, you need to move it to a secured hosting environment.
Usually, for simplicity and performance, enterprises deploy Java EE servers behind
standalone SSL accelerators and load balancers. Sometimes it’s just an Apache server
or similar appliance.
This means that the client sends the data via an SSL channel to such an SSL appliance
configured on the edge of a firewall. The appliance authenticates the user and maintains
the session, and in turn calls the application server running on the intranet via unse-
cured HTTP to minimize the CPU load on the application server.
In this setup, you have to use a secured endpoint on the client side and an unsecured
endpoint on application server. You can configure the channel to use such a pair of
endpoints in the services-config.xml file of BlazeDS, but this would require separate
builds and configuration files for external and internal deployments. As an alternative,
you might want to switch the channels and endpoints dynamically during the runtime,
based on which protocol is being used: HTTP or HTTPS.
During the 
preInitialize
event of the Flex application, you can apply a regular ex-
pression and find out whether it was started via a secure or nonsecure protocol
(Example 6-34).
Security Appliances s | | 323
Example 6-34. Switching channels and endpoints
import mx.messaging.config.ServerConfig;
private function preinitializeApplication() : void {
9]{2,5}))?(\/([\w#!:.?+=&%@!\-\/]+))?/;
const appUrl:String = Application.application.url;
const parts:Array = reUrl.exec(appUrl);
if (parts!=null)
if (parts[1] == "https" )
{
const channels:XMLList = ServerConfig.xml..channels.channel;
for (var channel:String in channels) {
var endpoint : XML = channels[channel].endpoint[0];
var uri:String = endpoint.@uri
uri = uri.replace( /^http:/, "https:" );
uri = uri.replace( /\{server.port\}/, "443" );
endpoint.@uri = uri;
}
}
}
}
This code checks to see whether the application is executed over the secure HTTPS
protocol. If it is, the code goes through the 
ServerConfig
singleton and updates the
channel specifications to use a secured endpoint, the HTTPS protocol, and port number
443 on the web server. Because the client executes this code, you can have a single
configuration point for a variety of deployment options.
Third-Party Networking Solutions
AMF is an open protocol, and various vendors offer their implementations. Your RIA
may or may not use Java on the server side, and you may consider the following alter-
natives to BlazeDS, which are available as open source projects or offered by third-party
vendors:
WebORB
This family of products by the Midnight Coders includes implementations of AMF
for Java, .NET, Ruby on Rails, and PHP. WebORB offers the best reliability and
performance for these platforms, and it is free. Its .NET stack is the most impressive
one, as it offers full-featured messaging, RTMP support, data push, and the
324 | | Chapter 6: Open Source Networking Solutions
best .NET integration. The Java stack of WebORB is similar to the BlazeDS offer-
ing; it also uses Red5 for RTMP/multimedia integration.
RubyAMF 
RubyAMF is an open source implementation of Ruby.
AMFPHP
AMFPHP is an open source implementation of PHP.
PyAMF
PyAMF is an open source product for Python.
Granite Data Services
Granite Data Services (GDS) is a free open source package that offers functionality 
similar to LCDS. It caters to developers who use Flex and AMF to communicate 
with server-side POJOs and such Java technologies and frameworks as Enterprise 
JavaBeans 3 (EJB3), Seam, Spring, and Guice. It also features Comet-like data 
communications with AMF, as well as Tide, a framework that positions itself as 
an alternative to Cairngorm, combined with the Data Management Services offered 
by LCDS.
Red5 
An open source Flash server, Red5 supports RTMP and AMF remoting and stream-
ing of audio and video. Red5 is written in Java and can be installed on any platform 
that supports Java. Even though typically Red5 is considered to be an alternative 
to Flash Media Server, you may also start using it as an alternative to BlazeDS. You 
can use either a standalone version of Red5, or deploy it in the Java servlet container 
as a web application archive (WAR) file. (At the time of this writing, Red5 has not 
been officially released and is at version 0.9 Final.)
Summary
This chapter covered a lot of ground. Not only did you learn how data can travel be-
tween Flex and Java using the AMF protocol, but you also learned how to automate 
the coding of the objects that are being transported by AMF. You got familiar with the 
internals of the pretty powerful 
DataCollection
object, and went through a set of code 
fragments that illustrate various techniques applicable to creating a data synchroniza-
tion solution based on Flex remoting.
Summary | 325
The authors of this book have created and made available a fully functional version of
such a 
DataCollection
object, and we’ve provided the reference to its complete code
on SourceForge. You’ll revisit 
DataCollection
in Chapter 9, where its subclass,
OfflineDataCollection
, will do a good job synchronizing data between the local and
remote databases in an AIR application. Finally, you’ve learned yet another advanced
technique for pushing the data from the server to the client, via the AMF protocol
implemented in BlazeDS and making reverse RPC calls.
And the most exciting part is that in this chapter we’ve been using only open source
solutions!
326 | | Chapter 6: Open Source Networking Solutions
Documents you may be interested
Documents you may be interested