Chapter 1 GETTING STARTED. SYS-ED/ Computer Education Techniques, Inc.

Similar documents
Chapter 2 FEATURES AND FACILITIES. SYS-ED/ Computer Education Techniques, Inc.

Oracle Fusion Middleware 11g: Build Applications with ADF I

Oracle Fusion Middleware 11g: Build Applications with ADF I

ORACLE JHEADSTART 10g for ADF

Oracle Developer Day

Chapter 1 GETTING STARTED. SYS-ED/ Computer Education Techniques, Inc.

Quick Web Development using JDeveloper 10g

J2EE Development. Course Detail: Audience. Duration. Course Abstract. Course Objectives. Course Topics. Class Format.

Vision of J2EE. Why J2EE? Need for. J2EE Suite. J2EE Based Distributed Application Architecture Overview. Umair Javed 1

Oracle Application Development Framework Overview

Oracle ADF: The technology behind project fusion. Lynn Munsinger Principal Product Manager Application Development Tools Oracle Corporation

Distributed Multitiered Application

<Insert Picture Here> Oracle Application Framework (OAF): Architecture, Personalization, and Extensibility in Oracle E-Business Suite Release 12

Oracle Fusion Middleware 11g: Build Applications with ADF Accel

If you wish to make an improved product, you must already be engaged in making an inferior one.

Introduction. Enterprise Java Instructor: Please introduce yourself Name Experience in Java Enterprise Edition Goals you hope to achieve

Oracle Applications OAF, MSCA, MA and ADF. May 06, 2011

Oracle 10g: Build J2EE Applications

Designing a Distributed System

ADF OAF Who Cares? You Do! Oracle Applications Framework / Application Development Framework - Which way do I go?

Oracle Middleware 12c: Build Rich Client Applications with ADF Ed 1 LVC

Java Enterprise Edition

Oracle Developer Day

Page 1. Oracle9i OLAP. Agenda. Mary Rehus Sales Consultant Patrick Larkin Vice President, Oracle Consulting. Oracle Corporation. Business Intelligence

Developing Applications with Java EE 6 on WebLogic Server 12c

CHAPTER. Introduction to the Oracle Application Development Framework

Appendix C WORKSHOP. SYS-ED/ Computer Education Techniques, Inc.

Developing Java TM 2 Platform, Enterprise Edition (J2EE TM ) Compatible Applications Roles-based Training for Rapid Implementation

Deccansoft Software Services. J2EE Syllabus

Implementing a Web Service p. 110 Implementing a Web Service Client p. 114 Summary p. 117 Introduction to Entity Beans p. 119 Persistence Concepts p.

Java EE 6: Develop Web Applications with JSF

Developing Applications with Business Intelligence Beans and Oracle9i JDeveloper: Our Experience. IOUG 2003 Paper 406

Analysis, Modeling, and Design (AMD) Tools Software Market Strategies, Market Opportunities, and Market Forecasts, 2001 to 2006

Java SE7 Fundamentals

Oracle - Developing Applications for the Java EE 7 Platform Ed 1 (Training On Demand)

Oracle Application Development Framework

index_ qxd 7/18/02 11:48 AM Page 259 Index

to-end Solution Using OWB and JDeveloper to Analyze Your Data Warehouse

Enterprise Java Unit 1-Chapter 2 Prof. Sujata Rizal Java EE 6 Architecture, Server and Containers

Oracle Developer Day

NetBeans IDE Field Guide

Application Servers in E-Commerce Applications

Rational Application Developer 7 Bootcamp

Fast Track Model Based Design and Development with Oracle9i Designer. An Oracle White Paper August 2002

X-S Framework Leveraging XML on Servlet Technology

CMP 436/774. Introduction to Java Enterprise Edition. Java Enterprise Edition

Appendix A - Glossary(of OO software term s)

Chapter 6 Enterprise Java Beans

Ch04 JavaServer Pages (JSP)

Outline. Project Goal. Overview of J2EE. J2EE Architecture. J2EE Container. San H. Aung 26 September, 2003

JAVA COURSES. Empowering Innovation. DN InfoTech Pvt. Ltd. H-151, Sector 63, Noida, UP

J2EE Interview Questions

IBM Rational Application Developer for WebSphere Software, Version 7.0

<Insert Picture Here> Oracle JHeadstart Forms2ADF - Overview

SUN Enterprise Development with iplanet Application Server

ORACLE JHEADSTART 11g for ADF

Building JavaServer Faces Applications

TOPLink for WebLogic. Whitepaper. The Challenge: The Solution:

IBM Workplace Collaboration Services API Toolkit

Topics. From UI prototype... About user interfaces. ... via design to implementation. Pearson Education 2005 Chapter 7 (Maciaszek - RASD 2/e) 6

Introduction to Web Application Development Using JEE, Frameworks, Web Services and AJAX

Tools to Develop New Linux Applications

Pearson Education 2005 Chapter 7 (Maciaszek - RASD 2/e) 2

Java EE 6: Develop Business Components with JMS & EJBs

Sun Java Studio Creator. Ken Paulsen Staff Engineer Sun Microsystems, Incorporated (Slides by: Craig R. McClanahan)

Oracle Developer Day

A General ecommerce Platform with Strong International and Local Aspects

Pearson Education 2007 Chapter 7 (RASD 3/e)

Bring the Java World and Web Services into Your Portal. An Oracle White Paper September 2005

Java J Course Outline

Chapter 2 WEBLOGIC SERVER DOMAINS. SYS-ED/ Computer Education Techniques, Inc.

Architect Exam Guide. OCM EE 6 Enterprise. (Exams IZO-807,1ZO-865 & IZO-866) Oracle Press ORACLG. Paul R* Allen and Joseph J.

BEAWebLogic. Portal. Overview

JBuilder. Getting Started Guide part II. Preface. Creating your Second Enterprise JavaBean. Container Managed Persistent Bean.

Java EE 7: Back-End Server Application Development

Oracle Forms Modernization Through Automated Migration. A Technical Overview

COURSE 9 DESIGN PATTERNS

Java EE Patterns 176

1Z Oracle. Java Enterprise Edition 5 Enterprise Architect Certified Master

Building the Enterprise

Oracle9i Application Server Architecture and Com

Anno Accademico Laboratorio di Tecnologie Web Introduzione ad Eclipse e Tomcat

WAS: WebSphere Appl Server Admin Rel 6

HYPERION SYSTEM 9 BI+ GETTING STARTED GUIDE APPLICATION BUILDER J2EE RELEASE 9.2

COURSE DETAILS: CORE AND ADVANCE JAVA Core Java

Introduction to JSP and Servlets Training 5-days

Peter Moskovits Principal Product Manager Oracle Corporation. Sue Vickers Group Manager Oracle Corporation

Oracle Fusion Middleware

IBM. IBM WebSphere Application Server Migration Toolkit. WebSphere Application Server. Version 9.0 Release

THIS IS ONLY SAMPLE RESUME - DO NOT COPY AND PASTE INTO YOUR RESUME. WE ARE NOT RESPONSIBLE Name: xxxxxx

Web Application Development Using JEE, Enterprise JavaBeans and JPA

MAKING THE BUSINESS CASE MOVING ORACLE FORMS TO THE WEB

Borland JBuilder 7 Product Certification. Study Guide

<Insert Picture Here> The Latest E-Business Suite R12.x OA Framework Rich User Interface Enhancements

CIS 764 Tutorial: Log-in Application

MVC. Peter Koletzke, Quovera. Figure 1. MVC layers

SUN Sun Certified Enterprise Architect for J2EE 5. Download Full Version :

Web Application Development Using JEE, Enterprise JavaBeans and JPA

Type of Classes Nested Classes Inner Classes Local and Anonymous Inner Classes

JBuilder. JBuilder 6 features and benefits. Developer productivity Support for the latest Java standards

Transcription:

Chapter 1 GETTING STARTED SYS-ED/ Computer Education Techniques, Inc.

Objectives You will learn: The IDE: Integrated Development Environment. MVC: Model-View-Controller Architecture. BC4J: Business Components for Java. Oracle 9iAS MVC Framework for J2EE UIX: User Interface XML JHeadstart. Application structure file. Application structure file attributes. BC4J custom properties. Domain definition file. Running the Application Generator. SYS-ED/COMPUTER EDUCATION TECHNIQUES, INC. (JDEVELOPER - 3.5) Ch 1: Page i

1 IDE: Integrated Development Environment Oracle provides a Java IDE: Integrated Development Environment and tools that support the development lifecycle: source control modeling coding through debugging, testing, profiling, and deploying. JDeveloper provides wizards, editors, visual design tools, and deployment tools for creating 2EE components including applets, JavaBeans, JavaServer Pages (JSP), servlets, and Enterprise JavaBeans (EJB). There also is a public Addin API for extending and customizing the development environment and integration with external products. 1.1 Oracle Application Server The Oracle application server is J2EE certified for testing and deploying applications. A variety of IDE s can be used in conjunction with the Oracle server; the preferred Oracle JDeveloper. Although the wizards and the modular platform simplify application development ; there are still a number of tasks that need to be performed in order to build a transactional application. Frameworks provide J2EE applications with underlying architecture to: Communicate with the database. Implement J2EE Design patterns. Design a good user interface. SYS-ED/COMPUTER EDUCATION TECHNIQUES, INC. (JDEVELOPER - 3.5) Ch 1: Page 1

1.2 Frameworks J2EE specifies a multi tier architecture that distinguishes between server side presentation logic -Web Tier and server side business logic - EJB Tier. For server-side presentation logic J2EE supports deployment of dynamic content, with both Java servlets API and JavaServer Pages (JSP) technology. The Java Servlets API provides developers with the capability for implementing server-side behaviors based upon the Java API. For server side business logic J2EE offers EJB technology; this provides developers with the ability to model objects useful in the enterprise by defining two distinct types of EJB components: Session Beans Entity Beans Represent behaviors associated with client sessions Represent collections of data and encapsulate operations on the data they represent. Entity Beans are intended to be persistent. J2EE extends the capabilities and portability of EJB components by defining an infrastructure that includes standard clients and service APIs for their use. SYS-ED/COMPUTER EDUCATION TECHNIQUES, INC. (JDEVELOPER - 3.5) Ch 1: Page 2

2 MVC: Model-View-Controller Architecture J2EE applications have been documented in Design patterns. Design patterns are collections of best practices for building J2EE applications. The MVC: Model-View-Controller pattern is a fundamental architecture which can be mapped to multi-tiered J2EE applications: J2EE Multi Tier Architecture Client Tier Web Tier EJB Tier Data Tier User Interface Server-side Presentation Logic Handle Events Maintain State Build Pages Business Logic Business Objects their Business Rules Data HTML/Java/ Applet Servlet/ JSP EJB Rdbms Directory Client Tier Mapping MVC Architecture to the J2EE Platform User Interface HTML/Java/ Applet Web Tier Server-side Presentation Logic Handle Events Maintain State Build Pages View Servlet/ JSP EJB Tier Business Logic Business Objects their Business Rules EJB Data Tier Data Persistence Business Objects (Tables) Rdbms Directory SYS-ED/COMPUTER EDUCATION TECHNIQUES, INC. (JDEVELOPER - 3.5) Ch 1: Page 3

All enterprise data and the business logic for processing the data can be represented in the MODEL. The VIEW can access the data through the model and decide on how to present them to the client. The VIEW must ensure that the presentation changes as and when the MODEL changes. The CONTROLLER can interact with the view and convert the client actions into actions that are understood and performed by the MODEL. The CONTROLLER also decides on the next view to be presented depending on the last client action and results of the corresponding MODEL action(s). An application is built by utilizing the logic of the model. 2.1 Building the Application The business logic of the application is represented by EJBs that form the MODEL of MVC architecture. The MODEL responds to requests from CONTROLLER to access / modify the data it represents. The various screens of the application form the VIEW of the MVC architecture. The VIEW updates itself when the MODEL changes. The CONTROLLER of the application is a set of objects that receive the user actions, convert them into requests understood by the model, and decide on the next screen to be displayed once the model completes the processing request. The major benefits of an MVC Architecture include: 2.2 MVC Architecture: Benefits Support for Multiple Client Devices; there can be different view rendering without changing the controller or model implementation. Replacement of an MVC component without re-writing the entire application. Prevents vendor lock in. Allows for the selection of the best solution for each MVC component. SYS-ED/COMPUTER EDUCATION TECHNIQUES, INC. (JDEVELOPER - 3.5) Ch 1: Page 4

3 BC4J: Business Components for Java BC4J: Business Components for Java provide a framework for implementation of the Model in an MVC architecture. Wizards are used by BC4J for implementing: optimized database interaction. business logic encapsulation. J2EE deployment. performance and scalability. UML Modeling JDeveloper's UML modeling tools can be used for developing business components: Object-Relational Mapping Business Logic Encapsulation J2EE Deployment Business components can be modeled and generated directly from database tables;. Component model can be completed by binding it to database tables; Database tables can be generated from a BC4J model. J2EE application development requires a set of objects that map to tables and object types in the database. BC4J can be used for created the objects. The generated components enforce the primary and foreign key constraints. Define validation and business rules in the middle tier. The business rules are enforced in any client that accesses the middle tier. It also allows data to be validated before it is posted to the database. BC4J application can be deployed in any of the standard J2EE deployment models: J 2EE Web Module, EJB Session Bean, CORBA Objects, or local deployment as a professional client. SYS-ED/COMPUTER EDUCATION TECHNIQUES, INC. (JDEVELOPER - 3.5) Ch 1: Page 5

4 Oracle MVC Framework for J2EE Oracle AS MVC Framework for J2EE implements the Controller in an MVC Architecture. MVC is a Java-based software foundation that can be used to develop e-business applications using UML models and declarative techniques to define the system. MVC Framework for J2EE extends the J2EE Design Patterns. Key features include: Declarative, XML-based implementation of Controller Integration with UML Activity Modeling Model and View abstraction The sequence of applications functions that need to be executed in response to a user action, the page/process flow, is defined declaratively in a Service XML file. Page/process flow can be modeled using a UML activity model and then the Controller Service XML file can be generated from this model. The MVC Framework Controller is independent of the Model or the View. This result is flexibility. The use of the Oracle AS Framework for J2EE in most Java development scenarios can help teams realize large gains in productivity. The Framework enforces the use of component-based development. Oracle AS MVC Framework for J2EE handles the low level coding, allowing developers to focus on custom processes and presentation logic. SYS-ED/COMPUTER EDUCATION TECHNIQUES, INC. (JDEVELOPER - 3.5) Ch 1: Page 6

5 UIX: User Interface XML UIX is a set of technologies that comprise a framework for building web applications. UIX is the user presentation layer of an application. It has been designed to create applications with page-based navigation. UIX includes a large set of UI components that implement the: Oracle BLAF: browser-based look-and-feel. Dynamic image generation. Dynamic CSS generation. XML language for page layout. Servlet-based application framework. 5.1 Oracle Browser Oracle developed the BLAF: Browser Look and Feel User Interface Guidelines. BLAF is a set of detailed standards to help designers, developers and product teams build HTML applications. BLAF serves to provide a consistent interaction model, and user experience across the suite of Oracle E- Business products. There are several reasons to use UIX: 5.2 UIX Benefits An open, flexible framework for development.; different UIX features are available for different development needs. Platform independent as a result of it being implemented in the Java programming language and other portable web technologies. Support for a wide range of client agents. Applications written to the UIX technology stack maintain a consistent appearance. UIX applications may be customized at multiple levels. Many aspects of the application can be changed independently, including page layout, styles, and imaging. UIX development can be declarative,. XML, an XML language, can be used for creating UIX pages and managing application flow. UIX can derive its page layouts, styles, and many other features from uixml documents. SYS-ED/COMPUTER EDUCATION TECHNIQUES, INC. (JDEVELOPER - 3.5) Ch 1: Page 7

The UIX architecture has been designed with localization and internationalization support. Performance has been designed into the framework, such as the caching and reuse of shared resources. UIX helps to reduce the amount of work needed to get an application running, tested, and customized. SYS-ED/COMPUTER EDUCATION TECHNIQUES, INC. (JDEVELOPER - 3.5) Ch 1: Page 8

6 JHeadstart Oracle JHeadstart is Oracle Consulting's rapid component based development approach/toolkit for building J2EE applications. JHeadstart: Provides fast, reliable, and repeatable development of complex transactional systems. Utilizes the Oracle J2EE frameworks to implement the Model-View-Controller (MVC) architecture. Declaratively specifies the application in XML files using property editors and the JHeadstart Application Generator, Generates a complete application into the frameworks. Provides the capability for developers to use Oracle Designer to generate or migrate Oracle Forms to, Java/HTML. Provides 4GL-like productivity without jeopardizing the flexibility and openness of the J2EE architecture. Is integrated in the Oracle9i JDeveloper IDE. 6.1 JHeadstart Runtime The JHeadstart runtime contains reusable components that extend the Oracle J2EE frameworks. The reusable components implement standard transactional functions: Retrieving, inserting, updating and deleting data. Scrolling and browsing of data sets. Querying of data sets. Multilingual message handling. Role-based security. The runtime components require that the Oracle9iAS MVC Framework and BC4J be used. SYS-ED/COMPUTER EDUCATION TECHNIQUES, INC. (JDEVELOPER - 3.5) Ch 1: Page 9

6.2 JAG: JHeadstart Application Generator JAG: The JHeadstart Application Generator automates the wiring of the runtime components and generates UIX pages. This will results in a complete application. The JAG is driven from XML meta-data which is created using JDeveloper (add-in) wizards and JHeadstart property editors. 6.3 JDG: JHeadstart Designer Generator JHeadstart offers a migration path from the Oracle Forms/Designer to the Java/J2EE world. The JHeadstart Designer Generator transforms the meta-data in the Oracle Designer Repository to the XML meta-data format required by the JHeadstart Application Generator. Designer Design Capture facilities can be used to load the information of the manually built Forms application into the repository. The JDG, followed by the JAG can then be used to migrate the forms application to a professional J2EE application that implements the MVC design pattern. SYS-ED/COMPUTER EDUCATION TECHNIQUES, INC. (JDEVELOPER - 3.5) Ch 1: Page 10

7 Application Structure File The JHeadstart Application Generator is driven by the Application Structure File. The Application File Structure is an XML file that defines the overall structure of the application: Data sources that should be displayed and modified. Layout styles that should be used to display and manipulate the data sources. Relationship between the data sources: master-detail or lookup. 7.1 Parsing Technologies The Application Generator parses this Application Structure file and generates an MVC application using the following technologies: Model View Controller Oracle BC4J: Business Components for Java; which is included in JDeveloper. Oracle User Interface XML UIX, which is included in JDeveloper. Oracle9iAS MVC Framework for J2EE; which is downloadable from OTN. In addition to the Application Structure File, the Application Generator uses the following inputs: Domain Definition File that contains the definitions of all static domains BC4J Entity Object XML files BC4J View Object XML files 7.2 Application Generator Output The Application Generator is capable of generating the folllowing types of output: MVC Framework Service XML file MVC Framework Providers file MVC Framework Datasources file MVC Framework BC4J Handler Implementations for each datasource UIX files for each displayed page and tab bar SYS-ED/COMPUTER EDUCATION TECHNIQUES, INC. (JDEVELOPER - 3.5) Ch 1: Page 11

8 Application Structure File Attributes The Application Structure File is a XML file with the following structure: <Service> <Group> <Lookup> </Lookup> </Group> </Service> 8.1 Service Attributes Each Application Structure File contains exactly one Service element, which corresponds to an MVC Framework Service. A service is subset of the application and includes a set of logically related functionality on which a user performs tasks that are logically linked together. The entire functionality will be displayed to the user on a number of tabbed pages accessed via a common tab bar. Attributes that contain references to file system directories or folders should use forward slashes in the path name and end with a forward slash. Both path and file name are case sensitive. Example: c:/myapplication/properties/ 8.2 Generation Switches There are several switches that can be used to 'turn off' the generation of particular components. Since this generator is designed for use in a prototyping environment, a given application may be generated multiple times. Each time an application is generated, the generator will overwrite existing files. However, after the first generation, many components may never require modification. Time of generation can be reduced by turning off the generation of those components. SYS-ED/COMPUTER EDUCATION TECHNIQUES, INC. (JDEVELOPER - 3.5) Ch 1: Page 12

9 BC4J Custom Properties The display characteristics of individual fields that map to BC4J View Object Attributes can be specified as custom properties against the attributes of the View Object and Entity Object. When a property is not set against the View Object attribute, the property of the underlying Entity Object attribute is used. In order to specify a custom attribute property against an EO or VO in JDeveloper, the JHeadstart Property Editor, or the built-in facilities of JDeveloper can be used. 9.1 JHeadstart Property Editor To install the JHeadstart Property Editor, the jar file should be placed in <JDeveloper Home>\jdev\lib\ext and JDeveloper should be started. In order to use the editor: 1. Right-click the EO or VO in the Structure Pane. 2. Choose JHeadstart Property Editor. A pop-up window will show a tree structure, representing the EO or VO with its attributes, on the left hand side and on the right hand side it will show a properties pane. The properties pane can be used to view and edit the JHeadstart custom properties. When a property is clicked, a description is shown below the properties pane. In order to add a property value to an attribute, click on the attribute in the left pane, look for the property in the right pane, and enter a value. Press Apply or OK to save the value. 9.2 JDeveloper Built-in Facilities for Custom Properties In order to use the built-in facilities of JDeveloper for adding custom properties: 1. Click on the EO or VO: a list of attributes appears in the structure pane. 2. Right-mouse-click on the attribute to be added as a custom property to, and choose "Edit <attribute name>...". If this option does not appear in the pop-up menu, the EO or VI is probably read-only. 3. Click on the Properties tab. SYS-ED/COMPUTER EDUCATION TECHNIQUES, INC. (JDEVELOPER - 3.5) Ch 1: Page 13

4. Enter the name of the custom property in the Name field. 5. Enter the value of the custom property in Value field. 6. Press the Add button. 7. Press the Finish button. SYS-ED/COMPUTER EDUCATION TECHNIQUES, INC. (JDEVELOPER - 3.5) Ch 1: Page 14

The domain definition file has the following structure: <DomainSet> <Domain> <AllowableValue> </AllowableValue> </Domain> </DomainSet> 10 Domain Definition File DomainSet has no attributes. Domain element has one attribute: name. Allowable Value has two attributes: value and meaning. Example: <DomainSet> <Domain name="yesno"> <AllowableValue value="y" meaning="yes"/> <AllowableValue value="n" meaning="no"/> </Domain> <Domain name="status"> <AllowableValue value="1" meaning="good"/> <AllowableValue value="2" meaning="reasonable"/> <AllowableValue value="3" meaning="bad"/> </Domain> </DomainSet> The allowable values of the ListValidator can be picked up by the UIX generator. However; the issue with the ListValidator is only values can be specified. Subsequently, in the user interface, only the actual allowable values can be displayed. The domain definition file can be used to specify a value as well as a meaning. The meaning will be used as display value in the drop-down list. The domain definition file ca be used to get a UI. The ListValidator can be used to get automatic validation of the allowable values in BC4J. SYS-ED/COMPUTER EDUCATION TECHNIQUES, INC. (JDEVELOPER - 3.5) Ch 1: Page 15

11 Running the Application Generator In order to run the Application Generator for a particular Application Structure File, the structure file must be included in the JDeveloper9i project. To run the application generator: 1. Right-click the Application Structure File in the System Navigator at the upper left pane in JDeveloper. 2. Choose 'Run JHeadstart Application Generator'. JBuilder Application Java classes need to be rebuilt only when the datasource handlers have changed. A handler is created for every Group datasource and Lookup datasource, if it does not exist yet. 11.1 Adding Groups to a Custom Service XML file The generator for the JHeadstart service can be used with an XML file that has not been 100% generated using the JHeadstart Application Generator: 1. Create an Application Structure File. 2. Set the name of the service to the name of the existing service XML file without the.xml extension. 3. Set Service attribute generatetabbar to false. 4. Add the new group to the Application Structure File. 5. Run the Application Generator. 6. Cut and paste the process group from the "AddTo" service xml file to the existing Service XML file. 7. In the existing Service XML file, go to the process called "ServiceRouter", which is located at the top of the file. In the service router process there is an argument that has a comma-delimted list of process groups. Add the new group to this list. For each group the service Router also has a transition defined. Add a group transition for the new group. SYS-ED/COMPUTER EDUCATION TECHNIQUES, INC. (JDEVELOPER - 3.5) Ch 1: Page 16

8. Manually add a new tab definition to the UIX Tab Bar file that holds the tabs of all existing groups. 9. Create dummy groups in the Application Structure File for each process group. 10. Set generateuix and generateservicegroup to false for that group. 11. Run the Application Generator. If the objective was to preserve post-generation changes to Service XML groups that were originally created by the Application Generator, the group's generateservicegroup switch can be set to false. SYS-ED/COMPUTER EDUCATION TECHNIQUES, INC. (JDEVELOPER - 3.5) Ch 1: Page 17