You are on page 1of 10

ATG Dynamo Application Server: A Robust Platform for J2EE Applications

February 2001
ATG White Paper

ATG DYNAMO APPLICATION SERVER: A ROBUST PLATFORM FOR J2EE APPLICATIONS

This publication may not, in whole or in part, be copied, photocopied, translated, or reduced to any electronic medium or machine-readable form for commercial use without prior consent, in writing, from Art Technology Group (ATG), Inc. ATG does authorize you to copy documents published by ATG on the World Wide Web for non-commercial uses within your organization only. In consideration of this authorization, you agree that any copy of these documents which you make shall retain all copyright and other proprietary notices contained herein. This documentation is provided as is without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. The contents of this publication could include technical inaccuracies or typographical errors. Changes are periodically added to the information herein; these changes will be incorporated in the new editions of the publication. ATG may make improvements and/or changes in the publication and/or product(s) described in the publication at any time without notice. In no event will ATG be liable for direct, indirect, special, incidental, economic, cover, or consequential damages arising out of the use of or inability to use this documentation even if advised of the possibility of such damages. Some states do not allow the exclusion or limitation of implied warranties or limitation of liability for incidental or consequential damages, so the above limitation or exclusion may not apply to you.

ATG DYNAMO APPLICATION SERVER: A ROBUST PLATFORM FOR J2EE APPLICATIONS

Todays Web applications are much more than electronic brochure-ware theyre mission critical. The customer management strategies of todays successful e-businesses do not allow for system breakdowns or poor performance. As the foundation of the ATG Dynamo e-Business Platform, the ATG Dynamo Application Server (DAS) is a high-performance, scalable, highly reliable server platform for developing, hosting, and administering dynamic e-business Web applications. DAS is a production-quality application server designed specifically for todays advanced high-volume Web personalization and commerce applications. From its inception, DAS was one of the first application servers to be based entirely on Java. Well before the J2EE standards emerged, DAS was providing developers with a high performance, Java-based, server-side platform for developing, deploying, and administering dynamic, personalized Web sites. The recent emergence of industry standards for server-side Java, specifically Suns Java Server Pages (JSP), Enterprise JavaBeans (EJB), and Java 2 Enterprise Edition (J2EE), have codified the model for Java programming on the server. In particular, J2EE defines and combines a set of services for transactions, naming, security, database access, persistence, messaging, e-mail, and HTTP server interaction into a potentially powerful platform on which to develop portable enterprise Java applications.

For several years, ATG Dynamo developers have enjoyed a profound advantage when it comes to building high-performance, server-side applications. Dynamo Server Pages (DSP), Servlets, Dynamo Droplets (an enhanced Servlet), and JavaBeans greatly simplified their jobs and improved their applications performance. Now Dynamo developers can extend this advantage by building and deploying robust, scalable J2EE applications using industry standard Java Servlets, EJBs, and other J2EE features on the proven DAS platform. ATG Dynamo integrates J2EE into the Dynamo Application Server foundation, providing a complete implementation of the J2EE platform, including rich implementations of Enterprise JavaBeans 1.2, Container-Managed Persistence (CMP), Java Messaging Service (JMS), and Java Server Pages (JSP). This white paper discusses ATG Dynamo support for the J2EE platform. It reviews the ATG implementation of J2EE specifications and its advantages, and highlights some of the featurerich J2EE tools available to Dynamo developers. It also explores the end-to-end use of components in the Dynamo platform, the interoperability of Dynamo and J2EE components, and the advantages of the ATG Dynamo J2EE implementation.

ATG DYNAMO APPLICATION SERVER: A ROBUST PLATFORM FOR J2EE APPLICATIONS

What is J2EE?
J2EE is the standard for writing portable server-side applications in Java. It specifies the way server-side applications are written and packaged to ensure portability across J2EE application servers, and it mandates the services and APIs a J2EE platform implementation must provide to the applications it hosts. These services include: Infrastructure: Transactions Java Transaction API (JTA), Security Java Security defined in Java 2, Standard Edition Component Models: Business Logic Enterprise JavaBeans (EJBs) and Servlets, Page Models Java Server Pages (JSPs) Enterprise Connectivity: Database Access Java Database Connectivity (JDBC), e-Mail JavaMail, Messaging Systems Java Messaging Service (JMS), Naming Java Naming and Directory Interface (JNDI), Program Interoperability Remote Method Invocation over IIOP (RMI over IIOP), Packaging and Deployment As this list clearly shows, J2EE includes a wide range of application services. J2EE provides support for transactions, communication, and heterogeneous interaction throughout the network. Applications coded to this standard are portable across J2EE-compliant application servers. However, a production-quality application server cant stop at support for the J2EE specification. It should also provide robust infrastructure and platform services that allow J2EE services and Java applications to perform optimally on the server. This includes internal resource management, load balancing, server clustering, session management, fault tolerance, database and data mapping, fast page generation, and business logic execution. The Dynamo Application Server provides all of these in a complete, robust platform.

ATG Dynamo Application Server Application Container


Dynamo Application J2EE Application

Multi-Channel / Page Mode


XML JSP 1.1 HTML DSP WML

Components
Java Bean Servlet 2.2 EJB 1.1

Services
Caching Logging Queuing Scheduling Pools SNMP

Infrastructure
JNDI 1.2.1 Security Load Balance Messaging (JMS) Transaction (JTA) Session Mgt. Page Comp. Pipeline

Figure 1. Dynamo Application Server (DAS)

ATG DYNAMO APPLICATION SERVER: A ROBUST PLATFORM FOR J2EE APPLICATIONS

ATG Dynamo Application Server Architecture


A key differentiator of the ATG Dynamo Application Server is that, from its inception, it was built using Java and a component-based architecture. Unlike other application servers, DAS is neither a combination of multiple products or architectures, nor a black box. DAS is an enterprise application platform that provides all of its services through a consistent, unified, open component architecture. All Dynamo Application Server internal systems servers, database connections, EJB and Web containers, schedulers, loggers, etc. are written in Java and exposed through JNDI or a sophisticated ATG Dynamo mechanism called "Nucleus." Each of these internal systems is packaged as a JavaBean or a set of JavaBeans, and can be configured when Dynamo is started up. Thus, from its very core the DAS platform is a configurable set of services implemented as Java components. At runtime, application developers and deployers can change the configuration of individual components, inspect components, and add new components to DAS. This powerful architectural approach provides Dynamo users with unmatched flexibility and power. The component architecture and Java heritage of ATG Dynamo made implementing a fully compliant version of J2EE a natural extension of the existing Dynamo platform. All J2EE services are built as Java components that thoroughly implement J2EE specifications and APIs. As with Nucleus components, they can be configured at runtime, allowing each Dynamo server to be optimally configured with the J2EE services it will provide. Many of the services make use of established Nucleus components and capabilities. Applications that use the J2EE APIs and services inherit the proven performance, reliability, and scalability of the Dynamo platform.

ATG Dynamo J2EE Implementation


ATG Dynamo Application Server (DAS) provides a complete implementation of the J2EE specification and a scalable, robust, and reliable platform for J2EE application hosting and execution. It is organized into four architectural areas: J2EE infrastructure Enterprise JavaBeans Enterprise Connectivity Packaging and Deployment

ATG Dynamo Transaction Management Nearly all Internet applications access some sort of transactional database, and certainly many need access to multiple data sources, messaging systems, or other transactional resources as part of their business logic. ATG Dynamo provides applications with full implementation of the J2EE Java Transaction API (JTA) 1.0.1 specification. Using JTA, the Dynamo Transaction Manager supports both programmatic and declarative transaction demarcation. Developers can build applications that perform intricate transactions involving a variety of J2EE services including Java Messages, EJBs, Servlets, JSPs, JDBC, and other external data sources available through the Dynamo Repository API. For example, an application can receive a Java message, execute some business logic in an EJB, and then perform a database update all as part of one transaction. The Dynamo Transaction Manager coordinates the transaction across all of the resources involved and insures the integrity of all data. It also provides full transactional support for Dynamo Server Pages and Droplets, allowing standard Java applications to take advantage of native Dynamo features and vice-versa. By managing and coordinating these transactional resources, it relieves programmers to focus on the business logic required by the application. Dynamo Repository API Accessing data stores is a critical capability for an application server. Applications may need to access relational databases, file systems, content management systems, LDAP directories, or other sources of data. ATG Dynamo provides access to these data stores through "repositories" and the Dynamo Repository API.

DAS J2EE Infrastructure


The ATG Dynamo Java heritage has provided ATG with unique insights into the needs of a server-side Java execution environment. Critical to such an environment is infrastructure. J2EE defines support for transactions via JTA, the Java transaction management service, and security, through inclusion of the Java Security specification found in the Java 2 Standard Edition (J2SE), an underpinning of J2EE. Dynamo provides a complete implementation of both of these infrastructure services, but goes beyond the basics to include robust session management support. The session management features were developed by ATG engineers who for years worked on a platform for executing server-side Java applications, prior to the advent of J2EE. Session management occurs natively to the DAS, and is available to all J2EE applications to increase their scalability and reliability. Dynamo also provides a powerful data source mapping facility, called a repository, that is provided through the Dynamo Repository API. Dynamo uses the Repository API to provide powerful and flexible support for both J2EE Security and Enterprise JavaBeans Container Managed Persistence.

ATG DYNAMO APPLICATION SERVER: A ROBUST PLATFORM FOR J2EE APPLICATIONS

In ATG Dynamo, a repository is an abstract representation of an underlying physical storage facility or data store. It is accessed through the Dynamo Repository API, a data access layer that defines a generic representation of a data store. Whenever Dynamo needs to load, create, update, or query a data store, it makes the appropriate calls through this API. The API then accesses the underlying data storage device through an adapter, which translates the API calls into whatever calls are needed to access that particular data store. Each repository connects to a single data store, but multiple repositories can coexist within Dynamo, with various applications and subsystems using different repositories or sharing the same repository. This provides tremendous flexibility and power for building applications that access and integrate data from multiple data sources. A repository provides a range of services for the data sources it represents. In providing a mapping between Java objects and the underlying data source, it enables complex mappings including supertype/subtype, one-to-one, one-to-many, and many-to-many relationships. It also provides caching services, including four cache management options (none, simple, locked, or distributed), cache size control, cache cleanup (Least Recently Used or time-out), and a variety of cache statistics that can be used to tune performance on an individual repository basis. As repositories utilize JTA, the underlying data sources can fully participate in distributed transactions. The ATG Dynamo repository architecture enables the Repository API to map to virtually any data source. Out of the box, Dynamo provides Repository API implementations to access relational databases via JDBC, LDAP databases, content management systems, or file systems containing HTML or XML files, and uses repositories as the underpinning for its implementations of Java Security and EJBs.

Dynamo Security Security is an absolute requirement for Internet applications and is considered critical infrastructure for an application server. In J2EE, the security model specifies two things: Authentication: who can access the system Access Control: what users or specific roles can access the system ATG Dynamo supports the full J2EE security model, including principals, roles, and declarative and programmatic access control on a URL or EJB method. Developers can also employ the authentication method most appropriate for their applications, which may already exist in the target-computing environment. For account management, Dynamo provides a powerful, flexible solution: Dynamo implements the account management of users and roles through a repository and the use of the Dynamo Repository API, and "UserAuthority" and EJB components. J2EE applications access authentication and access control information stored in a repository through an ATG Dynamo UserAuthority component. The UserAuthority translates security requests from J2EE to the proper sequence of data access requests on the Repository. This mechanism allows applications to make standard J2EE security calls while also tapping the power of the Repository API to insulate applications from underlying changes of the security information store. The J2EE specification does not detail how an application server should perform account management how to manage the data representing who can access the system. Specifically it does not state how principal (user) names and security roles should be stored by the server, or how the server maps users and roles to the names referenced in a J2EE application. Thus the specification leaves to each application server how to implement certain aspects of the J2EE security model.

DAS uses the Repository API to implement security based on the J2EE specification. DAS ships with a repository representing security system account management information. The flexibility of the Repository API allows you to change the persistence mechanism to XML, LDAP, SQL, or some other source. By using the repository architecture, DAS can adapt to an applications pre-existing schema, allowing mappings from the existing security schema to repository components used by J2EE and ATG Dynamo applications. By using repositories to represent the underlying account management data store and schema, ATG Dynamo can provide a variety of security account management alternatives to applications. This flexibility allows Dynamo to easily fit into existing security infrastructures, and more easily meet the security needs of applications. It is a powerful advantage for J2EE applications deployed on the Dynamo platform. Dynamo Session Management From its creation, ATG Dynamo was designed to scale to support large numbers of users and their individual interactions or sessions with the server. To this end, ATG has architected robust session management features such as session-based load management, geographic and session failover, and session federation, providing scalability and high reliability for all J2EE applications. ATG Dynamo distributes user interactions across a cluster of Dynamo servers using sessionbased load management. To support greater numbers of users, additional instances of Dynamo can be brought on-line dynamically to work in concert within a cluster. Adding new servers or new instances of Dynamo provides near-linear scalability.

ATG DYNAMO APPLICATION SERVER: A ROBUST PLATFORM FOR J2EE APPLICATIONS

When a cluster becomes unreachable or inoperable, ATG Dynamo can employ geographic failover to automatically reroute requests to a cluster in a separate geographic location. It can also employ session failover to replicate a sessions state to the new cluster and recover the session on the backup server without user interruption. ATG Dynamo session federation, an extension of session failover, allows the state of a users session to be represented and maintained simultaneously on multiple servers. It supports the live exchange of critical data between applications hosted on different Dynamo servers and the re-use of sessions as users move back and forth between applications. This is particularly useful when servers are dedicated to different functions; for example, one for marketing content and the other for commerce execution. All J2EE applications automatically use these ATG Dynamo capabilities, making them highly reliable and vastly scalable.

The Dynamo Application Server fully implements the EJB 1.1 specification including stateful and stateless session beans, and entity beans with either bean managed persistence or CMP. ATG Dynamo pools instances of stateless session beans to optimize performance. This reduces the overhead time of starting up a new session bean. Bean-managed persistence is supported through the Dynamo Repository API and JDBC. However, unlike most application servers that support CMP by storing EJBs only in databases, Dynamo stores the EJBs in a repository. This allows them to be integrated with virtually any kind of permanent storage, including a database, a content management system, directories of XML files, or other storage facilities. For EJBs, ATG Dynamo implements a two-stage repository mapping. First it maps the EJB to a repository, then it maps the repository to the underlying data store. The elegance of this CMP approach is that it completely insulates EJBs from changes to data stores. It allows EJBs to be re-mapped to new or changing persistent schemas without affecting EJB application code. This provides higher application reliability and adaptability to changing environments. The unique repository approach of ATG Dynamo also facilitates legacy data integration, allowing different EJBs in the same application to be stored in or retrieved from different data stores. This flexibility allows Dynamo to easily fit into existing infrastructures and more easily meet application data access and integration needs. An additional container specified by J2EE is the Web Container. Web containers manage Webrelated components, such as Servlets, JSPs, and Tag Libraries, needed to drive the Web interface in a J2EE application. The Dynamo Web Container provides an environment in which to execute JSPs and custom JSP tags. In these containers, ATG Dynamo uses the same performance optimization pooling mechanisms for single threaded servlets

as it does for stateless session beans in the EJB containers. In addition, J2EE Web applications automatically use Dynamo session backup and failover mechanism. This allows any session-scoped attributes to be backed up to an external storage service, so that if the Dynamo server fails, another can take over its sessions and requests.

Enterprise Connectivity
The cornerstone of an enterprises infrastructure, application servers are strategic integration platforms, bringing together data and information from multiple sources. J2EE stipulates support for Enterprise Connectivity in the form of a group of APIs for accessing databases (JDBC 2.0), e-mail (JavaMail 1.1), messaging systems (JMS 1.0.2), naming services (JNDI 1.2.1), and program interoperability (RMI over IIOP 1.2.1). ATG Dynamo Application Server implements all of these. JDBC Dynamo Application Server (DAS) provides full support for J2EE JDBC, including an integrated implementation for the Java Transaction API and distributed transactions. To optimize performance, DAS pools JDBC connections and allows run-time configuration of the connection pool. In addition, DAS provides higher level APIs for accessing relational databases. Relational Views is a database access library providing a simple model for mapping SQL tables to Java objects and vice-versa. Relational Views is built on top of JDBC and can use any database for which a JDBCcompliant driver is available. The Dynamo Repository API provides further storage abstraction, enabling access to any kind of data source, including JDBC accessible databases, while insulating applications from changes in the mapping to the underlying data store. Using Relational Views or the Repository API, Dynamo developers can build robust, maintainable database access code.

Enterprise JavaBeans and ContainerManaged Persistence


One of the most anticipated features of J2EE is Enterprise JavaBeans, and in particular, Container-Managed Persistence (CMP). EJBs are Java components that standardize a means of creating independent, reusable, serverside business logic and data access services. The EJB specification defines a specific set of APIs, coding requirements. and an execution environment (called "containers") that provide resources and a context for EJB execution. Specifically, EJB containers manage the caching, execution, and database storage and retrieval of EJBs. ContainerManaged Persistence thus defines a containercontrolled service providing automatic storage and retrieval of EJB state to a data source. It is intended to relieve the developer from having to code the storage or retrieval mechanisms.

ATG DYNAMO APPLICATION SERVER: A ROBUST PLATFORM FOR J2EE APPLICATIONS

JavaMail While e-mail has more recently grown into an important tool for commerce applications, it has long been a part of the ATG Dynamo platform as a core Nucleus component. J2EE applications needing to send and receive e-mail can use the JavaMail API, implemented using the same proven Nucleus component. Applications can send plain text, HTML, or converted HTML to plain text mail messages, and can utilize the Dynamo Personalization Server for targeted e-mail services. Java Messaging Service (JMS) Messaging systems are now major components of enterprise applications, especially as a means of integrating disparate systems. Sun devised the Java Messaging Service (JMS) to offer a standard Java-based, unified messaging model and API that enable J2EE applications to interact with other applications, independent of the underlying messaging system implementation or vendor. Specifically, JMS defines the interfaces for sending and receiving messages, as well as the semantics for message delivery and acknowledgement, and how message delivery should behave in a transactional environment. JMS does not dictate what sorts of messages can be transported through the system or message metadata, but it does define five broad categories of message data formats: a set of key/value entities a string a serialized Java object a byte array a sequence of Java objects Lastly, JMS defines support for the two basic kinds of messaging publish/subscribe and strict queuing and notions of message filtering that allow JMS clients (receivers) to specify the type of messages they will accept.

Dynamo Messaging System (DMS) The Dynamo Messaging System (DMS) is a distinguishing component of Dynamo Application Server (DAS). DMS is a comprehensive messaging architecture based on the standard JMS API. DMS is a full implementation of JMS, one that offers a rich set of messaging features for communication within ATG Dynamo, between core Dynamo components and applications, and with external systems. By design, DMS separates the design of the messaging components from the underlying "plumbing" (the chosen messaging system implementation), making messaging more component-oriented and accessible to both J2EE and Dynamo applications. DMS includes: Notification DMS provides a consistent JMSbased notification mechanism for ATG Dynamo itself and both J2EE and Dynamo applications. All can use DMS to post internal or applicationderived messages to be received by the Dynamo core, or by a J2EE or Dynamo application component. Messages can cause other business logic or functions to be invoked. Two JMS providers (implementations) Two implementations allow application developers to meet different messaging needs and to change implementations without affecting application code. These providers are: SQL JMS An ATG Dynamo-provided reliable, asynchronous JMS implementation based on JDBC. SQL JMS lets Dynamo application components and multiple Dynamo servers use the same SQL database to reliably communicate with each other. If the JDBC driver supports the XA transaction protocol, the SQL JMS will be able to participate in distributed transactions involving multiple resources, thus providing distributed messages with guaranteed delivery. Local JMS An ATG Dynamo-provided high speed, low latency synchronous messaging service for communication within a single process.

Third party JMS integration As part of the ATG Dynamo open architecture, DMS enables third-party JMS implementations to be easily integrated into the Dynamo Application Server. This allows developers to select the most appropriate messaging systems for the job, and make use of existing infrastructure. Patch Bay This DMS-provided tool simplifies the development and configuration of messaging applications. Using Patch Bay, developers can easily wire-up and configure the senders, receivers, and filters in a messaging application, and connect messaging components to JMS providers. In addition, ATG Dynamo provides XML support for both JMS and DMS. All business transactions sent over JMS or DMS are represented in an XML format. This allows Dynamo to easily integrate with other systems that use XML documents to represent transactions. Dynamo supports both XML and XSL. By providing comprehensive JMS support, DMS expands the reach of the ATG Dynamo platform. The full-featured messaging architecture broadens available communication models, allowing Dynamo and J2EE applications to communicate more fluidly and integrate more easily with other enterprise applications.

Packaging and Deployment


Deploying J2EE applications and EJBs can be a challenge. While the J2EE specification has a very specific set of requirements for packaging and deploying applications, it doesnt specify a process for corralling all the needed components. In fact, packaging and deployment of J2EE applications are difficult steps. ATG eases the packaging and deployment of J2EE applications, and streamlines the deployment process in three ways.

ATG DYNAMO APPLICATION SERVER: A ROBUST PLATFORM FOR J2EE APPLICATIONS

1. ATG developed Darina. Darina is a combination of build and deployment tools. It compiles source code, collects CMP mapping information, and creates appropriate deployment files. It also supports incremental application deployment, recompiling changed files and repackaging the application. Darina thus reduces deployment steps, saving development time and increasing productivity. 2. The ATG Dynamo Application Server can run J2EE applications without packaging. DAS does this by reading native application files from an appropriate directory structure and executing the application. This increases productivity and reduces development time. 3. Unlike other Java application servers, the ATG Dynamo Application Server allows changed J2EE applications to be re-deployed without the need to stop or quiesce the server. When a new version of an application is loaded onto DAS, the server immediately starts using it, and for a time both the old and new versions run simultaneously. New Web sessions and EJB requests will go to the new application. Existing Web sessions will continue to run with the old application until they expire, while external clients with existing references to EJBs will reacquire interfaces and create new references to specific EJBs. This seamless cut-over not only saves time during the development cycle (including modifying, building, and testing); it is absolutely essential that a production application server allow continuous 24 by 7 operation without interrupting service to users.

Summary
With ATG Dynamo, ATG continues to build on its server-side Java heritage to provide developers with a powerful platform for constructing online commerce and customer management applications. Extending the proven ATG Dynamo platform with a complete, robust J2EE implementation opens the door for new enterprise applications that take advantage of standard J2EE services and portable APIs. The Dynamo Application Servers configurable component architecture and seamless interoperability allows Dynamo developers to select the right tool for the job, and fully employ J2EE services such as Java Server Pages, JTA, JMS, and Enterprise JavaBeans in J2EE or native Dynamo applications. Developers can easily integrate their ATG Dynamo application with existing applications, data sources, and security infrastructures. By fully implementing and leveraging JMS to provide the rich set of DMS messaging capabilities, DAS makes communication easier for all Dynamo applications. The powerful and flexible Dynamo Repository API, underpinning both Java Security and EJB Container-Managed Persistence, provides applications with elegant data source integration and management. Developers can easily construct the right user security management approach for a variety of applications, integrate into existing security infrastructures, and map to any data source using the same mechanism. All of these J2EE and ATG Dynamo services are supported by a proven infrastructure. Dynamo includes class-leading features for a production platform, including dynamic load distribution, automated session failover, and multi-server geographic failover. These combine to provide bulletproof reliability and contribute to its distinction as a proven, robust platform on which to deploy and administer dynamic, personalized Web sites.

www.atg.com/offices

America Headquarters Art Technology Group, Inc. 25 First Street Second Floor Cambridge, MA 02141 USA Tel: + 1 617 386 1000 Fax: + 1 617 386 1111 North American Offices Atlanta / Chicago / Dallas / Los Angeles / New York / Palo Alto / San Francisco / Toronto / Washington DC European Headquarters Art Technology Group (Europe), Ltd Apex Plaza Forbury Road Reading RG1 1AX UK Tel: + 44 0 118 956 5000 Fax: + 44 0 118 956 5001 European Offices Amsterdam / Frankfurt / London / Milan / Paris/ Stockholm Asia/Pacific Headquarters Art Technology Group, Inc. Suite 46 Level 11 Tower B Zenith Centre 821 Pacific Highway Chatswood NSW 2067 Sydney Australia +61 2 8448 2071 +61 2 8448 2010 Asia/Pacific Offices Hong Kong / Singapore Japan Headquarters Art Technology Group, Inc. Imperial Tower, 15th Floor 1-1-1 Uchisaiwaicho Chiyoda-ku, Tokyo 100-0011, Japan www.atg.com Version 1. February 2001
2001, Art Technology Group, Inc. ATG, Art Technology

Group, the Techmark, the ATG Logo and Dynamo are registered trademarks, and Personalization Server and Scenario Server are trademarks of Art Technology Group. All other trademarks are the property of their respective holders. All specifications are subject to change without notice. Art Technology Group, Inc. cannot accept liability for any loss or damage arising from the use of information or particulars in the brochure. NASDAQ: ARTG

You might also like