Figure 7-6. ModuleDomainDemo: loading the module to the same domain
Figure 7-7. ModuleDomainDemo: loading the module to the child domain
Introducing Application Domains s | | 347
.Net 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
.pdf to jpg converter online; convert pdf into jpg format
.Net 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
.pdf to .jpg converter online; convert multi page pdf to jpg
Example 7-19. Complete code of ModuleDomainDemo
<?xml version="1.0"?>
<!-- ModuleDomainDemo.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.controls.DataGrid;
private const  MODULE_URL:String = "SimpleModule.swf";
[Bindable] private var moduleLoaded:Boolean;
private var dg:DataGrid;
private function createCustomGrid():void {
try {
var clazz:Class =
} catch (error:ReferenceError) {
return;
}
dg  = DataGrid(new clazz());
dg.dataProvider = [
{name:"Anatole Tartakovsky", phone:"5618325611"},
{name:"Victor Rasputnis", phone:"7184017234"},
{name:"Yakov Fain",phone:"7322342654"}
];
addChild(dg);
}
[Bindable] private var moduleLoaded:Boolean;
private function loadModule():void {
moduleLoader.loadModule(MODULE_URL);
moduleLoaded=true;
}
private function unloadModule():void {
removeChild(dg); // Remove references to the module
dg = null;
moduleLoader.unloadModule();
moduleLoaded=false;
  ]]>
</mx:Script>
<mx:VBox>
<mx:HBox>
<mx:RadioButton groupName="domain" label="Same Domain"
id="same_domain" selected="true" enabled="{!moduleLoaded}"/>
<mx:RadioButton groupName="domain" label="Child Domain"
id="child_domain" enabled="{!moduleLoaded}"/>
</mx:HBox>
<mx:HBox>
348 | | Chapter 7: Modules, Libraries, Applications, and Portals
Online Convert Jpeg to PDF file. Best free online export Jpg image
All your JPG and PDF files will be permanently erased from our servers into image file format in C# application, then RasterEdge XDoc.PDF for .NET can also
convert pdf document to jpg; convert pdf to jpeg
Online Convert PDF to Jpeg images. Best free online PDF JPEG
Your PDF and JPG files will be deleted from our servers an hour after RasterEdge PDF to JPEG converting control SDK (XDoc.PDF for .NET) supports converting
best pdf to jpg converter online; c# convert pdf to jpg
<mx:Button label="Unload Module" click="unloadModule()"
enabled="{moduleLoaded}"/>
</mx:HBox>
</mx:VBox>
<mx:ModuleLoader id="moduleLoader"
applicationDomain="{
same_domain.selected?
ApplicationDomain.currentDomain:
new ApplicationDomain(ApplicationDomain.currentDomain)
}"
/>
</mx:Application>
Paying Tribute to Libraries
If you need to modularize reusable components, look no further than libraries: Runtime
Shared Libraries (RSL), to be specific. Assuming that you are using Flash Builder, the
basic procedure is:
1.Create a Flex Library project containing classes to be reused (call it, say,
ComponentLibrary).
2.Add a mapping to this project to the Flex Build Path of the application(s) that
makes use of the library classes.
If you do not have the source code, add a mapping to the SWC file of the library com-
piled by a third party instead of to the library project. Look in the Flex Build Path of
your application: all Flex framework classes are added via several .swc files, similar to
Figure 7-8.
At this configuration level, library projects merely separate development of the business
application from building of the reusable components; however, your application is
still built as monolithic .swf. Why? Because when you add mapping to the library project
or .swc of the compiled library, the default link type is “Merged into code.” This is static
linking, where the application .swf contains only those classes it could determine as
required at compile time. Recall the dynamic instantiation from Example 7-19:
var clazz:Class =
loaderInfo.applicationDomain.getDefinition("CustomGrid") as Class;
dg  = DataGrid(new clazz());
Assuming the 
CustomGrid
class belongs to ComponentLibrary, under “Merged into
code,” this dynamic instantiation will not work, because definition of the 
CustomGrid
will not become a part of the application .swf.
If you want to reference 
CustomGrid
explicitly, you may add the following line to your
application:
import CustomGrid; CustomGrid;
Paying Tribute to Libraries s | | 349
C# Image Convert: How to Convert Adobe PDF to Jpeg, Png, Bmp, &
C# Guide for PDF to Bmp. Copy the code below to your .NET project to test fast PDF to Bmp conversion. C# sample code for PDF to jpg image conversion.
convert pdf images to jpg; convert pdf file to jpg
C# Image Convert: How to Convert Tiff Image to Jpeg, Png, Bmp, &
Of course, our XDoc.Converter for .NET still enables you to RasterEdge.XDoc.PDF.dll. C:\input.tif"; String outputFilePath = @"C:\output.jpg"; // Convert tiff to
convert pdf to jpg for online; advanced pdf to jpg converter
Alternatively, you may add 
-includes CustomGrid
to the compiler options.
Either way, you are not using the library (RSL), you’re only creating a monolithic SWF
via a library project. To use the RSL, change the link type to “Runtime shared library.”
Figure 7-9 shows one way to do it, with the option “Automatically extract swf to de-
ployment” turned on. What this really means is that the SWF of the library (RSL) will
be created on each compile of the application. (You’ll learn about the opposite setting
of this option later in the chapter.)
According to Figure 7-9, after building an application that is mapped to the Compo-
nentLibrary (Flex Library) project, you will find ComponentLibrary.swf in the output
folder.
Now your application is using an RSL. To be precise, the compiler-generated code will
have 
flash.display.Loader
(what else?) preload the classes of the RSL .swf into
ApplicationDomain.currentDomain
. In other words, the default application domain set-
ting for libraries is the same domain as the application (same bag for you and your kid).
Figure 7-8. Default link type: merge into code
350 | | Chapter 7: Modules, Libraries, Applications, and Portals
C# Create PDF from images Library to convert Jpeg, png images to
Batch convert PDF documents from multiple image formats, including Jpg, Png, Bmp, Gif, Tiff, Bitmap, .NET Graphics, and REImage.
.pdf to .jpg online; batch pdf to jpg converter online
VB.NET PDF - Convert PDF with VB.NET WPF PDF Viewer
Convert PDF to image file formats with high quality, support converting PDF to PNG, JPG, BMP and GIF. VB.NET WPF PDF Viewer: Convert and Export PDF.
convert multipage pdf to jpg; change pdf to jpg on
The application .swf gets smaller, because it does not carry the footprint of any of the
library classes, whether statically required or not. That said, you incurred extra .swf
content: the library itself. If you are developing an intranet application, the size does
not matter much. Additionally, if you are deploying for extranet use, recall that li-
brary .swf files get cached in the browser cache per domain.
On top of that, as far as Flex framework RSLs are concerned, the latest releases of Flash
Player 9 and Flash Player 10 support Adobe-signed RSLs that get cached by Flash Player;
these .swf files are cached across different server domains.
Figure 7-9. RSL link type defaults to autoextraction of the RSL SWF
Paying Tribute to Libraries s | | 351
C# WPF PDF Viewer SDK to convert and export PDF document to other
Convert PDF to image file formats with high quality, support converting PDF to PNG, JPG, BMP and GIF. C#.NET WPF PDF Viewer Tool: Convert and Export PDF.
change pdf file to jpg; conversion pdf to jpg
VB.NET Create PDF from images Library to convert Jpeg, png images
Support create PDF from multiple image formats in VB.NET, including Jpg, Png, Bmp, Gif, Tiff, Bitmap, .NET Graphics, and REImage.
convert pdf pages to jpg online; convert pdf file to jpg online
RSLs: “Under”-Libraries
Unfortunately, RSLs fail to deliver on the promise of dynamic linking. As it turns out,
a SWF of the RSL itself does not contain all the code that the RSL requires to function.
The complementary part is generated by the Flex compiler as part of the application’s
(or module’s) bootstrap. That’s not all.
Besides dependency of an RSL SWF on the application’s bootstrap, the very bootstrap
is totally ignoring any library class that the application does not reference statically. As
a result, dynamic instantiation of RSL-based classes fails.
This section demonstrates the problem. If you are looking for the immediate solution,
skip to the section “Bootstrapping Libraries As Applications” on page 357.
Here you will create a Flex library project, ComponentLibrary, with a single component,
CustomPanel
(Example 7-20).
Example 7-20. CustomPanel, to be dynamically loaded by LibraryDemo
<!-- com.farata.samples.CustomPanel.mxml -->
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml"
title="'Custom' Panel #{instanceNumber}"
width="300" height="150"
creationComplete="instanceNumber=++count;"
>
<mx:Script>
public static var count:int;
[Bindable] private var instanceNumber:int;
</mx:Script>
</mx:Panel>
The example application, LibraryDemo, will merely attempt to dynamically create in-
stances of the 
CustomPanel
using 
applicationDomain.getDefinition()
, as shown in
Example 7-21.
Example 7-21. LibraryDemo dynamically loads CustomPanel
<!-- LibraryDemo -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
>
<mx:Button label="CreatePanel"
click="createComponent('com.farata.samples.CustomPanel')"/>
<mx:Script>
<![CDATA[
private var displayObject:DisplayObject;
private function createComponent(componentName:String) : void {
var clazz : Class =
loaderInfo.applicationDomain.getDefinition(componentName) as Class;
displayObject = DisplayObject(new clazz() );
addChild(displayObject);
352 | | Chapter 7: Modules, Libraries, Applications, and Portals
}
]]>
</mx:Script>
</mx:Application>
To test the application, add the ComponentLibrary project to the Flex Build Path of the
application project, as shown in Figure 7-9. Now, if you run the application and click
Create Panel, the application will crash, as shown in Figure 7-10.
Figure 7-10. LibraryDemo fails to dynamically create CustomPanel
If, however, you uncomment this line:
//import mx.containers.Panel;Panel;
the application will run successfully, as shown in Figure 7-11.
Consider the problem. Debugging the application reveals that the null pointer error
happens because of an uninitialized instance variable of the 
Panel
class:
titleBarBackground
. The corresponding snippet of the Panel.as is presented in Exam-
ple 7-22. At the time of the crash, the 
titleBarBackground
class is null.
Example 7-22. First snippet of Panel.as
override protected function layoutChrome(unscaledWidth:Number,
unscaledHeight:Number):void
{
Paying Tribute to Libraries s | | 353
super.layoutChrome(unscaledWidth, unscaledHeight);
 .  .
titleBarBackground.move(0, 0);
 .  .
}
Figure 7-11. If you link in the Panel class, LibraryDemo works well
Following the lead, in the same Panel.as you will discover that the value of
titleBarBackground
is dependent on dynamic instantiation of 
titleBackgroundSkin
(Example 7-23).
Example 7-23. Second snippet of Panel.as
var titleBackgroundSkinClass:Class = getStyle("titleBackgroundSkin");
if (titleBackgroundSkinClass){
titleBarBackground = new titleBackgroundSkinClass();
 .  .
354 | | Chapter 7: Modules, Libraries, Applications, and Portals
Because you did not do anything beyond linking in the 
Panel
to make the Library-
Demo application work, the difference between the working application and the buggy
one must be in the generated code. Specifically, the difference is in the compiler-
generated descendant of 
SystemManager
_LibraryDemo_mx_managers_SystemManager
,
which is the main application class.
The code of the nonworking application is presented in Example 7-24. Note that the
class implements 
IFlexModuleFactory
again. You came across this interface first during
the discussion of loading modules with 
ModuleManager
. At that time, you learned that
modules get bootstrapped by classes implementing 
IFlexModuleFactory
interface (see
Example 7-9). As you see now, the same technique works with applications.
Also note the 
currentDomain
and 
rsls
properties of the object returned by the 
info()
method. This 
rsls
property contains the 
url
of the ComponentLibrary.swf that will be
loaded in the current domain of the application.
And last, compare the 
mixins
array with Example 7-25, which presents the second
version of the 
mixins
array—this time taken from the working application (the one
where you force linking in of the 
Panel
class). This is the only place where two appli-
cations are different! And the only two lines that make this difference mention 
_Contro
BarStyle
and 
_Panel mixins
classes. FYI: the 
mixins
class is a helper class with the
method 
initialize(baseObject)
.
Example 7-24. Compiler-generated SystemManager for the LibraryDemo (nonworking version)
// Compiler-generated SystemManager for the LibraryDemo
package
{
import . . .
[ResourceBundle("containers")]
[ResourceBundle("core")]
[ResourceBundle("effects")]
[ResourceBundle("skins")]
[ResourceBundle("styles")]
public class _LibraryDemo_mx_managers_SystemManager
extends mx.managers.SystemManager
implements IFlexModuleFactory
{
public function _LibraryDemo_mx_managers_SystemManager() {
super();
}
override     public function create(... params):Object {
if (params.length > 0 && !(params[0] is String))
return super.create.apply(this, params);
var mainClassName:String = params.length == 0 ? "LibraryDemo" :
String(params[0]);
if (!mainClass)
Paying Tribute to Libraries s | | 355
return null;
var instance:Object = new mainClass();
if (instance is IFlexModule)
(IFlexModule(instance)).moduleFactory = this;
return instance;
}
override    public function info():Object {
return {
compiledLocales: [ "en_US" ],
"skins", "styles" ],
currentDomain: ApplicationDomain.currentDomain,
layout: "vertical",
mainClassName: "LibraryDemo",
"_dateFieldPopupStyle", "_dataGridStylesStyle", "_popUpMenuStyle",
"_headerDragProxyStyleStyle", "_activeTabStyleStyle", 
"_ContainerStyle", "_windowStatusStyle", "_ScrollBarStyle",
"_ButtonStyle", "_weekDayStyleStyle", "_linkButtonStyleStyle" ],
rsls: [{url: "ComponentLibrary.swf", size: -1}]
}
}
}
}
Example 7-25. mixins array from the compiler-generated SystemManager for the working version of
the LibraryDemo
mixins: [ "_LibraryDemo_FlexInit", "_richTextEditorTextAreaStyleStyle",
"_ControlBarStyle",
"_dateFieldPopupStyle", "_dataGridStylesStyle", "_popUpMenuStyle",
"_headerDragProxyStyleStyle", "_activeTabStyleStyle",
"_PanelStyle",
"_ContainerStyle", "_windowStatusStyle", "_ScrollBarStyle",
"_ButtonStyle", "_weekDayStyleStyle", "_linkButtonStyleStyle" ]
MXML applications are, by design, two-phased. The first phase is the bootstrap (the
first frame of the Flex application or Flex module .swf). At this time, the application
preloads the RSLs and manipulates support classes generated by the compiler, such as
mixins
. In this example’s case, not knowing about 
Panel
made the Flex compiler omit
356 | | Chapter 7: Modules, Libraries, Applications, and Portals
Documents you may be interested
Documents you may be interested