asp.net mvc display pdf : Best pdf compression application software tool html windows wpf online Manning%20-%20Code%20Generation%20in%20Action25-part1345

222
CHAPTER 10
C
REATING
DATABASE
ACCESS
GENERATORS
Figure 10.16 shows the block architecture of the tier generator. This generator
takes an abstract architectural definition as input and builds Perl classes for database
access and test pages using a set of templates.
The generator takes the schema definition and sample data as input and builds the
following outputs:
• Entity Perl classes—Entity classes represent each table in the schema and pro-
vide the ability to create, edit, and update each entity.
• List Perl module—List functions are used for bulk queries against the database.
The queries are implemented as functions within Perl modules, which are
grouped together by their primary tables.
• Schema—The physical schema for the database is implemented as a series of SQL
commands stored in a text file.
• Sample data loader—This is a set of sample data that is implemented as a series of
SQL commands that loads the SQL schema.
• Test HTML::Mason pages—These pages provide a rudimentary interface to the
entity and list functionality created by the generator.
10.9.3
Processing flow 
The generator follows these steps:
Reads in the definition file and stores it locally.
Creates the schema SQL file based on the definition file.
Creates the sample data loader, which uses SQL to load data into the database.
For each entity follows these steps:
Creates the Entity class.
Creates the test HTML::Mason page for the Entity class.
For each list follows these steps:
Initializes a cache of functions.
For each query:
Decides the return type and invokes the proper template, then adds the 
output to the function cache.
Creates the test HTML::Mason page for this query.
Creates the list module with the functions cache.
Perl DBI generator
Best pdf compression - Compress reduce PDF size in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
C# Code & .NET API to Compress & Decompress PDF Document
best way to compress pdf; pdf optimized format
Best pdf compression - VB.NET PDF File Compress Library: Compress reduce PDF size in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
VB.NET PDF Document Compression and Decompression Control SDK
pdf change font size; best online pdf compressor
T
ECHNIQUE
GENERATING
DATABASE
ACCESS
CLASSES
FOR
PHP
223
10.9.4
Perl/DBI developer resources
We’ve listed some Perl resources for your convenience:
• The HTML::Mason site (www.masonhq.com) is a resource for developers who
use the Mason component framework to build web pages. 
• The Comprehensive Perl Archive Network (CPAN, at www.cpan.org) is the cen-
tral resource for Perl development. It is an archive of Perl modules that cover
every conceivable requirement. 
• You’ll find the home page for DBI at http://dbi.perl.org/. The FAQ is at http://
dbi.perl.org/doc/faq.html. 
• Web Development with Apache and Perl, by Theo Petersen (Manning, 2002),
examines building web applications with Perl. 
• Object-Oriented Perl, by Damian Conway (Manning, 1999), is an excellent book
on building Perl classes.
• Programming the Perl DBI, by Alligator Descartes and Tim Bunce (O’Reilly,
2000), covers using the DBI to query and operate on a database.
• Programming Perl, 3rd Edition, by Larry Wall, Jon Orwant, and Tom Christiansen
(O’Reilly, 2000), is the classic Perl book by Larry Wall, the creator of Perl.
• Embedding Perl in HTML with Mason, by Dave Rolsky and Ken Williams
(O’Reilly, 2002), discusses using HTML::Mason to build dynamic web pages.
10.10 T
ECHNIQUE
GENERATING
DATABASE
ACCESS
CLASSES
FOR
PHP
PHP is a powerful and robust page markup language now in its fifth release. With a
clean object model and the Pear portable database access layer, PHP is an excellent
choice for web application development. In this section, we’ll look at creating a genera-
tor in PHP that accesses a database.
10.10.1 Roles of the generator
The roles of this generator are the same as those of the JDBC generator described in
section 10.6.1.
10.10.2 Laying out the generator architecture
Our PHP architecture recommendation is a classic three-tier technology stack. The
user interface, implemented in PHP on top of Apache, calls a set of business logic
objects, also implemented in PHP. These in turn talk to the generated database access
layer with its entity/list objects implemented in PHP. The database access objects talk
to the database through the Pear portable database access layer. Figure 10.17 shows the
block diagram.
C# PDF Convert to Tiff SDK: Convert PDF to tiff images in C#.net
Best C#.NET PDF converter SDK for converting PDF to Tiff in page and multipage tiff image files can be created from PDF. Supports tiff compression selection.
.pdf printing in thumbnail size; best compression pdf
VB.NET PDF Convert to Tiff SDK: Convert PDF to tiff images in vb.
When converting PDF document to TIFF image using VB can be compressed and uncompressed by using lossless compression. image is regarded as the best image format
change font size in pdf form field; pdf page size may not be reduced
224
CHAPTER 10
C
REATING
DATABASE
ACCESS
GENERATORS
The architecture for the database access layer is the Entity/List model described in
section 10.6.
Figure 10.18 shows the tier generator for this PHP architecture. This generator
builds a set of PHP classes and pages from an abstract definition of the system that
will be built.
The generator takes the schema definition file and the sample data as input and
produces, through the use of templates, these outputs:
• Entity PHP classes—The Entity classes provide the create, edit, and update func-
tionality for each table.
• List PHP classes—The List classes provide access to queries for reports and list
pages.
• Schema—The physical schema for the database is implemented as a series of SQL
commands stored in a text file.
• Sample data loader—This is a set of sample data that is implemented as a series of
SQL commands that loads the SQL schema.
UserInterface
(Apache/PHP)
BusinessLogic
(PHP)
DatabaseAccess
TestPages
(PHP)
Database
DatabaseDefinition
(SQL)
SampleDataLoader
(PHP)
Entities
(PHP)
Lists
(PHP)
PEAR
Figure 10.17
A PHP web application architecture
Generator
Schema Definition
File
List
Class
Schema
List Test
Page
List and Entity Classes
Initialization
SQL
Entity Test
Page
PHP Test Pages
Data Loader
Business Logic
Definition File
Sample Data
Entity
Class
Sample Data
Loader
Production PHP Pages
DB
PEAR
Figure 10.18 8 A generator that builds the 
database layer for a PHP web application
C# Create PDF from Tiff Library to convert tif images to PDF in C#
Best and free C# tiff to adobe PDF converter SDK for Visual Studio .NET. Description: Convert to PDF with specified compression method and save it on the
pdf file compression; pdf compression
C# PDF Convert to Word SDK: Convert PDF to Word library in C#.net
Best C#.NET PDF to Microsoft Office Word The magnification of the original PDF page size. DocumentType targetType, ImageCompress compression, String filePath).
best pdf compression; change font size pdf document
T
ECHNIQUE
GENERATING
DATABASE
ACCESS
CLASSES
FOR
PHP
225
• Test PHP pages—These pages provide a rudimentary interface to the Entity
and List classes created by the generator.
10.10.3 Processing flow 
The generator follows these steps:
Reads in the definition file and stores it locally.
Creates the schema SQL file based on the definition file.
Creates the sample data loader, which uses SQL to load data into the database.
For each entity follows these steps:
Creates the Entity class.
Creates the test PHP page for the Entity class.
For each list follows these steps:
Initializes a cache of functions.
For each query:
Decides the return type and invokes the proper template, then adds the 
output to the function cache.
Creates the test PHP page for this query.
Creates the List class with the functions cache.
10.10.4 Generators for PHP
Several PHP code generators are available off-the-shelf. Some of them use an existing
database schema as the input source to build corresponding PHP database access wrap-
pers and pages. We’ve listed a couple of these tools for you:
• PHPBuns is an open source database access and web page generator for PHP
(http://phpbuns.sourceforge.net).
• PostgresPHPGenerator builds PHP from a Postgres physical schema (http://
sourceforge.net/projects/pgphpgenerator/).
10.10.5 PHP developer resources
Here are some PHP developer resources:
• The PHP home page (www.php.net) is the central source for all things PHP. 
• The PHP page on O’Reilly’s OnLAMP site (www.onlamp.com/php/) is an excel-
lent source for articles on PHP. 
• PHP Freaks (www.phpfreaks.com) is a PHP community site with code, tutorials,
and articles. 
PHP generator
C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF
Best C# Microsoft Office PowerPoint to adobe PDF file converter SDK for Visual Description: Convert to PDF/TIFF with specified compression method and save
pdf page size; pdf optimized format
C# Create PDF from Excel Library to convert xlsx, xls to PDF in C#
Best Microsoft Office Excel to adobe PDF file converter SDK for Visual Studio .NET. Description: Convert to PDF/TIFF with specified compression method and
best pdf compression tool; change font size pdf form
226
CHAPTER 10
C
REATING
DATABASE
ACCESS
GENERATORS
• The Pear home page (http://pear.php.net/) is the source for documentation on
the Pear database interface layer. 
• Web Database Applications with PHP & MySQL, by Hugh E. Williams and David
Lane (O’Reilly, 2002), covers building web applications using PHP. 
• Programming PHP,  by Rasmus Lerdorf and Kevin Tatroe (O’Reilly, 2002) is a ref-
erence manual for the PHP programming language.
• PHP Cookbook, by Adam Trachtenberg and David Sklar (O’Reilly, 2002) is a set
of useful recipes to make programming PHP easier.
In the next section, we look at ways to generate models of database access apps off the
shelf using AndroMDA.
10.11 O
FF
-
THE
-
SHELF
: A
NDRO
MDA
Model-driven generation uses the UML generated by a modeling tool, such as Rational
Rose, as the abstract definition source for the generation of production code. This gen-
eration from a graphical abstraction can be extremely appealing—it is much easier to
read a picture of the schema than an XML representation.
The Object Management Group (http://www.omg.org) has defined the MDA
(Model Driven Architecture) standard. This standard defines how UML can be com-
piled using code generators into executable code. AndroMDA, ArcStyler, and Opti-
malJ are all examples of MDA generators. These use an abstact UML definition as
input and build one or more tiers of code. We will concentrate on how AndroMDA,
an open source generator, uses a cartridge model to build J2EE database access code.
Changing cartridges will allow you to build code for other technologies.
In the next section, we describe what the generator will and will not do.
10.11.1 Roles of the generator
The AndroMDA generator has one main responsibility: creating the EJBs that repre-
sent the entities specified in UML form.
Here’s what it doesn’t take responsibility for:
• The schema in the database
• Business logic code that sits on top of the EJB layer
• The user interface validations or the workflow patterns for usability
With that in mind, let’s look at the architecture of the AndroMDA generator.
10.11.2 Laying out the generator architecture
To generate a model using AndroMDA, you can use Rational Rose to export an XML
rendition of the current model. The generator reads this model and, using a variety of
XSLT templates, builds Struts pages, session and entity beans, deployment descriptors,
C# Create PDF from Word Library to convert docx, doc to PDF in C#.
Best Microsoft Office Word to adobe PDF file converter SDK for Visual Studio .NET. Description: Convert to PDF/TIFF with specified compression method and
change font size in fillable pdf; adjusting page size in pdf
C# Create PDF from OpenOffice to convert odt, odp files to PDF in
Best C# OpenOffice to adobe PDF file converter SDK for Visual Studio .NET. Description: Convert to PDF/TIFF with specified compression method and save it
pdf compression settings; change font size in fillable pdf form
O
FF
-
THE
-
SHELF
: XD
OCLET
227
and SQL to initialize the database. Figure 10.19 shows the block architecture for
AndroMDA, an open source model-driven generator.
10.11.3 Developer resources
Here are resources for AndroMDA:
• The official home page for AndroMDA is http://andromda.sourceforge.net/.
• Poseidon (www.gentleware.com) is an open source UML modeling tool you can
use if you plan to go with a model-driven generation approach based on UML.
• ArcStyler from Interactive (http://www.arcstyler.com/) Objects is an MDA gen-
erator that builds both .NET and J2EE code.
• OptimalJ (http://www.optimalj.com/) is an MDA generator from Compuware
that generates full applications on the J2EE technology stack.
10.12 O
FF
-
THE
-
SHELF
: XD
OCLET
XDoclet (http://xdoclet.sourceforge.net) is a code-munging generator for Java that has
a devoted and growing following. The generator uses JavaDoc comments (via the
Doclet API) to invoke modules that build a variety of different output files. The stan-
dard purpose is to build the infrastructure beans around handwritten entity beans,
thus offloading a lot of typing from the engineer. In this section, we cover what the
generator will and will not do.
10.12.1 Roles of the generator
The XDoclet generator has one main responsibility: creating the entity and session
bean infrastructure around a set of existing beans.
It does not take responsibility for:
• The schema in the database
• Business logic code that sits on top of the EJB layer
• The user interface validations or the workflow patterns for usability
Generator
XMLModel
EJBEntityBeans
EJBSessionBeans
Deployment
Descriptors
Initialization
SQL
XSLT
Templates
StrutsPages
DB
RationalRosewith
UMLModel
Figure 10.19 9 The AndroMDA generator and how 
it relates to an n-tier web application architecture
C# TIFF: C#.NET Code to Process TIFF, RasterEdge XDoc.Tiff for .
TIFF, JPEG, GIF, BMP, PNG, PDF, Word and can fulfill different users' needs best, which include corresponding information, such as Tiff compression mode, color
change pdf page size; pdf change font size in textbox
228
CHAPTER 10
C
REATING
DATABASE
ACCESS
GENERATORS
Let’s look at the architecture of the XDoclet generator.
10.12.2 Laying out the generator architecture
The entity bean is the starting point for this generator. The bean acts as input to the
generator, which parses out the JavaDoc comments and, using a set of modules, builds
almost all of the surrounding infrastructure for the bean. Figure 10.20 shows the block
architecture for XDoclet as it is used to build a J2EE server stack.
At the time of this writing, XDoclet did not generate a schema to initialize the
database server.
10.13 D
ESIGN
TIPS
You can make some application architecture decisions before you begin building your
generator, which will simplify the resulting design. Here are some suggestions:
• Unify your schema generation. Don’t use one tool to build the schema and then
generate code to that schema. A generator that builds both the physical schema
and the database access objects assures synchronization between the two.
• Also, your application semantics may require additional supporting tables to back
up the original set of entity tables, such as transaction logging tables. These types
of structural tables are easily built by a generator while leaving the abstract defini-
tion clear of this type of information.
Generator
Deployment
Descriptors
Modules
ValueObject
JSPPage
DB
Entity
EntityBean
EntityHome
StatelessSession
StatelessSessionBean
StatelessSession
Home
Client
Figure 10.20 0 The XDoclet generator building 
various J2EE EJB classes and interfaces
S
UMMARY
229
• If possible, you can simplify both the database access layer and the generator
design by using a one-to-one mapping between entities and tables.
• You should spend design time on the fields of the tables and the general relation-
ships between those tables. The implementation of the infrastructure elements of
the tables, such as primary and foreign keys, history tables, and the relationships
between tables, should be handled by the generator. This ensures that the generator
will be able to build efficient queries and will be portable between database servers. 
10.14 F
INDING
A
TOOL
TO
DO
IT
FOR
YOU
Database access is easily the most popular form of code generation. You can find gener-
ators for almost every conceivable platform and to suit every need. Here are just a few:
• EJBGen (www.beust.com/cedric/ejbgen/) is similar to XDoclet in using JavaDoc
to define beans and deployment descriptors. It does not generate the SQL schema
for deployment in the database.
• Ironspeed (www.ironspeed.com/products.asp) generates complete web applica-
tion stacks (database definition, business logic, and interfaces) based around
Microsoft’s technologies.
• Codecharge (www.codecharge.com/index2.html) presents an IDE for developing
web applications, which are then generated into J2EE, ASP, ASP.NET, PHP, Perl,
or ColdFusion.
• TierDeveloper by AlachiSoft (www.alachisoft.com/product.htm) can generate to both
J2EE and ASP.NET. It builds middle-tier database objects as well as documentation.
• Proc-Blaster from LockwoodTech (www.lockwoodtech.com) generates database
access code and stored procedures for Microsoft technologies.
• ER/Studio (www.embarcadero.com/products/erstudio/index.asp) is an excellent
alternative to ERWin.
10.15 S
UMMARY
In database applications, the database is the foundation of the application. The strength
of the foundation always determines the stability of the surrounding code. This chapter
has shown that generation is the best technique for building strong database code and,
by extension, a strong foundation for your application. If you generate only one section
of code in your application, it should be the database code.
In the next chapter, we look at generators that build web services layers. 
230
C
H
A
P
T E R
1 1
Generating web 
services layers
11.1 The big picture e 230
11.2 A case study: generating XML-RPC 
for Java a 233
11.3 Technique: generating SOAP P 248
11.4 Design tips s 249
11.5 Finding a tool to do it for you u 250
11.6 Summary y 250
A web services layer exposes the business logic of your application to the outside world.
If your business logic and security layers are well defined, the task of exporting them
through web services requires some simple code to interface your API to the RPC layer
and to marshal the data between the two. This process involves building a remote-
access layer that is a peer of the user interface. You can use several RPC standards for
this purpose. In this chapter, we concentrate on XML-RPC and SOAP, both of which
are based on XML and provide tools and support across a wide variety of operating sys-
tems and programming languages.
This is just the type of work for which code generation was invented. We show you
not only how to create the RPC layers for an application using a generator, but also
how to build stub code for the client—in Visual Basic, Perl, Java, or C#—that will
make your interface easy to use.
11.1
T
HE
BIG
PICTURE
The case study in chapter 1 used an RPC generator to build an external interface for
the application. RPC layers are, by definition, multicomponent affairs. A server portion
T
HE
BIG
PICTURE
231
sits as a peer to the user interface on the server side. Corresponding to the server por-
tion are one or more client portions, which act as stubs for the procedures implemented
in the server portion. You can build multiple client portions—one for each of the pos-
sible client languages. For example, you can deliver stub APIs in Visual Basic, C++, and
Java—if your customer base requires that type of diversity in language selection—by
simply including additional templates in the generator. The generator and the system
components it creates are shown in figure 11.1.
In this chapter, we present a case study XML-RPC generator that builds both
server and client code. Later, in section 11.3, we introduce a similar generator design,
this one for the SOAP architecture.
11.1.1
Providing security and authentication
If your server offers weather information, you probably don’t need to worry about
authenticating your clients. But more complex services are likely to need a method
for determining who is accessing the server and making sure that users are who they
claim to be.
Figure 11.1 1 The RPC-layer generator from the original case study
Documents you may be interested
Documents you may be interested