Home > Store

Programming Open Service Gateways with Java Embedded Server? Technology

Register your product to gain access to bonus material or receive a coupon.

Programming Open Service Gateways with Java Embedded Server? Technology


  • Sorry, this book is no longer in print.
Not for Sale


  • Copyright 2002
  • Dimensions: 7-3/8" x 9-1/4"
  • Pages: 480
  • Edition: 1st
  • Book
  • ISBN-10: 0-201-71102-8
  • ISBN-13: 978-0-201-71102-8

The Java Embedded Server™ from Sun Microsystems, Inc., is a solution for linking consumer devices with services over the Internet. It is based on the Open Services Gateway Initiative (OSGi) Service Gateway Specification 1.0. Written by authors who are intimately involved with the development and implementation of the specification, Programming Open Service Gateways with Java Embedded Server™ Technology reveals the concepts and inner workings of the Java Embedded Server framework and explains how to program and develop services for open gateways using the Java™ programming language.

With an emphasis on actual coding, this definitive guide begins by explaining the backdrop in which the residential gateway market emerged. Next, the book discusses the history and mission of the Java Embedded Server product and the OSGi consortium. Throughout the book, the Java Embedded Server technical architecture and the OSGi Service Gateway API are presented with examples and detailed implementations. The book's practical, how-to format shows you how to write code for residential gateway applications that is correct, robust, and efficient while avoiding common traps and pitfalls.

Highlights include:

  • Overview of OSGi architecture, including basic concepts and features
  • How to install Java Embedded Server and develop service bundles
  • Design patterns and pitfalls
  • How to use the OSGi standard services: log service and HTTP service
  • OSGi Device Access (DA) service
  • Permission-based security and administration
  • The future undertakings of the OSGi consortium
  • The OSGi Service Gateway Specification 1.0

Programming Open Service Gateways with Java Embedded Server™ Technology gives you an insider's perspective on the development process of new applications and services for the residential gateway environment.


Sample Content

Downloadable Sample Chapter

Click below for Sample Chapter related to this title:

Table of Contents



1. Introduction.

The Internet and the Networked Home.

The Service Gateway.


A Multitude of Competing Solutions.

A New Application Environment.

Java Embedded Server Technology.

The Open Services Gateway Initiative.

Operational Model.

2. Getting Started.

Setting Up the Java Embedded Server Software.

The "Home, Sweet Home" Bundle.

Create the Directory.

Define the Manifest.

Write an Activator.

Compile the Activator Class.

Pack Up.

Running the Bundle.

Getting Help.

The Cache Directory.

The Bundle Base URL.

Brief Summary of the Major Commands.

3. Architecture and Basic Concepts.





A Bundle Is a Packaging Vehicle.

A Bundle Is a Functional Module.

The "Hooks" to the Framework.

The Framework.

Cooperation among Bundles and Services.

Exporting and Importing Packages.

Registering and Obtaining Services.

Package versus Service Dependency.

Life within the Framework.

Installing a Bundle.

Starting the Bundle.

Importing Packages and Getting Services.

Handling the Dynamic Service Dependency.

Updating a Bundle.

Stopping and Uninstalling a Bundle.

The Component-based Model.


4. Developing Bundles.

Writing Service Bundles.

Design the Service Interface.

Implement the Service.

Register the Service in the Activator.

Define the Manifest Headers.

Create the Bundle.

Same Service Interface, Different Implementations.

Retrieving Resources from within the Bundle.

Obtaining and Calling Registered Services.

Interbundle Dependency and Class Loading Issues.

Service Use Count.

Compiling Client Bundles.

Service Factory.

Producing a Customized Service for Each Client Bundle.

Service Cache.

Customization for Getting and Releasing Service.

Relevant org.osgi.framework APIs.

BundleContext Interface.

ServiceReference Interface.

ServiceRegistration Interface.

Library Bundles.

Advanced Examples.

A Mailer.

A Line Printer Daemon Print Service.

Writing Bundles That Contain Native Code.

Common Mistakes.



Creating a JAR File.

5. Cooperation among Service Bundles.

Event Handling.

Bundle State and Service Registration.

Synchronous and Asynchronous Events.

Dealing with Service Unregistration.

Don't Start without the Service.

Discovering Stale Service.

Carrying On without the Service.

Picking an Alternative.

Cascading Service Registration.

Refusing Service.

Cooperation with Asynchronous Events.

6. Design Patterns and Pitfalls.

Designing the Service.

Separating Service Interface and Implementation.

Challenges in Designing a Service Interface.

Approaching an Interface Design.

The Social Aspect.

Designing Library Bundles.

Delegation and Callback.

Leveraging the Service Registry.


Preventing Runaway Threads.

Writing a Multithread Server Bundle.

Using a Thread Pool.

Managing Object Allocation.

Nullify References After Use.

Managing References among Bundles.

7. Standard Services.

The Log Service.

Using LogService to Write Logs.

Using LogReaderService to Get Logs.

Performing Persistent Logging.

The HTTP Service.

The Standard HttpService API.

Performing Basic Authentication.

The Extended HTTP Service.

8. Device Access.


The Software Stack in Device Access.

What Device Access Is Not.


Cast of Characters.

Device Service.

Driver Services.

Driver Locator.

Device Manager.

Writing DA Services.

The Base Driver.

Device Detection.

Device Refinement.

The Reconfiguration Process.

Putting It Together.

9. Permission-based Security and Administration.

Permission-based Security inside the Java 2 Platform.

Code Source.



Granting Permissions to Classes.

Security Manager.

OSGi Permissions.




Permission Required by the Framework APIs.

Enabling Security.

Setting Up a Policy.

Running with Security Enabled.

Using Permissions in Your Service.

Checking Permissions.

Performing Privileged Actions.

Creating Your Own Permission Types.


Resolving Bundles Dynamically.

Relevant APIs.

10. Future Directions.

Removing Phantom Bundles.

Dynamic Permissions.


User Administration.

Configuration Management.

What's Next.

Appendix A. Code Examples.

Chapter 4--Developing Bundles.

The LPD Print Service.

Chapter 8--Device Access.

Serial Service and Driver Locator.

Driver Service and Modem Service.

Web Interface to the Serial Ports.

Chapter 9--Permission-based Security and Administration.

Parameter Services.

Parameter Configuration Servlet.


Appenidix B. OSGi Service Gateway Specification.


































Index. 0201711028T08142001


Technology is invented and advanced by, well, technical people. However, a truly successful technology is marked by its adoption by people in their daily lives. Few ponder radio frequency modulation when they turn on the TV, or the internal combustion engine when they drive around. The technology has disappeared behind the utility.

The last decade saw two new technologies begin to blend into our lives: the computer and the Internet. We only need to launch a browser and the resources of the World Wide Web are at our fingertips, and we are hard pressed to tell the difference between a computer and a game console, a personal digital assistant (such as PalmPilot), or a cell phone. It is now entirely feasible to bring services to smart consumer devices at home and to small businesses through the Internet. Utility providers and network, computer, wireless, consumer electronics, and home appliance companies recognize the tremendous potential and have started to tap into this market. As a result, new horizons are open for application developers.

The Open Services Gateway Initiative (OSGi) was formed to explore these exciting opportunities, and its membership includes such diverse companies as Bell South, Echelon, Electricite de France, IBM, Sun, Ericsson, Nokia, Sony, Maytag, and Whirlpool, to name just a few from a roster of more than 80 organizations. With these combined resources, OSGi stands a good chance to turn this vision into reality.

The OSGi Service Gateway Specification 1.0 defines a Java™ technology-based software architecture for developing and deploying services, which is the topic of this book.

What compels us to write this book, in addition to our enthusiasm for the emerging new applications, is the unique software model involved. We stumbled through a lot of unfamiliar territory ourselves when we worked on the Java Embedded Server™ product, the predecessor to the OSGi Service Gateway Specification, only to find our fellow developers encountering and struggling with the same class of problems. It is our hope to be able to elucidate the model and capture the hard-won solutions in one place.

This book is primarily for programmers interested in writing services for residential gateways in the Java programming language. It should also be useful to anyone who wants to learn about residential gateway technology and the efforts made by the OSGi consortium.

This book may be of interest to those who are involved with component-based software construction in general. Interestingly, nothing in the underlying programming model limits the kinds of applications that can be written. It aims at residential gateway applications at the "small" end of the spectrum in terms of code size and resource consumption, but it is just as viable for developing applications for desktop and enterprise environments. Indeed, the task will be made easier and the end result will be more powerful when fewer constraints on computing resources are imposed.

We assume the readers are well versed in the Java programming language and experienced in software development on the Java platform. However, no experience is needed in embedded systems at the hardware and operating system levels.

Many trade-offs on the contents of the book had to be considered, and these were not easy decisions to make. We wrote this book with the following goals in mind:

  • Practical. This book is about programming service gateways and is primarily for programmers; therefore, a lot of its content is devoted to coding. The book does not dwell on the high-level vision, and it gets down to earth promptly. As a result, the material is best understood by practicing the examples near a computer. Reading it on a beach chair will almost surely ruin your vacation.
  • Software Only. We are primarily concerned with the software aspect of the residential gateway, and particularly with applications for the Java platform. We don't deal with hardware design and configuration or operating system and system software of the gateway in this book.
  • "Horizontal." One of the biggest challenges in developing examples for the book is to stay "horizontal" and relevant at the same time. By "horizontal" we mean you do not need to acquire highly specialized hardware and software to learn how to program a gateway. All the examples in this book can be built and run on a familiar personal computer or a workstation. We want to focus our effort on the generic mechanisms that apply to all service gateways with the OSGi architecture, rather than diverge into specifics of certain systems that are interesting to some readers but alien to others. For instance, as part of the Java Embedded Server project we have developed code to control a vending machine, a smart coffee maker, an NEC touch-panel golf score keeper, an Ericsson e-box, and an X10 lamp module. From first-hand experience we know that what we present is entirely within the realm of feasibility. However, the aforementioned applications are simply too complicated or have details that are too specialized to be good tutorials.
  • Realistic. We are not going to program a refrigerator, a washing machine, a microwave, a thermostat, or a toaster in this book. It is still not possible to go to Sears and buy a freezer that watches inventory and downloads e-coupons. Our smart espresso machine, for which we programmed a Web interface to monitor its water level and temperature and to control caffeine potency, uses proprietary commands and is not generally available. Many of the similar appliances we've seen are prototypes. This, however, is more an issue of business development than technological know-how. With the application development paradigm presented here, you should be able to develop applications for these smart appliances when they do roll down the production line en masse.
  • Focused Scope. The technologies applicable to residential gateway applications have mushroomed during the last few years. Each warrants a book of its own to treat the subject thoroughly. Therefore, we do not teach you BlueTooth, USB, or HomePNA here. We are confident that experts in these areas can readily plug implementations of these technologies into the OSGi framework after they have learned how it works and what benefits it brings.

Organization of the Book

You can read this book from cover to cover, or you can select the chapters that address your particular needs. For the impatient, it is possible to jump to Chapter 4 and try out the code in action, because clear step-by-step instructions are given. However, you are strongly encouraged to read Chapter 3, which puts things into context.

Chapter 1 describes the backdrop from which the residential gateway market emerged, and its propellants and challenges, then explains the history of the Java Embedded Server product and the OSGi consortium, and introduces our view of what OSGi is trying to achieve.

Chapter 2 outlines steps to develop your first bundle and familiarizes you with the Java Embedded Server execution environment.

Chapter 3 explains the OSGi architecture and basic concepts, including the interaction of various entities during interbundle class sharing, service registration and retrieval, and bundle life cycle operations.

Chapter 4 teaches you how to develop services, how to write library bundles, and how to include native code in your bundles. Two advanced examples are given in this chapter.

Chapter 5 analyzes the dynamic nature of cooperation with services, and proposes strategies to cope with the situation. Events are also discussed at the beginning of this chapter.

Chapter 6 describes design patterns and pitfalls.

Chapter 7 explains how to use the OSGi standard services: HTTP and Log services.

Chapter 8 explains the OSGi Device Access (DA) and how to develop services to communicate with devices using the DA.

Chapter 9 discusses permission-based security and administration.

Chapter 10 summarizes the issues being worked and our view of the future directions that the OSGi consortium could take.

Appendix A contains the complete source code of the examples in this book.

Appendix B is a copy of the OSGi specification. A list of references is included at the end of the book.

Online Resources

A copy of the Java Embedded Server product can be downloaded from Sun Microsystems' Web site at


For updated information about the book, visit the following URL:


Full details of the OSGi consortium can be found at http://www.osgi.org



Symbols& (AND), 76, 77
* (asterisk), 77, 78
: (colon), 106
, (comma), 252
. (dot), 84, 88
! (NOT), 76,77
/ (forward slash), 169
| (OR), 76, 77
Numbers 3Com, 25
10BaseT Ethernet, 4Aaccept method, 148, 150
AccessController class, 229
Actions, performing privileged, 238-245
Activator.java, 277-278, 283-284, 287, 296-297, 304, 309, 315-318
Activator(s). See also Bundle-Activator: header; BundleActivator interface
   basic description of, 31-32
   classes, 17-18, 109
   common mistakes related to, 105
   device access and, 201, 207-209
   nullifying references and, 156-157
   registering services in, 54-55
   service unregistration and, 120
   writing, 17
ACTIVE field, 337
ACTIVE state, 40, 262
addBundleListener method, 354
addFrameworkListener method, 355
addLogListener method, 432
addServiceListener method, 119, 355-356
Administration, permission-based. See also Administration, user
   APIs for, 261-264
   basic description of, 250-263
   code for, 297-319
   dynamic bundle resolution and, 251-252
Administration, user, 269. See also Administration, permission-based
admin.jar, 251, 253, 257
AdminPermission class, 227, 229, 237, 239, 331, 332-334
AdminPermission constructor, 333
AdminServlet.java, 305-309
ADSL (Asynchronous Digital Subscriber Line), 3
   device management and, 404-405
   resolution, 258
   security and, 229, 241, 258
   sorting, 140
   mapping, 169
   namespaces, 169-170
   parameters, 184
   registering, 171, 185
   syntax, 184-185
Allied Business Intelligence, 2-3
AllPermission class, 234
American Standard Code for Information Interchange (ASCII). See also
ASCII (American Standard Code for Information Interchange)
America Online (AOL), 25
ampersand (&), 77
APIs (application program interfaces). See also Interfaces
   Java Communications API, 187, 198-201, 205
   JavaMail API, 86-89, 137
   Java Servlet API, 170-171
   permissions required by, 230-231
Apple Computer, 195
   environment, new, 8-9
   logic, 120, 146
ASCII (American Standard Code for Information Interchange), 91
Assembly language, 189
Asterisk (*), 77, 78
Asynchronous Digital Subscriber Line (ADSL). See also ADSL (Asynchronous
Digital Subscriber Line)
AT command, 213
attach method, 208, 212, 408-409
Auditing, 165
Authentication. See also Security
   basic, 178-184
   HTTP, 178-184
   performing, 181-184
   user administration and, 269
Authorization, 269. See also Authentication; SecurityBBase
   drivers, 193-194, 198-200
   URLs, 22
BasicPermission class, 229-231, 248
BasicSchemeHandler service, 178, 182-184
Bierce, Ambrose, 53
BlueTooth, 6, 7, 189
   device access and, 218-220
   preferences, storing/retrieving, 268-269
   registering images and, 172-176
   security and, 238-245
Buffer size, 167
   basic description of, 16-18, 28-32, 325-326
   calling, 37, 61, 73
   commands for, 20-21, 22-23
   common mistakes related to, 105-106
   configuring, 269
   that contain native code, 96-105
   context, 33, 73
   cooperation among, 33-39, 107-129
   developing, 51-106, 271-278
   framework for, 32-33, 39-45
   help for, 20-21
   IDs, 19, 39, 262
   installing, 19-20, 39, 363-365
   JavaMail API and, 86-89
   life cycles of, 29-30, 32, 47, 146
   locations, 22, 44, 262
   the line printer daemon print service and, 89-95
   managing references among, 157-160
   multithread, 148-152
   permission-based administration and, 251-252
   phantom, 265-267
   removing, 265-267
   resolution of, 34, 251-252
   retrieving resources from within, 60-61
   running, 19-23
   service-providing, 37, 61, 66
   starting/stopping, 40, 45, 326, 343-345, 351
   state, 111
   transitive closure of, 251
   uninstalling, 45, 155, 158
   updating, 42-45
   writing, 51-56, 96-105
Bundle activator(s). See also Bundle-Activator: header; BundleActivator interface
   basic description of, 31-32
   classes, 17-18, 109
   common mistakes related to, 105
   device access and, 201, 207-209
   nullifying references and, 156-157
   registering services in, 54-55
   service unregistration and, 120
   writing, 17
Bundle-Activator: header, 105, 148, 326
BundleActivator interface, 17, 41
   basic description of, 330, 350-351
   starting/stopping bundles and, 326
bundleChanged method, 375
Bundle-ClassPath: header, 84, 85, 88, 327
Bundle-ContactAddress: header, 261, 327
BundleContext interface, 40, 55, 62-63, 70, 73-80, 145, 218, 231, 263-264
   basic description of, 330, 352-358
   methods, 354-358
   service registry and, 143
Bundle-Description: header, 261, 327
Bundle-DocURL: header, 261, 327
BundleEvent event, 107, 128-129
BundleEvent class, 331, 369-372
BundleEvent constructor, 371
BundleException constructor, 374
BundleException interface, 373-374
BundleException exception, 331
Bundle interface, 231, 252, 261-263, 330, 335-349
BundleListener interface, 128-129, 330, 375
Bundle-Name: header, 261, 326
Bundle-NativeCode: header, 96, 97, 99, 329
bundles command, 20, 23, 56
Bundle-UpdatedLocation: header, 43, 327
Bundle-Vendor: header, 261, 326
Bundle-Version: header, 261, 326CC programming (high-level language), 10, 102, 105, 189
Cable modems. See also Modems
   data rates for, 6
   transforming, into residential gateways, 9
   usage statistics for, 2
Cable Television Laboratories, 6
cache directory, 21
Caching, 21, 69, 158
Cahners In-Stat, 2-3
Callback, 140-143, 159, 244
Cascading service registration, 123-125
CEBus, 2, 6, 7
Certificate(s). See also Security
   authorities, 226
   public keys in, 226
   self-signed, 243
CGI (Common Gateway Interface), 168
changeConfiguration method, 218
checkPermission method, 245, 246
Class(s). See also Classes (listed by name)
   compiling, 17-18
   encapsulation of, 228
   granting permissions to, 228
   inheritance, 228
   instantiation, 229
   loading issues, 64-65
   names, fully qualified, 64
   origin of, 226


Submit Errata

More Information

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information

To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.


Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.


If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information

Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.


This site is not directed to children under the age of 13.


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information

If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information

Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents

California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure

Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact

Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice

We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020