import flash.display.Loader;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;
import flash.system.SecurityDomain;
import utils.QueryString;
import mx.messaging.config.ConfigMap; ConfigMap;
import mx.messaging.messages.AcknowledgeMessage; AcknowledgeMessage;
import mx.messaging.messages.AsyncMessage; AsyncMessage;
import mx.messaging.messages.AsyncMessageExt; AsyncMessageExt;
import mx.messaging.messages.CommandMessage; CommandMessage;
import mx.messaging.messages.CommandMessageExt; CommandMessageExt;
import mx.messaging.messages.ErrorMessage; ErrorMessage;
import mx.messaging.messages.HTTPRequestMessage; HTTPRequestMessage;
import mx.messaging.messages.RemotingMessage; RemotingMessage;
import mx.messaging.messages.SOAPMessage; SOAPMessage;
import com.farata.portal.Message;Message;
public class PortalBootstrapLoader extends Sprite {
public function PortalBootstrapLoader() {
super();
if (stage) {
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
} else
isStageRoot = false;
root.loaderInfo.addEventListener(Event.INIT, onInit);
}
/**
* The Loader that loads the main application's SWF file.
*/
private var loader:Loader;
/**
* Whether the bootstrap loader is at the stage root or not,
* it is the stage root only if it was the root
* of the first SWF file that was loaded by Flash Player.
* Otherwise, it could be a top-level application but not stage root
Sibling Domains and Multiversioning g | 377
Batch pdf 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
batch pdf to jpg; convert pdf to high quality jpg
Batch pdf 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
.net convert pdf to jpg; convert pdf to jpg for online
* if it was loaded by some other non-Flex shell or is sandboxed.
*/
private var isStageRoot:Boolean = true;
/**
* Called when the bootstrap loader's SWF file has been loaded.
* Starts loading the application SWF specified by the applicationURL
* property.
*/
private function onInit(event:Event):void {
loader = new Loader();
var loaderContext:LoaderContext  = new LoaderContext(
false,
new ApplicationDomain(ApplicationDomain.currentDomain),
SecurityDomain.currentDomain
);
addChild(loader);
loader.load(new URLRequest(applicationUrl), loaderContext );
loader.addEventListener(
"mx.managers.SystemManager.isBootstrapRoot",
bootstrapRootHandler
);
loader.addEventListener(
"mx.managers.SystemManager.isStageRoot",
stageRootHandler
);
loader.addEventListener(Event.ADDED, resizeHandler );
stage.addEventListener(Event.RESIZE, resizeHandler);
}
private function get applicationUrl():String{
var qs:QueryString = new QueryString();
return qs.root + qs.parameters.app;
}
private function bootstrapRootHandler(event:Event):void {
event.preventDefault();
}
private function stageRootHandler(event:Event):void {
if (!isStageRoot)
event.preventDefault();
}
private function resizeHandler(event:Event=null):void {
if ( loader.content ){
}
}
}
}
378 | | Chapter 7: Modules, Libraries, Applications, and Portals
JPEG to PDF Converter | Convert JPEG to PDF, Convert PDF to JPEG
similar software; Support a batch conversion of JPG to PDF with amazingly high speed; Get a compressed PDF file after conversion; Support
.pdf to .jpg converter online; pdf to jpg converter
JPG to DICOM Converter | Convert JPEG to DICOM, Convert DICOM to
Open JPEG to DICOM Converter first; Load JPG images from local folders in "File" in toolbar Windows Explorer; Select "Batch Conversion" & Choose "DICOM" in
pdf to jpg; batch pdf to jpg online
To use the bootstrap loader, we copy PortalBootstrapLoader.html and
PortalBootstrapLoader.swf to the deployment folder of the portal and, in the browser,
type the URL, similar to:
http://localhost:8080/ApplicationLoaders/PortalBootstrapLoader.html?app=Appli-
cationLoaders/SameSandboxDifferentDomain.swf
As you can see from Figure 7-20, now the Google News panel of the portlet is filled by
the data. Flex Messaging works because we made the definitions of the messaging
classes visible to all application domains in the portal.
Figure 7-20. SameSandboxDifferentDomain with bootstrap class loading
Sample Flex Portal
To speed up your portal development, this section describes a sample Flex portal that
you can download from the site accompanying this book. You’ll need to download the
following projects:
PortalLib
Utility library referenced by all other projects
Feeds
Combined Flex/Java Dynamic Web Project with GoogleFinancialNews and Ya-
hooFinancialNews applications
Charts
Combined Flex/Java Dynamic Web Project with Chart1 and Chart2 applications
Portal
Combined Flex/Java Dynamic Web Project with the SamplePortal application
PortalBootstrapLoader
ActionScript project
Sample Flex Portal l | | 379
JPG to GIF Converter | Convert JPEG to GIF, Convert GIF to JPG
Open JPEG to GIF Converter first; Load JPG images from local folders in "File" in toolbar Windows Explorer; Select "Batch Conversion" & Choose "GIF" in "Output
reader pdf to jpeg; batch pdf to jpg converter online
JPG to JBIG2 Converter | Convert JPEG to JBIG2, Convert JBIG2 to
Ability to preserve original images without any affecting; Ability to convert image swiftly between JPG & JBIG2 in single and batch mode;
convert pdf into jpg format; convert pdf file to jpg
Figure 7-21 illustrates running SamplePortal, which you should start via
PortalBootstrapLoader:
http://localhost:8080/Portal/PortalBootstrapLoader.html?app=/Portal/SamplePor-
tal.swf
You can to create instances of portlets of different types by dragging and dropping on
the portal canvas the navigational items located in the lower part of the screen, such as
“Same Sandbox—Child Domain,” “Same Sandbox—Sibling Domain,” and “Different
Sandbox—Different Domain.”
Each portlet is contained by a custom resizable and draggable 
Panel
and carries either
the 
GoogleFinancialNews
or the 
YahooFinancialNews
application, according to the de-
scriptor of the navigation items in SamplePortal, as shown in Example 7-46.
Example 7-46. SamplePortal
<?xml version="1.0" encoding="utf-8"?>
<!--  SamplePortal  -->
<mx:Application layout="absolute"
xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:fx="http://www.faratasystems.com/2009/portal" >
<mx:Style source="styles.css"/>
<fx:PortalCanvas  width="100%" height="100%">
<fx:navItems>
<fx:NavigationItem>
<fx:PortletConfig title="Same Sandbox - Child Domain"
preferredHeight="400" preferredWidth="850" >
<fx:props>
<mx:Object trusted="true" multiversioned="false"
</fx:props>
</fx:PortletConfig>
</fx:NavigationItem>
<fx:NavigationItem>
<fx:PortletConfig title="Same Sandbox - Sibling Domain"
preferredHeight="400" preferredWidth="850">
<fx:props>
<mx:Object trusted="true" multiversioned="true"
</fx:props>
</fx:PortletConfig>
</fx:NavigationItem>
<fx:NavigationItem>
preferredHeight="400" preferredWidth="850" >
<fx:props>
<mx:Object trusted="false" multiversioned="true"
</fx:props>
</fx:PortletConfig>
</fx:NavigationItem>
</fx:navItems>
380 | | Chapter 7: Modules, Libraries, Applications, and Portals
JPG to Word Converter | Convert JPEG to Word, Convert Word to JPG
Open JPEG to Word Converter first; Load JPG images from local folders in "File" in toolbar Windows Explorer; Select "Batch Conversion" & Choose "Word" in
c# pdf to jpg; changing pdf to jpg on
JPG to JPEG2000 Converter | Convert JPEG to JPEG2000, Convert
Open JPEG to JPEG2000 Converter first; ad JPG images from local folders in "File" in toolbar Windows Explorer; Select "Batch Conversion" & Choose "JPEG2000" in
change pdf to jpg on; .pdf to jpg converter online
</fx:PortalCanvas>
<mx:Script>
<![CDATA[
import mx.managers.PopUpManager;PopUpManager;
import PortletInfo;PortletInfo;
]]>
</mx:Script>
</mx:Application>
A click on the Show Chart button loads Chart1 or Chart2 into a sibling domain and
flips the portlet’s content. Each portlet allows you to send messages to the portal, and
from the portal itself you can broadcast a text message to all active portlets, shown in
Figure 7-21.
Figure 7-21. SamplePortal
Integrating Flex into Legacy JEE Portals
If you are the owner of a legacy Web 1.0 portal, you can consider integrating Flex
applications into your portal space in an entirely different way.
Integrating Flex into Legacy JEE Portals s | | 381
JPG to PNG Converter | Convert JPEG to PNG, Convert PNG to JPG
Open JPEG to PNG Converter first; Load JPG images from local folders in "File" in toolbar Windows Explorer; Select "Batch Conversion" & Choose "PNG" in "Output
change pdf file to jpg file; convert online pdf to jpg
VB.NET Image: PDF to Image Converter, Convert Batch PDF Pages to
and non-professional end users to convert PDF and PDF/A documents to many image formats that are used commonly in daily life (like tiff, jpg, png, bitmap, jpeg
best program to convert pdf to jpg; convert pdf to gif or jpg
The good news is that any Flex .swf file is valid content for a generic Flex portlet pre-
written by Adobe. Open the resources/wsrp/lib folder from the root of the installed
LiveCycle Data Services; you will find flex-portal.jar with flex.portal.GenericFlexPort-
let inside. Add the .jar to the class path of your web application (WebContent/lib) and
also copy the resources/wsrp/wsrp-jsp folder to the deployment root of your project
(WebContent).
Now take the portlet.xml of your legacy portal, and inject Example 7-47’s code to in-
stantly add the 
YahooFinancialNews
portlet.
Example 7-47. Registering a Flex application as a portlet via flex.portal.GenericFlexPortlet
<?xml version="1.0" encoding="UTF-8"?>
<portlet-app version="1.0"
xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
. . . .
<!-Descriptor of Flex portlet YahooFinancialNews -->
<portlet>
<portlet-name>YahooFinancialNews</portlet-name>
<portlet-class>flex.portal.GenericFlexPortlet</portlet-class>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>view</portlet-mode>
</supports>
<portlet-info><title>Yahoo Financial News</title></portlet-info>
<portlet-preferences>
<preference>
<name>app_uri</name>
<value>/Portal/YahooFinancialNews</value>
</preference>
<preference>
<name>norm_width</name>
<value>400</value>
</preference>
<preference>
<name>norm_height</name>
<value>400</value>
</preference>
</portlet-preferences>
</portlet>
<portlet>
</portlet-app>
The preference 
app_uri
points to the URL of the YahooFinancialNews.swf, stripped of
the “.swf”, and the parameter 
wsrp_folder
points to the parent URL of the wsrp-jsp.
That’s all it takes to have your Flex application running inside a Web 1.0 portal! Because
YahooFinancialNews
has been compiled to communicate with the 
MessageBroker
of the
Feeds web application, however, you do have to make sure that Feeds is deployed in
the same domain.
382 | | Chapter 7: Modules, Libraries, Applications, and Portals
But don’t get carried away. First of all, you can’t flexibly control the real estate dedicated
to your portlet. Look at the rigid layout of Figure 7-22, which illustrates a BEA
WebLogic portal with the mixture of two instances of 
GenericFlexPortlet
(running
YahooFinancialNews
and 
GoogleFinancialNews
), 
SingleVideoPortlet
, and 
ShowTimePor
tet
; you can download the second two from Portlet Repository Downloads. The Flex
applications appear squeezed and cumbersome to use.
Second, and even more important, mixing Web 2.0 portlets based on Flash or AJAX
with Web 1.0 ones (such as 
ShowTimePortlet
in the example) is outright dangerous, if
you consider that Flex applications and Web 2.0 portlets maintain state on the client,
but rerendering of the Web 1.0 ones eliminates the entire HTML page.
As a result, the only way to integrate a Flex application in your legacy portal may be to
run a single application per page.
Figure 7-22. A Flex application’s ad portlets in a WebLogic portal 10.2
Integrating Flex into Legacy JEE Portals s | | 383
Summary
Understanding how Flex loaders work, combined with the knowledge of different ways
of linking modules and libraries to your main application, is crucial for the creation of
Flex portals. Even if you are not concerned with portals, the chances are high that your
application size will increase, and sooner or later you’ll need to decide how to cut it
into pieces. The sooner you start planning for modularizing your application, the better.
384 | | Chapter 7: Modules, Libraries, Applications, and Portals
CHAPTER 8
Performance Improvement:
Selected Topics
We have to stop optimizing for programmers and start
optimizing for users.
—Jeff Atwood
The greatest performance improvement of all is when a
system goes from not working to working.
—John Ousterhout
People consider your web application fast for one of two reasons: either it’s actually
fast or it gives an impression of being fast. Ideally, you should do your best to create
an RIA that is very responsive, but if you hit the ceiling imposed by a technology you’re
using, at least try to improve the perceived performance of the system. To draw an
analogy to the weather, the temperature may be cool, but it “feels like” freezing. No
matter how slow your RIA is, it should never feel like freezing.
In this chapter, you’ll learn how to use application preloaders to make the first page of
your RIA appear on the display as soon as possible while loading the rest of the appli-
cation in the background.
Once loaded on the user’s machine, your application should use its memory efficiently.
To help you identify trouble spots, we’ll discuss possible drains on performance, such
as memory leaks, garbage collectors, complex containers, event listeners, and closures.
For example, if your application experiences memory leaks, Flash Builder’s profiler
may help. With it, you can monitor the number of object instances to ensure that you
don’t have memory leaks. The monitoring of your application performance must be
done continuously from the start of your project.
In Chapter 7, you learned that cutting a monolithic application into modules, libraries,
and subapplications can substantially minimize the initial download time of an RIA.
In this chapter, we’ll build on that technique. Specifically, you’ll learn how you can use
385
small Flash modules and link application libraries that are made with the same version
of the Flex SDK. You’ll also investigate the advantages of resource-shared libraries,
including how to use them with modules and how to optimize them.
Planning for Modularization
After deciding to use the module and library approach, carefully review all resources
besides the ActionScript or MXML code—namely images, sound, and movies (.swf
files)—to decide whether you really need to embed them. The rule of thumb is that
unless the image must be displayed on the first page, it should not be embedded. It is
almost never worthwhile to embed any sizable sound or .swf in the Flex application,
as they can use streaming and provide much better control of the execution by starting
to play when just enough data is loaded.
Embedded images required in your RIA should be located in a separate
Flash Builder project and loaded as RSLs.
The next part is to separate stylesheets and skins into modules. Doing so offers three
advantages: first, it separates the work of the designers from the application developers.
Second, removing stylesheets and skins from the compilation process significantly re-
duces rebuild time during development, because the cost of resource transcoding (com-
pilation of fonts and styles) is high. Third, keeping skins and stylesheets outside of the
modules simplifies initialization and eliminates unnecessary reloading and reapplying
of CSS, thus making module initialization faster and safer.
Precompile CSS into a SWF file (right-click on the file to see this option) and then load
it from the main application using the 
StyleManager
class.
RSLs do introduce performance issues, however. They are loaded one by one and thus
impose a “round-trip” effect. Breaking a monolithic application into 10 RSLs results in
additional round-trip requests to the server and, as a result, slightly increases the initial
load time. A solution to this problem is to use smarter loading of multiple RSLs by
modifying the source code of the 
RSLListLoader
class available in the SDK and placing
it in your application (we’ll cover this later in this chapter). Special care has to be taken
in that case to ensure that framework libraries that other elements depend upon are
loaded first.
Another rule of thumb for large applications is to make the first page as light and free
of dependencies as possible. In other words, keep the first page super small. Once all
of the system and CSS RSLs are loaded and the application enters the preinitialize event,
you can start loading the rest of the application code. We recommend that you use the
portal approach discussed in Chapter 7 as a starting point for any large application, as
386 | | Chapter 8: Performance Improvement: Selected Topics
Documents you may be interested
Documents you may be interested