Tải bản đầy đủ (.pdf) (352 trang)

Oracle data integrator 11g cookbook

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (7.61 MB, 352 trang )

www.it-ebooks.info


Oracle Data Integrator 11g
Cookbook
Over 60 field-tested recipes for successful data integration
projects with Oracle Data Integrator

Christophe Dupupet
Peter C. Boyd-Bowman
Denis Gray
Julien Testut

BIRMINGHAM - MUMBAI

www.it-ebooks.info


Oracle Data Integrator 11g Cookbook
Copyright © 2013 Packt Publishing

All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or
transmitted in any form or by any means, without the prior written permission of the publisher,
except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the
information presented. However, the information contained in this book is sold without
warranty, either express or implied. Neither the authors, nor Packt Publishing, and its dealers
and distributors will be held liable for any damages caused or alleged to be caused directly or
indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the companies
and products mentioned in this book by the appropriate use of capitals. However, Packt


Publishing cannot guarantee the accuracy of this information.

First published: May 2013

Production Reference: 2060613

Published by Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK.
ISBN 978-1-84968-174-2
www.packtpub.com

Cover Image by Karl Moore ()

www.it-ebooks.info


Credits
Authors

Project Coordinator

Christophe Dupupet

Arshad Sopariwala

Peter C. Boyd-Bowman
Proofreader


Denis Gray

Paul Hindle

Julien Testut

Indexer

Reviewers

Monica Ajmera

Uli Bethke
Hans Forbrich

Production Coordinator

Kevin Glenny

Aparna Bhagat

Maciej Kocon
Ray McCormack

Cover Work
Aparna Bhagat

Acquisition Editors
Edward Gordon
Erol Staveley

Lead Technical Editor
Neeshma Ramakrishnan
Technical Editors
Saijul Shah
Sayali Mirajkar
Hardik B. Soni

www.it-ebooks.info


www.it-ebooks.info


Foreword
In 1998, when Sunopsis first opened its door to begin development of the product that would
become ODI, the technology landscape was very different from today. There were very few
data warehouses over 10 terabytes, and both the underlying hardware and software were
struggling to keep up with the load and query demands placed upon them. As a result, the
warehouses only included the most critical transactional data from the few key systems. The
prevailing ETL approach of the day was to hand-build highly optimized flows, which executed
in dedicated hardware, and then spoon-feed the results into the data warehouse. In this
context, the founding principles of ODI were extraordinarily bold: leverage the data warehouse
itself as the transformation engine and enable developers to work at a much higher level of
abstraction, counting on the tool to generate an optimized execution plan.
Viewed with hindsight 15 years later, these principles seem prescient. Data warehouses have
grown to be petabytes in size, and the hardware that houses them is often the most powerful
in the data center — 100s of processor cores, terabytes of RAM, and 10s of terabytes of Flash.
After many years of concerted effort, and with thousands of mappings to show for it, many
enterprises have added far more transaction systems into their warehouses, and they are
now looking to bring in data sets that have hitherto been dark (for example, server logs, social

media feeds), and may be best preprocessed on open source distributed frameworks such as
Hadoop. The world has finally caught up to ODI.
Congratulations on your decision to take a different approach to bulk movement and
transformation of data within your business. For developers experienced on traditional ETL
tools, you will discover yourself doing far less mundane work once you grasp a few of the key
ODI concepts such as topologies, knowledge modules, and set-based transformation. This
book will be an excellent companion for you on this journey. Written by four experts on the
product (with decades of experience among them), including key product managers who are
continuing to drive ODI's evolution, this book complements the product documentation with
a variety of practical recipes. In addition to all of the common tasks required in populating a
data warehouse (for example, change data capture, slowly changing dimensions), readers will
also find valuable information on using ODI within a web service environment, and how to use
its powerful APIs to programmatically author ODI artifacts.

www.it-ebooks.info


Since its acquisition, ODI has become the key bulk data technology within Oracle products
and within our cloud offerings. I hope you find it as impactful in your business as it has been
in ours.

Brad Adelberg
Vice President, Development for Data Integration
Oracle Corp.

www.it-ebooks.info


About the Authors
Christophe Dupupet is a Director in the Fusion Middleware Architects Team, where he

leads the expertise on ODI. The team works closely with strategic customers that implement
ODI, and helps define best practices on the product in terms of architecture, implementation,
and operations.
Prior to Oracle, Christophe was part of the team that started the operations for Sunopsis in
the US, where he lead the technical team (presales, support, and training). Sunopsis was
acquired by Oracle in 2006.
Christophe holds an Operations Research degree from EISTI in France, a Masters
Degree in Operations Research from Florida Tech, and a certificate in Management
from Harvard University.
Christophe is a co-author of the book Getting Started with Oracle Data Integrator 11g: A
Hands-on Tutorial.
There would be no book if we did not have a fantastic product and
customers to trust us with this product. I want to particularly thank all
the individuals that have helped this product become what it is today: the
architects and software engineers that work and have worked on ODI for
their vision and production; our support engineers that help our customers
every day and help shape best practices with a forever growing knowledge
base (support.oracle.com is truly a goldmine if you are looking for
information on how to use ODI); our sales engineers and product managers
that help customers and partners in their selection of our product.

www.it-ebooks.info


Peter C. Boyd-Bowman is a Technical Director and Consultant with the Oracle
Corporation. He has over 30 years of software engineering and database management
experience, including 12 years of focused interest in data warehousing and business
intelligence. Capitalizing on his extensive background in Oracle database technologies dating
back to 1985, he has spent recent years specializing in data migration. After many successful
project implementations using Oracle Warehouse Builder, and shortly after Oracle's

acquisition of the Sunopsis Corporation, he switched his area of focus over to Oracle's flagship
ETL product: Oracle Data Integrator. Peter holds a BS degree in Industrial Management and
Computer Science from Purdue University and currently resides in North Carolina.

Denis Gray is a Director of Product Management for Data Integration at Oracle. Denis has
over 15 years of experience in the data-integration field. For the past seven years, Denis has
been an integral part of Oracle Development Organization as a Product Manager within Fusion
Middleware, delivering data integration solutions. Prior to this, Denis was a data integration
consult for Hyperion Solutions (Oracle). Here, Denis worked at many of the largest Fortune
100 companies, building data warehouses and implementing business intelligence solutions.
Denis has a Bachelor's Degree in Computer Science from the University of Missouri and
currently resides in St. Louis, MO. Denis also co-authored the Packt book Getting Started
with Oracle Data Integrator 11g: A Hands-on Tutorial.
I would like to thank my beautiful wife Tracy and my sons, Tad and Charlie,
for their support, understanding, and above all their love and faith. There
were many nights where I was missing in action; however, I never heard
a complaint. Also a special thanks to my co-authors for their help and
guidance throughout this process.

www.it-ebooks.info


Julien Testut is a Product Manager in the Oracle Data Integration group focusing on Oracle
Data Integrator. Julien has an extensive background in Data Integration and Data Quality
solutions and is a co-author of Getting Started with Oracle Data Integrator 11g: A Hands-on
Tutorial. Prior to joining Oracle, he was an Applications Engineer at Sunopsis, which was then
acquired by Oracle. Julien holds a Masters degree in Software Engineering.
To my daughter Olivia, who was born while I was working on this book and
who has been filling my life with joy since then. Thanks to my wife Emilie for
her help and patience throughout this book's writing process. I couldn't have

done it without you. I would also like to take this opportunity to express my
gratitude to my co-authors. It's always a pleasure to collaborate with you!
Finally, I would like to thank my family and friends for their support as well
as my colleagues who help make Oracle Data Integrator a better product
with every release. Thank you!

www.it-ebooks.info


About the Reviewers
Uli Bethke has been working with ODI since 2007. After some initial difficulties familiarizing
himself with the tool, he quickly realized the huge potential of ODI. A couple of great
innovations went into ODI and it is light years ahead of any of its competitors. It is one of
those tools that really make a difference. Uli has been working in data integration and data
warehousing for more than 13 years. Verticals include Finance, Retail, Pharma, and Education.
Uli is a managing partner and owner of a small but growing BI consultancy in Dublin, Ireland.
He offers expert services on ODI including training. He also consults on data warehousing,
data integration, and enterprise architecture. If you want to avail of any of his services, you
can contact him through his blog or directly via e-mail.
Uli has also been a reviewer of the book Getting Started with Oracle Data Integrator 11g: A
Hands-on Tutorial, published by Packt.
The last time I reviewed a Packt book, my baby boy Ruairi had just been
born. Recently, we have welcomed Una as another member to the family.
Una, Ruairi, and Helen, you really make my day.

Hans Forbrich has been working with, consulting on, and teaching Oracle products for 30

years. He is experienced in data integration using Oracle Warehouse Builder and Oracle Data
Integrator, as well as with the SOA and OSB technologies. Hans has been enthusiastic about
ODI since the Sunopsis acquisition by Oracle, and regularly teaches the Oracle University ODI

courses in North America through his partner, ExitCertified Corp.
Hans has been an Oracle ACE since 2005 and an Oracle ACE Director since 2008. For more
information about the Oracle ACE program, see />community/oracle-ace/index.html.

www.it-ebooks.info


Hans is a frequent reviewer of Packt Publishing's Oracle books, spanning the range of
OracleVM and Oracle Scheduler through Oracle SOA Suite.
I'd like to thank my wife Susanne for her patience while I hide behind my
computer screen, editing or writing. Also, thanks to my colleagues, especially
Dan Morgan and Aman Sharma, for their assistance over the years, and the
challenging questions that keep me motivated in our ever expanding field of
Information Technology.

Kevin Glenny has international Oracle Technical Architecture experience integrating large
scale real-time systems. His most notable projects include the European Grid Infrastructure
(EGI) supporting the particle physics large data generated by CERN.
He specializes in the area of scalable OLAP and OLTP systems, building on his Grid computing
background. He is also the author of numerous technical articles and his industry insights can
be found on his company's blog at />GridwiseTech, Oracle Partner of the Year 2013, is the independent specialist on scalability
and large data. The company delivers robust IT architectures for significant data and
processing loads. GridwiseTech operates globally and serves clients ranging from Fortune
Global 500 companies to government and academia.

Maciej Kocon has been in the IT industry for over 12 years. He began his career as a

database application programmer and quickly developed a passion for SQL language, data
processing and analysis.
He entered the realm of BI and data warehousing, and has specialized in the design of

various data integration frameworks for high data volumes. His experience covers the full
data-warehouse lifecycle in various sectors including Financial Services, Retail, Public Sector,
Telecommunications, and Life Sciences.
He first came across the tool in 2005 when it was Sunopsis product and has been gradually
spending more time on it since. For the last 4 years he has worked full-time on ODI,
performing heavy customizations made for enterprise class data warehouse implementations.

www.it-ebooks.info


He believes the template architecture, which ODI is built upon, is the perfect solution giving
the best from both worlds (flexibility and reusability), offering practically limitless possibilities
Maciej is managing partner and owner of a small but growing BI consultancy in Dublin,
Ireland. He offers consulting services on data warehousing and data integration architectural
solutions tailored for enterprises. He is a contributor to the blog that
focuses on data integration and ODI in particular.
If you want to avail of any of his services you can contact him through that website or via
e-mail:
Maciej has also been a reviewer of the book Getting Started with Oracle Data Integrator 11g,
published by Packt.
I’d like to personally thank Gosia for her patience and encouragement.
Reviewing this book is just a little drop in the sea of work I bring home,
which would not be possible to accomplish without her huge support.

Ray McCormack was introduced to databases 12 years ago, and since that time he has
been synchronizing his on-job and off-job interests with database programming. He has a
comprehensive background in database application design, development, business process
mapping, systems integration, and leading teams of developers.
Originally from a development background, Ray is very passionate about Business Intelligence
and Data Warehousing solutions. He has complete end-to-end expertise in all facets of BI/

DW including project management, dimensional modeling, performance tuning, ETL design
and development, report and dashboard design and development, as well as installation
and administration. He has vast experience in various roles across industry sectors such
as pharmaceutical (Icon PLC), education (University of San Diego), scientific (National
Instruments), and broadcasting (RTE).
Ray's hobbies include spending time with his family, all sports, and playing with the latest
technological gadgets. He loves traveling, having worked in California for 8 years.

www.it-ebooks.info


www.PacktPub.com
Support files, eBooks, discount offers and more

You might want to visit www.PacktPub.com for support files and downloads related to your book.
Did you know that Packt offers eBook versions of every book published, with PDF and ePub
files available? You can upgrade to the eBook version at www.PacktPub.com and as a print
book customer, you are entitled to a discount on the eBook copy. Get in touch with us at
for more details.
At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range
of free newsletters and receive exclusive discounts and offers on Packt books and eBooks.
TM


Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library.
Here, you can access, read and search across Packt's entire library of books. 

Why Subscribe?
ff


Fully searchable across every book published by Packt

ff

Copy and paste, print and bookmark content

ff

On demand and accessible via web browser

Free Access for Packt account holders
If you have an account with Packt at www.PacktPub.com, you can use this to access PacktLib
today and view nine entirely free books. Simply use your login credentials for immediate access.

Instant Updates on New Packt Books
Get notified! Find out when new books are published by following @PacktEnterprise on Twitter,
or the Packt Enterprise Facebook page.

www.it-ebooks.info


www.it-ebooks.info


Table of Contents
Preface1
Chapter 1: Installation, Deployment, and Configuration
7
Introduction
Deploying and configuring a standalone agent manually

Deploying a JEE ODI Agent
Configuring a standalone agent with OPMN
Deploying JDBC drivers with a JEE ODI Agent

7
9
12
21
26

Chapter 2: Defining the Oracle Data Integrator Security

31

Chapter 3: Advanced Topology

59

Introduction
Setting up LDAP security for Oracle Data Integrator
Setting external authentication with Oracle Data Integrator
Creating users using generic profiles
Creating users using non-generic profiles
Creating new custom profiles in the Security navigator
Introduction
Creating a new technology
Modifying actions to get more from your diagrams
Modifying and expanding datatypes
Changing the case sensitivity for code generation
Best practice – using the Staging Area User to access your

target schema

Chapter 4: Using Variables

Introduction
Passing start-up parameters to a scenario using variables
Using table names that run in all contexts using getObjectName
Using variables to filter data based on a timestamp

www.it-ebooks.info

31
32
36
48
51
55
59
60
65
69
73
76

79

79
80
83
86



Table of Contents

Using variables in KM options (and reusing the variables in an interface,
package, and so on)
Using variables in topology
Using variables to control loops inside packages

91
98
102

Chapter 5: Knowledge Module Internals

107

Chapter 6: Inside Knowledge Modules – SCD and CDC

127

Introduction
Using the substitution passes
Using Java variables in KMs
Using Java for condition code generation
Invoking Java from the KMs
Using substitution methods in Java
Combining substitution methods in a KM

Introduction

Implementing Slowly Changing Dimensions (SCD) using ODI
Modifying a Slowly Changing Dimension KM to allow
undefined behaviors
Using Changed Data Capture (CDC) - simple
Using Changed Data Capture (CDC) - consistent set
Using one single interface to load changes that occur in any dimensions

107
108
111
115
118
120
123
127
128
136
140
149
161

Chapter 7: Advanced Coding Techniques

169

Chapter 8: Package Loops and File Processing

201

Introduction

Using diagrams to develop and maintain models
Generating DDL from data models
Generating interfaces from data models or diagrams
Creating a temporary interface (subquery)
Loading data from an SQL query
Performing a pivot
Loading data using partition exchange
Introduction
Defining packages and loops for near real-time execution using
a hybrid loop
Using a file from a parameter variable
Detecting files with a variable name
Processing all files in a directory
Processing a large number of files in parallel

ii

www.it-ebooks.info

169
170
173
176
180
185
190
196
201

202

207
211
214
218


Table of Contents

Chapter 9: XML and Web Services

223

Chapter 10: Advanced Coding Techniques Using the ODI SDK

261

Chapter 11: More on ODI

289

Index

325

Introduction
Defining a connection to XML within ODI
Processing complex files with ODI
Processing XML data within an RDBMS not in memory
Invoking web services from ODI
Invoking asynchronous ODI web services with callbacks

Configuring container-based authentication with ODI web services
Introduction
Creating the Master and Work repositories using the SDK
Creating a project using the SDK
Automating the import of artifacts using the SDK
Creating models and datastores using the SDK
Creating an interface using the SDK
Invoking and monitoring a scenario using the SDK

Introduction
Invoking an external program that requires a password
Tuning a standalone ODI agent
Loading a file containing a LOB
Using ODI versioning
Performing a Smart Export/Smart Import
Accessing an Excel spreadsheet
Impacting the data flow by changing the staging area location
Automating Smart Export/Smart Import with the ODI SDK

223
224
230
241
247
252
257

261
262
267

271
274
279
284
289
290
294
297
302
306
309
314
319

iii

www.it-ebooks.info


www.it-ebooks.info


Preface
After our collaboration on the ODI book Getting Started with Oracle Data Integrator 11g: A
Hands-on Tutorial, we thought that there might be a need for a more advanced book on the
same subject. So when Packt Publishing approached us to see if it would be possible to write
a Cookbook on ODI, we knew that we had the medium for this new adventure. Our objective
with this book was to avoid any repetition from the first book and to offer recipes that go
beyond what is readily available in the ODI documentation and on the Web. Hopefully, you
will agree that we have achieved our goal.


What this book covers
Chapter 1, Installation, Deployment, and Configuration, answers several deployment
questions that we have been asked by ODI users over time. A hands-on approach to these
topics allows the reader to learn the answers that we regularly give to our counterparts.
Chapter 2, Defining the Oracle Data Integrator Security, expands the descriptions available
in the ODI documentation with "how-to" examples by providing recipes to implement several
different aspects of ODI security.
Chapter 3, Advanced Topology, delves into Topology beyond the definition of servers and
schemas. These recipes will explore specific elements of Topology that are not typically
explored by the average ODI user: definition of new technologies and datatypes, use of
actions, and controlling case sensitivity.
Chapter 4, Using Variables, expands the use of variables by implementing them in ways not
often documented within the product, such as using variables in resource names and how
to best use variables as parameters.
Chapter 5, Knowledge Module Internals, will shed new light on what is possible with KMs,
explaining how substitution methods are processed by ODI and even experimenting with
Java code inside the KMs.

www.it-ebooks.info


Preface
Chapter 6, Inside Knowledge Modules – SCD and CDC, offers an opportunity to expand on
the concepts covered in the previous chapter by focusing on KMs that may not be well known
or well understood. We will also experiment with a few alterations of these KMs to provide an
even more hands-on experience.
Chapter 7, Advanced Coding Techniques, begins by looking into code generation that can
be performed directly from the models using diagrams. This chapter then explores specific
advanced topics such as temporary interfaces, embedded SQL queries, pivots, and partition

exchange loading.
Chapter 8, Package Loop and File Processing, was written because we noticed that too many
users limit their workflows by not knowing how to use them for more mature integration
techniques. The recipes in this chapter demonstrate some of the more sophisticated
integration techniques, including a focus on flat files processing that will help a developer
greater take advantage of ODI orchestration.
Chapter 9, XML and Web Services, discusses two areas of growing importance within ETL
processing: using XML files as input and using web services. Recipes will start with the basics
of the definition of an XML file and go all the way to invoking web services with callbacks.
Chapter 10, Advanced Coding Techniques Using the SDK, is rich in sample code that
automates tasks usually done with the graphical interface, including installation,
development, and execution monitoring.
Chapter 11, More with ODI, is a catch-all chapter that addresses questions we've often had
to answer, including misconceptions on how the product should be used, and little known
secrets that we didn't want to leave aside.

What you need for this book
Since Oracle is one of the leading database platforms, it has been used throughout this book
as the primary database technology. By using the DDL installation scripts available through
the publisher (see the following section, Downloading the example code), all of the required
source and target tables can be created and populated in two of the schemas referenced
throughout the book. Please note that should you choose to follow along using an alternative
technology and/or schema, you will most likely need to adjust the syntax and options
accordingly. The following scripts are available:
ff

CREATE_USER.sql: (creates the two cookbook demo user accounts)

ff


CREATE_SRC.sql: (creates the source tables)

ff

CREATE_TRG.sql: (creates the target tables)

ff

LOAD_SRC_SCHEMA.sql: (populates the source tables)

ff

LOAD_TRG_SCHEMA.sql: (populates the target tables)

2

www.it-ebooks.info


Preface
Some of the recipes within this book will also be referencing flat files, so it will be necessary to
establish a folder/directory within the reader's environment and to copy the available (*.txt)
files into this location. For example, create a directory location called C:\Temp and copy the
SRC_AGE_GROUP.txt and SRC_SALES_PERSON.txt files into that folder.
Once all the schemas have been created and the database schemas have been loaded, the
reader should start up ODI and perform the following preliminary tasks:
ff

On the Topology tab and within the File technology, create a physical data server,
physical schema, and logical schema for the DEMO_FILE schema. Note that the

physical location should be C:\TEMP.

ff

On the Topology tab and within the Oracle technology, create a physical data server,
physical schema, and logical schema for the DEMO_SRC schema.

ff

On the Topology tab and within the Oracle technology, create a physical data server,
physical schema, and logical schema for the DEMO_TRG schema.

ff

On the Designer tab, create a data model DEMO_FILE logical schema.
Import the SRC_AGE_GROUP data store using the available XML file.
Import the SRC_SALES_PERSON data store using the available XML file.

ff

On the Designer tab, create a data model and reverse engineer the DEMO_SRC
logical schema.

3

www.it-ebooks.info


Preface
ff


On the Designer tab, create a data model and reverse engineer the DEMO_TRG
logical schema.

Who this book is for
This book has been designed to present the reader with solutions to specific problems that
sometimes challenge even the most accomplished ODI developer. As such, it is not meant to
teach the fundamentals of the ODI product, but rather to extend the reader's understanding
of Oracle Data Integrator's capabilities. In order to expedite the presentation of the material
within this book, there is an assumption that the reader already has a basic understanding
of the ODI product and has ready access to a database. For those readers looking for an
introduction to ODI, we recommend the book Getting Started with Oracle Data Integrator
11g: A Hands-on Tutorial by Packt publishing.

Conventions
In this book, you will find a number of styles of text that distinguish between different kinds of
information. Here are some examples of these styles, and an explanation of their meaning.
Code words in text are shown as follows: "A default jps-config.xml file named odi-jpsconfig-jse.xml is delivered with the installation of ODI Studio and located within the
ODI_HOME\oracledi\client\odi\bin directory."
4

www.it-ebooks.info


Preface
A block of code is set as follows:

<description>LDAP-based IdentityStore Provider

description>
</serviceProvider>

Any command-line input or output is written as follows:
Map: oracle.odi.credmap
Key:ODI_AGENT
User_Name:CN=Admin
Password:weblogic1

New terms and important words are shown in bold. Words that you see on the screen, in
menus or dialog boxes for example, appear in the text like this: " Select File then New from
the menu ".
Warnings or important notes appear in a box like this.

Tips and tricks appear like this.

Reader feedback
Feedback from our readers is always welcome. Let us know what you think about this
book—what you liked or may have disliked. Reader feedback is important for us to develop
titles that you really get the most out of.
To send us general feedback, simply send an e-mail to , and
mention the book title via the subject of your message.
If there is a topic that you have expertise in and you are interested in either writing or
contributing to a book, see our author guide on www.packtpub.com/authors.

Customer support
Now that you are the proud owner of a Packt book, we have a number of things to help you to
get the most from your purchase.
5


www.it-ebooks.info


Preface

Downloading the example code
You can download the example code files for all Packt books you have purchased from your
account at . If you purchased this book elsewhere, you can
visit and register to have the files e-mailed directly
to you.

Errata
Although we have taken every care to ensure the accuracy of our content, mistakes do happen.
If you find a mistake in one of our books—maybe a mistake in the text or the code—we would be
grateful if you would report this to us. By doing so, you can save other readers from frustration
and help us improve subsequent versions of this book. If you find any errata, please report them
by visiting selecting your book, clicking on
the errata submission form link, and entering the details of your errata. Once your errata are
verified, your submission will be accepted and the errata will be uploaded on our website, or
added to any list of existing errata, under the Errata section of that title. Any existing errata can
be viewed by selecting your title from />
Piracy
Piracy of copyright material on the Internet is an ongoing problem across all media. At Packt,
we take the protection of our copyright and licenses very seriously. If you come across any
illegal copies of our works, in any form, on the Internet, please provide us with the location
address or website name immediately so that we can pursue a remedy.
Please contact us at with a link to the suspected pirated material.
We appreciate your help in protecting our authors, and our ability to bring you valuable content.

Questions

You can contact us at if you are having a problem with any
aspect of the book, and we will do our best to address it.

6

www.it-ebooks.info


×