Web Development with TIBCO General Interface: Building AJAX Clients for Enterprise SOA (Developer's Library Series)

Multimedia Set (Print)
Used and New from Other Sellers
Used and New from Other Sellers
from $1.99
Usually ships in 1-2 business days
(Save 95%)
Other sellers (Multimedia Set)
  • All (4) from $1.99   
  • Used (4) from $1.99   

Overview

Web Development with TIBCO General Interface

Building AJAX Clients for Enterprise SOA

Anil Gurnani

Use TIBCO General Interface to build web applications with state-of-the-art performance and usability

TIBCO General Interface provides powerful tools and a framework to craft AJAX-based web applications that rival desktop applications in performance and usability. This is the only book that offers developers thorough guidance for using TIBCO’s award-winning open source tools to build interactive, high-performance GUIs and integrate them with leading server-side technologies. Experienced TIBCO General Interface developer Anil Gurnani focuses on applying General Interface in real-world production applications and presents numerous working examples that can easily be adapted for your existing sites and applications.

You’ll first walk through the fundamental concepts and techniques needed to build powerful General Interface clients. Next, you’ll dive into specific back-end technologies, mastering them through start-to-finish case study projects. Finally, drawing on his own experience building enterprise-class General Interface applications for the financial services industry, Gurnani illuminates advanced topics ranging from charting and collaboration

to application optimization. Coverage includes

  • Integrating XML and XSL with TIBCO General Interface’s XML Mapping utility
  • Extending General Interface widgets with object-oriented JavaScript
  • Integrating with web services, databases, portals, and messaging systems: start-to-finish case study sample applications
  • Integrating General Interface applications into service-oriented enterprises using Enterprise Service Bus (ESB)
  • Using OpenAJAX Hub (TIBCO PageBus) to simplify collaboration among GUI components

Anil Gurnani’s book greatly augments the available information for developers learning and using TIBCO’s General Interface. …With this book, you will quickly be building General Interface applications, faster and easier than ever before.

—Michael Peachey, co-founder of General Interface and Director of User Experience, TIBCO Software

Anil Gurnani has written extensively on technical topics for many prestigious magazines. He is an adjunct at SCPS, New York University, where he teaches advanced courses focused on web and enterprise technologies including Core Java, JEE, and .NET. He is also an expert at managing large, global, multifunctional teams to architect and build complex distributed systems with a portfolio of front-end applications and back-end services.

About the CD-ROM The accompanying CD-ROM contains all source code files for working examples. Updated code and additional resources are available on a companion website.

Web Development/Ajax

Read More Show Less

Product Details

  • ISBN-13: 9780321563293
  • Publisher: Addison-Wesley
  • Publication date: 2/19/2009
  • Series: Developer's Library Series
  • Edition description: Book and CD
  • Pages: 359
  • Product dimensions: 6.90 (w) x 8.90 (h) x 0.90 (d)

Meet the Author

Anil Gurnani has written extensively for prestigious computer magazines and online forums on various topics including web development, enterprise portals, building financial systems with J2EE, Allaire ColdFusion, payment systems using CyberCash, multiprocessing technology, and artifical intelligence. He has more than 20 years of experience in the area of software development and has been working with web technologies for many years. Anil runs his enterprise software company CNI Systems (http://www.cnisystems.com), and is also an adjunct at New York University, where he teaches advanced courses focused on web and enterprise technologies including Core Java, JEE, and .NET.

Anil is an expert at managing large, global, multifunctional teams to architect and build complex distributed systems with a portfolio of front-end applications and backend services. He recently built a complex system for managing trades and settlement exceptions using TIBCO General Interface, Java Portal, and Web Services technologies for a major global bank.This application is one of the most successful implementations of TIBCO General Interface in the enterprise.

Read More Show Less

Table of Contents

Foreword by Michael Peachey

Foreword by Luke Birdeau

Introduction

Chapter 1 What Is TIBCO General Interface?

Tools and Utilities

Web Application Model

TIBCO General Interface Application

General Interface’s Performance Edge

Compiler in the Browser

Rapid Prototyping Tool

Chapter 2 Understanding General Interface Architecture

Model View Controller Architecture

General Interface Application Life Cycle

Application Object Model

Common Data Format

JavaScript Framework

JavaScript API

Commonly Used Classes

Application Controller

Cache

Custom Classes in JavaScript for General Interface

XSL Style Sheets

Value Templates

XML Transformers

Chapter 3 Quick Start TIBCO General Interface

Building and Packaging Standalone Prototypes

Installing TIBCO General Interface

Launching GI Builder

Internet Explorer 7 on Windows

Mozilla Firefox on Windows

Mozilla Firefox on Macintosh

GI Workspace

Building the Application

Deploying General Interface Applications

Deploying the Application as a Standalone Prototype

Deploying the Application Under IIS

Deploying the Application Under Apache Web Server

Deploying the Application Under Tomcat

Deploying the Application as a WAR File Under Tomcat

Chapter 4 Working with XML and XSL

XML Transformers

XML/XSL Merge Tool

XML Mapping Utility

Chapter 5 Component Gallery

Component Categories

System Components

Block

Containers

Form Elements

Matrix

Menus and Toolbars

Miscellaneous

Component Properties

Chapter 6 Sharing Assets Across Multiple Applications

Advantages of Sharing Components

Shared Components in General Interface

Building Shared Components with GI Builder

Sample Applications

Building the Announcements Panel

Building the Customer Service Panel

Building the Ad Banner

Building the Custom Tabbed Pane

Editing Component XML Files

Building the Banking Application

Building the Investing Application

Chapter 7 Object-Oriented JavaScript—Extending General Interface Widgets

Prototype Inheritance

Defining Classes in General Interface

Defining Interfaces in General Interface

Defining Packages in General Interface

General Interface Event Model

Best Practices

Directory Structure

JavaScript Files

Dynamic Class Loading

Application-Level Events

Sample Code

MultiSelectMenu

Building a Sample Using MultiSelectMenu

Chapter 8 Advanced Features of Matrix

Rendering Tabular Data

Rendering a Tree Structure

Using XML Transformers

Using Value Templates

Using Format Handlers

Displaying Controls in Columns

Available Controls in Matrix Columns

Manipulating Data Dynamically

Commonly Used Methods of the Matrix Class

Sample Applications

Chapter 9 Integrating with Web Services

Web Services Related Standards

General Interface and Web Services

Building a Web Service

Using Java

Using .NET

Deploying a Web Service

Deploying Under Axis2 in Tomcat

Deploying Under IIS

Developing a Web Service Client Using General Interface

Building GUI Screens for the Sample General Interface Client

Mapping the Response to CDF Document

Mapping Input Fields to Request Messages

Chapter 10 Integrating with Portals

Anatomy of a Portal

Portal Value Proposition

Aggregation of Content from Various Applications and Sources

Federated Search Across All Data Sources

Entitlements

Private Labeling and Branding

Personalization

Common Infrastructure

Global Reach

High Availability

Support, Operations, and Monitoring

Architectural Considerations

Use of General Interface Framework

GI Cache Utilization

Namespaces

Entering and Leaving the Page

Minimizing Asynchronous Calls

Versions of General Interface

Using

Read More Show Less

Preface

Introduction

The primary focus of this book is an award-winning product—TIBCO General Interface. Because TIBCO provides excellent documents and tutorials on building client applications using TIBCO General Interface, much of this book focuses on how to integrate those client applications to various back-end technologies. The first part of the book discusses the basics of building General Interface clients. The second part dives into specific back-end technologies and provides complete end-to-end examples with each major server-side technology. For example, Chapter 12, “Integrating with Messaging Systems,” includes complete details about how to set up a message queue, send messages to it, and build a simple middle-tier application using the CometProcessor interface that receives messages. It also includes how to use TIBCO General Interface to build an AJAX client that receives those messages asynchronously and displays them in the browser. The third part discusses advanced topics such as optimizing performance of General Interface–based client applications.

This introduction provides an overview of tools and technologies available today to build browser-based client-side applications. Then it takes a closer look at TIBCO General Interface and discusses its unique advantages. Finally, it provides a list of all the sample applications that are included in this book and on the companion CD-ROM.

The Web 2.0 Wave

The Internet has changed much more than the way business was done. It changed the way we live. The World Wide Web was a major 10X force for many businesses in the early to middle ’90s. Business and technology changed very rapidly. Many brick-and-mortar businesses could not survive the tsunami of the Internet wave and were replaced by Internet-based businesses. Traditional technology giants like Microsoft were threatened by new entrants like Netscape. Internet startups were springing up everywhere like weeds. New standards and technologies evolved that dramatically changed the application development landscape from client-server tools like PowerBuilder to web-building tools like Dreamweaver and FrontPage.

New standards are evolving yet again to redefine the World Wide Web. Web 2.0 has taken shape as the next tsunami to hit the Internet world. This one is many times the size of the first wave. The power of the individual is recognized everywhere now. Time magazine’s 2006 person of the year was “you.” Whereas the traditional media model was one to many—for example, newspapers, television, and radio—Web 2.0 offers many-to-many communication with blogs and Wikis that allow anyone anywhere to reach out to a number of people. Sites like YouTube, MySpace, Facebook, and Digg have become the favorite destinations of many. People are now connected even more by instant messaging, live meetings, and desktop sharing.

The music and publishing industries have also been transformed. Napster introduced the concept of Peer to Peer (P2P) computing and threatened to take the power from big record companies. Music albums and songs are released for digital downloads now instead of being sold in stores. Sales of digital books have been rising, and sites such as Safari Digital Bookshelf (http://www.safaribooksonline.com/) are giving readers an alternative to printed books. Modern eBook readers are introducing a new concept in how books and the news are delivered and consumed.

Zoho, ThinkFree, and Google are threatening the software giant Microsoft’s dominance in the office applications market by providing office tools online for little or no licensing cost. Software as a service has now become a reality. Most common software applications such as accounting, time management, project management, and many others are available online for anyone to use and pay per use.

Client-Side Technologies

Technologies such as AJAX, Flex, and web services are commonly used by developers to create Web 2.0 applications. New standards such as WSRP, Portlet (JSR168), WS (Web Services), and JEE5 are again changing the application development landscape. Applications or services that are built using these standards can collaborate much more effectively and easily.

Rich Internet applications use the Internet as the platform and are capable of running inside any browser, regardless of what machine or platform it is running on. TIBCO General Interface helps build such rich Internet applications for Web 2.0, and it does so remarkably well. Its unique model and approach to design gives it an enormous performance edge that is hard to beat today and will continue to remain difficult to surpass.

AJAX is the underlying technology for several new frameworks that have appeared in the marketplace. Simply put, AJAX is no different from an HTTP request from the browser to the web server, except that in reply to an AJAX call, a server does not have to return the complete HTML for the entire browser page. Instead, response to an AJAX call can be a fragment of HTML or merely data that the caller can then embed into the browser page. JavaScript code embedded in an HTML page can make an AJAX call and can update a small part of the browser window from the response. A typical application for this type of AJAX call is a table displaying the stock price of several securities at once, which is updated automatically in place as the price changes.

Although it is possible to build such user interfaces by making individual AJAX calls, it can be very time consuming, and the resulting code can become quite difficult to maintain. Several frameworks based on AJAX have evolved in the past several years to address this issue. Following is not a comprehensive but a brief overview of some tools and technologies similar to TIBCO General Interface and how their targets and uses differ from those of TIBCO General Interface.

Google Web Toolkit

Google Web Toolkit (GWT) (http://code.google.com/webtoolkit/) is a framework that allows developers to write GUI code in Java and then use a compiler to convert their Java code into JavaScript code that runs in the browser. It comes as a set of Java libraries with some ready-to-use widgets that can be used to build GUI applications in Java. GWT allows developers to build AJAX applications using Java with embedded JavaScript code in some cases.

GWT is in the open-source domain, available with source code under the Apache 2.0 license. Google uses it on its own website in its popular email web interface of Gmail and other Google websites such as Google Docs.

Using GWT, developers can write Serializable Java objects to communicate with server-side Java components. These Serializable classes are converted appropriately to communicate with the server-side components using AJAX calls. GWT is a great tool for server-side web developers who are comfortable with Java IDEs like Eclipse, NetBeans, or IDEA, or any other Java development IDE. However, it has little to offer a front-end developer who is very adept at JavaScript and knows CSS and browser DOM very well.

Google Mail and Google Maps are both built using GWT and are excellent examples of AJAX-enabled web applications. Because of the Java backbone, GWT supports a number of features, including the capability to do debugging in the IDE, integration with JUnit for unit testing, internationalization, and others. JavaScript as a language is not 100% compatible across all browsers; therefore, a developer must include code to detect the type of browser and the appropriate code for each. However, GWT compiler generates browser-agnostic JavaScript; therefore, code that is generated by GWT compiler works in all major browsers, including IE, Firefox, Mozilla, Safari, and Opera, without any special effort on the part of the developer.

A GWT developer must be thoroughly familiar with the Java programming model, as well as know enough JavaScript and CSS to be able to embed them directly as needed. It supports an event model that is similar to that of Java Swing. On the client side, GWT relies solely on JavaScript for both rendering as well as for performing AJAX interactions with the back end.

A JRE Emulation library includes a number of Java classes that can be converted by GWT into JavaScript to run in the browser. It includes JavaScript Native Interface (JSNI), which allows developers to embed handwritten JavaScript code in the Java code to access browser functionality. It also includes integration with JUnit with a base test class GWTTestCase, which can be used to build unit tests automated regression testing.

Also included in GWT is a mechanism to pass Java objects to and from server-side components over HTTP using AJAX calls—known as Remote Procedure Calls—which is implemented as a collection of Java interfaces and classes. Developers can use it in the GUI code to communicate with the back-end server-side components as needed. TIBCO General Interface, on the other hand, allows developers to directly consume the output of a web services call, pass it through an XSLT style sheet, and display it in a Grid Control on the web page. TIBCO General Interface programs are built using the technologies that web developers are already very familiar with: JavaScript, XML/XSL, CSS, and DHTML. This makes it easy for web GUI developers to learn and use General Interface.

Adobe Flex

Adobe’s Flash player is the most popular browser plug-in available for most browsers on most platforms. It is almost an integral part of all web browsers and has an installed base that is almost equal to that of Internet browsers. Initial versions of Flash used a downloadable file that could be played back similar to media files like audio or video. Adobe has since extended that model to include streaming media and a number of controls and widgets that can be used to program dynamic web applications with a rich user experience. Although the primary target of Adobe Flex is media-rich applications such as games and videos, it is possible to build applications using the Adobe Flex framework that run inside the browser using the Flash player software.

The latest version of Flex is Flex 2, which is available from Adobe to build applications for Flash. Adobe’s model allows users of Flash Player software to download it for free; however, technologies and tools required to “build” on that platform are not free.

Adobe’s Flex technology includes a Flex Builder, which is based on the popular Java IDE Eclipse. If you already use Eclipse, Adobe provides a plug-in that can be downloaded and installed to use with Eclipse. To build applications, developers use the IDE to create a Macromedia XML (MXML) file that defines the screen canvas and the controls and widgets in it. The MXML format is XML constrained by tags defined by Adobe. Because Flex was originally developed by Macromedia, hence the name—MXML.

Component gallery in Flex 2 Builder includes a number of ready-to-use controls and components such as widgets. Visual components like Button, CheckBox, ComboBox, DataGrid, DateChooser, and others can be combined with Navigators like Accordion, Menubar, and TabBar in layouts including Panel. Tiles can be dragged and dropped onto the Canvas to build the GUI for the application. Flex 2 also includes various Chart components to create charts for the web.

Flex 2 Builder supports “source code” and “design view” similar to tools like Dreamweaver. In the source code view, developers can manually insert components by typing the corresponding MXML tags that define the controls. In the design view, developers are able to drag and drop components onto the canvas and set the appropriate properties in the Property Sheets on the right. Program coding is done in Macromedia’s Action Script files, which can contain logic to update screen components. To prepare the application to run in the browser, you must “build” it into a “swf” file, which is Adobe’s proprietary format for files that are run by the Flash player plug-in in the browser.

Although Adobe Flex follows a very similar concept as TIBCO General Interface, its primary target is media-rich applications that require animation and need to have embedded movies or video content in them. Running a TIBCO General Interface does not require any plug-in software, whereas Flex applications will not run without the Flash plug-in.

Dojo

Dojo is an open source framework. Its design is very similar to that of TIBCO General Interface. It comprises classes and programs written completely in JavaScript.

Dojo’s widget library, Dijit, is the collection of GUI controls including accordions, combo boxes, date picker, and more. These controls are template driven and highly extensible so that developers can build their own widgets using Dojo. DojoX extends this widget library further and adds Grid and Chart components to the Dojo Framework.

JavaScript code in Dojo uses a prototype model of JavaScript to provide an object-oriented foundation to build other JavaScript code. Similar to General Interface, all JavaScript for Dojo applications is written manually in JavaScript using a library of numerous built-in JavaScript functions and modules. However, Dojo lacks a design-time builder tool like GI Builder, and it does not make heavy use of XML/XSL like General Interface does.

Dojo is available under the Academic Free License, which is extremely liberal and allows commercial distribution and sublicensing of the software for works derived from Dojo. Dojo can also be used under the BSD License, which is also quite liberal and does not impose any restrictions on use and distribution of the software. Dojo’s intellectual property rights are owned by Dojo Foundation, which is a nonprofit organization created to distribute the Dojo code in a vendor-neutral way.

Direct Web Remoting

Direct Web Remoting (DWR) provides the basic interfaces and mechanisms for communicating using HTTP from JavaScript directly to the back-end classes written in Java. It’s a small framework that consists of a Java Servlet that runs on the server under any Servlet container such as Tomcat or WebLogic and a set of JavaScript functions that are used to make calls to Java Objects on the server using AJAX. DWR handles the marshaling of the parameters and return values back to JavaScript callers. It is available under Apache Software License.

DWR complements TIBCO General Interface very nicely and provides a framework for TIBCO General Interface classes and widgets to make direct calls to custom Java components on the server side. General Interface provides the framework and base classes, and DWR provides the marshaling and unmarshaling to make it easy to develop applications that need to communicate back and forth between browser and server. This can enhance the already rich library of GUI widgets that TIBCO General Interface has.

Backbase

Backbase Enterprise AJAX is the closest to TIBCO General Interface in design and concept. It includes more than 200 ready-to-use widgets that use AJAX and can be used in web applications. Backbase developers build application code in JavaScript and can use XML APIs as well as JavaScript utility functions provided by Backbase libraries.

Development tools for Backbase are based on Eclipse and offer many capabilities similar to those offered by TIBCO General Interface. It includes a JavaScript-based runtime component that runs in the browser similar to the one included with TIBCO General Interface. It includes a set of foundation classes in JavaScript and a layer of abstraction that is also similar to the JavaScript APIs offered by TIBCO General Interface. Backbase’s UI Management layer includes various services such as Visualization Services (animation, themes, skins), Data Services (Formatting, Validation, Transformation), Communication Services (XML, JSON, SOAP, Portal), and others. At the top of these layers is a collection of widgets and the capability to create custom widgets.

Backbase provides early access to a custom Integrated Development Environment (IDE) similar to TIBCO GI Builder for building Enterprise AJAX applications using Backbase.

Laszlo

Laszlo is a relatively new entrant in the market of rich Internet application tools compared to the others listed previously. OpenLaszlo 4 was released in 2006 as an abstraction layer over multiple runtime formats. Applications created with OpenLaszlo 4 can be translated into Flash or into DHTML (mostly a combination of JavaScript, CSS, and HTML) so they can run in any browser with or without the Flash plug-in. OpenLaszlo is also an open source project with the ambitious goal of providing translations into many target platforms, including Flash 9, Java ME, Firefox, and other browsers. Laszlo distribution includes J2EE Servlets that serve as the back end for OpenLaszlo front-end JavaScript code. Its client-side components, built with OpenLaszlo, communicate with its back end server-side components, which in turn execute custom Java components in an architecture that is very similar to that of DWR, or Direct Web Remoting.

OpenLaszlo does not include a visual IDE to build applications. Developers must build applications by coding the main.lzx file with XML syntax to include components that are predefined by the OpenLaszlo framework. The server component then interacts with the user and supplies the appropriate runtime to the user depending on the client browser.

Miscellaneous Toolkits

Proliferation of AJAX frameworks and toolkits in the last few years points to the importance of AJAX technology in shaping the future of the Web. Among other similar frameworks are

  • Atlas—A free framework for building AJAX-enabled .NET applications
  • Prototype—A framework for building object-oriented JavaScript code that includes a library of AJAX and other JavaScript functions that can be used in web applications
  • CGI::Ajax—A Perl module that can be used to generate JavaScript to call a CGI written in Perl
  • ZK—A collection of widgets that can work with a variety of back-end technologies including Java and Ruby
  • AjaxAC—A framework written in PHP to create AJAX-enabled web applications

There are many more. TIBCO’s General Interface is one of the earliest entrants in the AJAX world since 2001. Backbase started in 2003, and most others started afterward. The rest of this book is focused on TIBCO General Interface.

Overview of Sample Applications

This book explores various features and aspects of TIBCO General Interface and provides examples of how to build fully integrated rich Internet applications using TIBCO General Interface tools. Following is an overview of the sample applications that are available on the companion CD-ROM and are discussed in the following chapters:

Chapter 3:

dow30 client application: A simple General Interface application that displays the 30 component stocks of the Dow Jones Index.
dow30 war file project: A complete project for deploying General Interface applications under Tomcat.

Chapter 4:

dow30 client application: The dow30 application from Chapter 3 built using XML Mapping Utility.
dow30 client application: The dow30 application from Chapter 3 built using XML Transformers.

Chapter 5:

GI Component Gallery: Simple General Interface application showing built-in General Interface components and widgets.
GI Menus and Toolbars: Simple General Interface application to demonstrate menus and toolbars and other useful General Interface elements.

Chapter 6:

Online Banking example: A simple General Interface application showing menus and some sample content for a retail banking application.
Online Investing example: A simple General Interface application showing menus and some sample content for a retail online investment management site.

Chapter 7:

Multi Select Menu example: A simple General Interface application using a custom menu component. The application also demonstrates the powerful event mechanism available with General Interface.

Chapter 8:

Oilconsumption example: A General Interface application that shows world oil consumption for the past several decades. This application demonstrates the use of value templates to control the styles in the Matrix component in General Interface.
Watchlist example: A General Interface application that demonstrates how to dynamically update the contents of a Matrix cell in General Interface.

Chapter 9:

MiTunes Service in .NET: A .NET web service built in Visual Studio 2005 that returns a list of songs.
MiTunes Service in Java: A Java web service built using Apache Axis 2 that returns a list of songs.
MiTunes client application in General Interface: A General Interface application that communicates with the web service to retrieve and display a list of songs.

Chapter 10:

GI Portlets Page: A JBoss portal application consisting of two JSR 168 portlets, each of which has a General Interface application embedded in it, and both portlets are embedded into a single Portal page.

Chapter 11:

GISQL in .NET: A .NET database application that returns Customer Orders and Order Details from the Adventure Works database on SQL Server 2005.
GISQL in Java: A Java database application that returns Customer Orders and Order Details from the Adventure Works database on SQL Server 2005.
Master Detail example: A complete application including General Interface and the Java components to display orders and details from the Adventure Works database using SQL Server 2005.
Paginated Grid example: A complete application that uses server-side pagination to display a list of Customers from the Adventure Works database.

Chapter 12:

JMS Publish and Subscribe example: A General Interface application that communicates with middle-tier components to publish JMS messages and displays messages received via JMS Topic.
Rolling Grid example: A General Interface application that uses CometProcessor to asynchronously receive data and display it in a scrolling grid.

Chapter 13:

Active Matrix Booklist service example: An Active Matrix service to get a list of books.
Active Matrix client in General Interface: A General Interface client application that displays the list of books returned from the Active Matrix service.

Chapter 14:

StockPrice example web application: A complete web application that uses General Interface to display Charts of stock prices.

Chapter 15:

StockPrice example web application: A General Interface Application with four parts—one publishes stock prices, and the other three components display the prices using different views and communicate using TIBCO PageBus.

Chapter 16:

StockPrice sample application: General Interface Application from Chapter 15 modified to load components asynchronously.
StockPrice sample application: General Interface Application from Chapter 15 modified to demonstrate instrumentation and optimization in General Interface applications.

© Copyright Pearson Education. All rights reserved.

Read More Show Less

Customer Reviews

Be the first to write a review
( 0 )
Rating Distribution

5 Star

(0)

4 Star

(0)

3 Star

(0)

2 Star

(0)

1 Star

(0)

Your Rating:

Your Name: Create a Pen Name or

Barnes & Noble.com Review Rules

Our reader reviews allow you to share your comments on titles you liked, or didn't, with others. By submitting an online review, you are representing to Barnes & Noble.com that all information contained in your review is original and accurate in all respects, and that the submission of such content by you and the posting of such content by Barnes & Noble.com does not and will not violate the rights of any third party. Please follow the rules below to help ensure that your review can be posted.

Reviews by Our Customers Under the Age of 13

We highly value and respect everyone's opinion concerning the titles we offer. However, we cannot allow persons under the age of 13 to have accounts at BN.com or to post customer reviews. Please see our Terms of Use for more details.

What to exclude from your review:

Please do not write about reviews, commentary, or information posted on the product page. If you see any errors in the information on the product page, please send us an email.

Reviews should not contain any of the following:

  • - HTML tags, profanity, obscenities, vulgarities, or comments that defame anyone
  • - Time-sensitive information such as tour dates, signings, lectures, etc.
  • - Single-word reviews. Other people will read your review to discover why you liked or didn't like the title. Be descriptive.
  • - Comments focusing on the author or that may ruin the ending for others
  • - Phone numbers, addresses, URLs
  • - Pricing and availability information or alternative ordering information
  • - Advertisements or commercial solicitation

Reminder:

  • - By submitting a review, you grant to Barnes & Noble.com and its sublicensees the royalty-free, perpetual, irrevocable right and license to use the review in accordance with the Barnes & Noble.com Terms of Use.
  • - Barnes & Noble.com reserves the right not to post any review -- particularly those that do not follow the terms and conditions of these Rules. Barnes & Noble.com also reserves the right to remove any review at any time without notice.
  • - See Terms of Use for other conditions and disclaimers.
Search for Products You'd Like to Recommend

Recommend other products that relate to your review. Just search for them below and share!

Create a Pen Name

Your Pen Name is your unique identity on BN.com. It will appear on the reviews you write and other website activities. Your Pen Name cannot be edited, changed or deleted once submitted.

 
Your Pen Name can be any combination of alphanumeric characters (plus - and _), and must be at least two characters long.

Continue Anonymously

    If you find inappropriate content, please report it to Barnes & Noble
    Why is this product inappropriate?
    Comments (optional)