Now, when the servlet container with LCDS starts, it’ll launch the 
RDSDispatchServ
let
, which serves as a means of communication with Flash Builder Modeler. This
RDSDispatchServlet
tells the Modeler about its configured data sources; in the case of
Apache Tomcat, this is in context.xml. Refer to the documentation for your Java Servlet
container to learn how to configure data sources there.
The RDS server has to be configured in the Preferences panel of Flash Builder, as shown
in Figure 12-1.
Figure 12-2 shows the RDS Data view of the Modeler that successfully connected to
the test database configuration shown in Example 12-1.
If you drag one or more tables from the RDS view onto the Design perspective of the
Modeler, you’ll get the entity model of your data source with all relationships between
them. Figure 12-3 shows how the Employee entity was generated based on the em-
ployee database table.
If you drag one more table department, all primary/foreign key relations defined in
DBMS will turn into associations—lines connecting model entities. An association has
properties (e.g., cardinality), and you can specify whether the association is uni- or
bidirectional.
To assign validation rules to any of the Employee’s properties, right-click on the prop-
erty and enter the validation expression in the Styles panel.
You can also add to an entity so-called variants, which in other software tools are often
called computed fields. Writing expressions for variants requires familiarity with the
syntax of the expression language described in the product documentation. You can
also use the graphical Expression Builder of Flash Builder 4.
If an entity has a unique 
id
property, it’s considered a persistent entity.
In other words, you can save the changes to the entity’s data on some
media on the server side. Find the section 
<annotation>
in the source
code of the generated model; you’ll see that by default, the entity will
be manipulated using Java’s JDBC notation with the help of the Hiber-
nate dialect (
HSQLDialect
). To change the defaults and use custom
classes as server-side assemblers, refer to the annotations section in the
Adobe Application Modeling Technology Reference.
If you want to create a new table in DBMS, right-click somewhere in the blank area of
the Model view and select New Entity.
Now you can save and deploy this model (the .fml file) in the LCDS server (this .fml
file will be physically copied to the server). Because the plan is to display the data in a
Flex view that will consist of the 
DataGrid
and a 
Form
, call it 
masterDetailForm
as in
Figure 12-4.
Introduction to Model-Driven Development t | | 627
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
convert pdf to jpg file; changing pdf to jpg on
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
convert pdf pictures to jpg; changing pdf to jpg
Note the group of radio buttons in Figure 12-4. If you are building the model from an
existing database, the Unchanged option is selected. When you need to modify existing
database entities, choose Update; to create new ones, choose Create/Recreate.
After deploying the model, Flash Builder, with help of Fiber, generates code on both
the server and the client sides. On the server side, it generates a service with a number
of methods based on the properties of the deployed entities. It also generates destina-
tions, assemblers, endpoints, and whatever else you wrote manually in earlier versions
Figure 12-1. RDS configuration in Flash Builder 4
628 | | Chapter 12: Model-Driven Development with LCDS ES2
Online Convert Jpeg to PDF file. Best free online export Jpg image
Download Free Trial. Convert a JPG to PDF. Web Security. All your JPG and PDF files will be permanently erased from our servers after one hour.
.pdf to .jpg online; change format from pdf to jpg
Online Convert PDF to Jpeg images. Best free online PDF JPEG
Download Free Trial. Convert a PDF File to JPG. Web Security. Your PDF and JPG files will be deleted from our servers an hour after the conversion.
reader convert pdf to jpg; convert pdf picture to jpg
of LCDS; the difference is that Flash Builder does not create any custom Java classes
on the disk. On the client side, Flash Builder deploys the model in the .model directory
of your Flash Builder project and generates ActionScript classes acting as proxies for
the service operations.
Figure 12-2. RDS view in Flash Builder Modeler
Figure 12-3. A one-entity data model: Employee
Introduction to Model-Driven Development t | | 629
C# Image Convert: How to Convert Adobe PDF to Jpeg, Png, Bmp, &
String inputFilePath = @"C:\input.pdf"; String outputFilePath = @"C:\output.jpg"; // Convert PDF to jpg. C# sample code for PDF to jpg image conversion.
pdf to jpeg; convert pdf page to jpg
C# Image Convert: How to Convert Tiff Image to Jpeg, Png, Bmp, &
RasterEdge.XDoc.PDF.dll. String inputFilePath = @"C:\input.tif"; String outputFilePath = @"C:\output.jpg"; // Convert tiff to jpg.
convert pdf to jpg; conversion pdf to jpg
What Is Fiber?
Fiber is a code name for a number of technologies that support model-driven develop-
ment. Used in Flash Builder 4 and other Adobe technologies. Fiber consists of:
• A modeling language
• The generator of the code to be interpreted during runtime
• Tools for model creation and manipulation
• A runtime (built into LCDS) that knows how to process model behavior and
persistence
Fiber allows Flex applications to work with different types of services (
DataService
,
WebService
HTTPService
RemoteObject
). The wrapper classes that support these serv-
ices as well as their supporting classes are packaged in the Flex library fiber.swc.
Based on the deployed model (a .fml file), Fiber generates in-memory destinations and
assemblers for the services. You won’t find .java or .class files created by Fiber. The
LCDS server interprets the generated code in memory during runtime.
Figure 12-5 depicts the service 
EmployeeService
with a number of generated methods.
It’s easy to guess that the method 
getAll()
is for retrieval of all employees from the
database table 
Employee
.
Drag the 
getAll()
method from the Data Services view onto the 
DataGrid
in the Design
view, and you’ll see that the 
DataGrid
will display the right-column names as defined
in the entity 
Employee
. Run the application, and the 
DataGrid
will be populated with
data from the database. No coding has been required.
Figure 12-4. Deploying the data model
630 | | Chapter 12: Model-Driven Development with LCDS ES2
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
batch pdf to jpg online; batch convert pdf to jpg online
JPG to JBIG2 Converter | Convert JPEG to JBIG2, Convert JBIG2 to
Image Converter Pro - JPEG to JBIG2 Converter. Convert JPEG (JPG) Images to, from JBIG2 Images on Windows.
convert multiple pdf to jpg online; changing pdf file to jpg
Another way of binding the data service to the grid is the menu option
Bind to Data in the right-click menu of the 
DataGrid
.
What Has Been Generated?
What would you do after seeing the view shown in Figure 12-5? Chances are good that
a Java developer would immediately try to find the generated Java class
EmployeeService
. But she wouldn’t find it, because the Modeler generated Java access
code in memory. So how does the whole thing work? This data service has been gen-
erated from your deployed model in the server’s memory.
LCDS 3 includes a popular object-relational mapping framework called Hibernate,
which is responsible for the data retrieval and persistence, but the code for the
EmployeeService
itself is generated and interpreted during the runtime in memory only.
On one hand, it’s great: now even people who don’t know Java can use LCDS. On the
other hand, you are now completely dependent on the quality of this generated code.
If the Java sources of the data service existed and something went wrong, you (as the
Java developer) could debug and fix it. Because LCDS 3 was architected differently,
you are at the mercy of the software engineers who created these code generators.
Figure 12-5. Generated data service: EmployeeService
Introduction to Model-Driven Development t | | 631
JPG to GIF Converter | Convert JPEG to GIF, Convert GIF to JPG
Converter. Convert JPEG (JPG) Images to, from GIF Images on Windows. JPEG to GIF Converter can directly convert GIF files to JPG files.
best pdf to jpg converter online; pdf to jpg
JPG to DICOM Converter | Convert JPEG to DICOM, Convert DICOM to
Image Converter Pro - JPEG to DICOM Converter. Convert JPEG (JPG) Images to, from DICOM Images on Windows.
bulk pdf to jpg converter online; convert from pdf to jpg
In the 1990s, the authors of this book had a very positive experience with the client/
server tool PowerBuilder from Sybase, which was architected similarly. We didn’t see
the generated code, but everything worked fine there. We hope that the quality of the
generated LCDS code will be as good as it was in PowerBuilder.
On the client side, although the Flex code has been generated, you’ll be able to find
classes for the DTOs and the ActionScript stubs that are required to support all CRUD
operation communicating with the server-side methods from the data service. Gener-
ated DTOs are split into a superclass and its descendant; the superclass can be regen-
erated by the Modeler as often as needed, while the subclass, the descendant, is a
placeholder for the custom code of an application developer.
Creating Master/Detail/Search View
The function 
getAll()
populated the grid. To make this exercise a bit more complica-
ted, you can add a Master/Detail view and search functionality to this view. When an
employee is selected (say, Kristen Coe in Figure 12-6), you want to populate the form
with detailed information on this person. This form should be editable and support
data persistence (for example, the ability to update, delete, and add a new employee)
on the server side.
Right-click on the Employee entity in the Design view of the Modeler. Note the section
Data Types above the function names (see Figure 12-5). Because the Employee entity
has the data from only one table, you’ll see Employee as the only data type there. In a
more generic case, you might have several data types there.
Right-click on the Employee data type and select the menu Generate Form. The re-
sulting pop-up window asks you to select either Flex Form or Model Driven Form. If
you select Flex Form, the generated code will contain only basic Flex form attributes;
this form can be used in non-LCDS 3 applications.
You can also select the Model Driven Form option so that the code generator can use
the extended attributes of the model (such as validations and associations). In either
case, you’ll see newly generated form next to the 
DataGrid
. The form has the same fields
as the 
Employee
entity. Switch to the source code perspective and bind it to the 
Data
Grid
by adding to the 
<forms>
tag the following property:
valueObject="dataGrid.selectedItems as Employee"
where 
dataGrid
is an 
id
of the 
DataGrid
with employees.
Run the application and you’ll see that selecting a row in the 
DataGrid
shows all the
data about this employee, as seen in the form in Figure 12-6.
If the entity Employee had an association with the entity Department, the generated
form would contain a drop-down populated with departments. As you may remember,
in order to achieve the same functionality with BlazeDS, we had to come up with the
idea of resources (see Example 3-10), but in LCDS 3 using associations is even simpler.
632 | | Chapter 12: Model-Driven Development with LCDS ES2
The generated form displays all required form items in one column. The good news is
that you can customize the template used for the form generation to make it as fancy
as needed. Fiber uses templates generated by a template engine called FreeMarker, and
you can tweak the form’s template as you wish.
Try to add a new employee using the form shown earlier. Clicking the Add button
makes a server call to save a new row in the underlying database table.
Queries in this Modeler are called filters. Defining a filter on the entity serves the same
purpose as, say, writing a 
Select
statement against an RDBMS. One entity can have
multiple filters, which makes sense, because you need to be able to retrieve more than
one data set (for example, show all employees or show only employees from New York)
on the same data entity.
Of course, you don’t always want to display all the data. What if you’d like to filter the
data based on some criterion? For example, you may want to find all employees who
have specific letters in their names. In the SQL world, you’d use the 
like
keyword for
this.
The generated function 
getByEmpLName()
shown previously in Figure 12-5 can help only
if you know the exact last name you want, but not when you want to search just by a
couple of letters.
Figure 12-6. Master/detail view
Introduction to Model-Driven Development t | | 633
To specify more complex filters, just open the properties sheet of the model by going
back to the Data Model view, clicking the Employee model and referring to the panel
in the bottom left, and creating a new filter as shown in Figure 12-7. In this case, we
want to find a particular text pattern in both first (
empFname
) and last (
empLname
) names.
The Flex code provides the argument 
searchModel
, which contains the text to search for.
Figure 12-7. Adding a filter query
Java EE developers may recognize the 
jpql
prefix in the Query expression. Yes, this is
the Java Persistence Query Language used in the Java persistence framework to define
queries over entities independent of the syntax of the particular database you store the
data in.
You could’ve specified the search criteria in the Criteria Expression field shown in
Figure 12-7, but JPQL allows you to create a lot more complex queries, which are also
called pass-through filters. To get familiar with the expression syntax for filters, refer
to the online manual “Application Modeling Technology Reference”.
The DMS tab from Figure 12-7 enables you to configure pagination,
which is a useful feature for large result sets. The LCDS server will feed
you the data in chunks based on the configured number of records in
the page and the size of the visible portion of the UI control, that is,
DataGrid
.
The Modeler generates an appropriate function with a call responder for the filter de-
fined earlier. The rest is simple. Add a button and a text field (say, 
MySearchText
) on
the top of the view as shown in Figure 12-8.
On the click event of the button, make the call to the newly generated filter function
passing 
"%" + MySearchText.text + "%"
as an argument to the filter expression defined
in Figure 12-7.
Don’t forget to modify the 
dataProvider
of the 
DataGrid
to use the 
lastResult
not from
the 
getAll()
method as it was done originally, but from the method generated for the
filter expression. With Fiber, the result returned by the service call is placed into the
634 | | Chapter 12: Model-Driven Development with LCDS ES2
property 
lastResult
of the corresponding class 
CallResponder
. The 
dataProvider
of
your 
DataGrid
should get the data there.
Summary
Overall, the model-driven development workflow with LCDS 3 is a great move toward
automation of creating data-driven enterprise RIA, but it is a work in progress.
After reading the first chapter of this book, you most likely got the feeling that we don’t
see too much value in introducing MVC frameworks in a Flex RIA. By creating the
Fiber architecture and this new model-driven design workflow, Adobe may be sending
a similar message. Of course, you can use the generated view with Flex/LCDS/DBMS
in conjunction with the MVC framework of your choice, but does it make much sense?
In this chapter, we’ve reviewed just one aspect of LCDS 3—model-driven
development—but LCDS 3 has a number of other great improvements that will defi-
nitely make it a valuable addition to any enterprise application built with Flex and Java
EE. As a matter of fact, now you don’t even have to know Java to create LCDS-based
applications.
Figure 12-8. Adding a search with filter criteria
Summary | | 635
Epilogue
The book is over. We tried to discuss the most important subjects that Flex/AIR prac-
titioners face while working on an enterprise RIA. We tried not to just give you better
Flex components, but to explain how you can build similar or better ones for your
enterprise-wide framework. We shared with you some not-so-obvious techniques for
establishing communication between a Flex or an AIR client and the server-side
systems.
We spent time explaining how to customize the networking protocols used in Flex/
Java communications. We did this even though most of you can happily develop Flex
RIAs without bothering much about what’s traveling over the wire. But if and when
you are facing a challenge that requires changing the way Flex and Java communicate,
this book will help make your project a success.
Adobe software engineers did a great job designing the Flex framework, but what’s
more important is that they left all the doors open. Step in and enhance, extend, im-
prove, and add more stuff to this great product as you see fit. Don’t be afraid!
The authors of this book would really appreciate your feedback. Please send your con-
structive critique and praises of this book our way.
—Yakov Fain, Victor Rasputnis, and Anatole Tartakovsky
636 | | Chapter 12: Model-Driven Development with LCDS ES2
Documents you may be interested
Documents you may be interested