To put it bluntly, SilverStream 2.0 sets a new standard for large-scale Web development and deployment. We first looked at the product in June 1997 when they were the newest entrant in the application server market. It lacked many enterprise features such as scalability, fault tolerance and CORBA support. In addition, it only offered advantages in the area of Java client development and deployment. With 2.0, things are quite a bit different.
SilverStream 2.0, released in October 1998, not only fulfills the early promise of the 1.0 product but includes innovative approaches for writing thin-client, HTML applications utilizing server-side Java business objects.
The Application Server Market
The market for enterprise-class application servers is hindered by a confused corporate IS industry. Faced with impending deadlines for completing Y2K initiatives, the majority of the industry has been cautious about making platform decisions for three-tier Web-based applications. To define the product space for application servers, we'll use Forrester Research's simple definition: "a software server product that supports thin clients with an integrated suite of distributed computing capabilities. Application servers manage client sessions, host business logic, and connect to back-end computing resources, including data, transactions, and content." Given this definition, we'll quickly summarize how SilverStream addresses the main application server components.
The SilverStream server is written entirely in Java and can be deployed on NT, Solaris and HP platforms. The overall server architecture, shown in Figure 1, can be divided into three parts:
Server Front End
By default, SilverStream includes a high-performance HTTP 1.1 Web server that supports Secured Socket Layer 3.0 for encryption. However, SilverStream can easily coexist with other industry-standard Web servers, such as those by Microsoft and Netscape, by using the included SilverJunction plug-ins for URL redirection. For user authentication, the server integrates well with LDAP, JNDI, NT Security, NIS+ or X.509 digital certificates. SilverStream 2.0 also has solid support for building and communicating with CORBA objects via IIOP.
Application Logic Tier
From a Java application server standpoint, SilverStream includes full support for invoked or triggered business objects, servlets, state and session objects, HTML generation, table version tracking, access control and CORBA objects.
Database Access Tier
SilverStream uses connection pooling and sophisticated transaction management to relational databases via native JDBC drivers. All industry standard DBMS platforms are supported, including DB2, Oracle, Sybase, Microsoft, Informix, SQL Anywhere, Access and others. For performance purposes, asynchronous fetch-ahead and configurable data buffering is included. In addition, SilverStream includes the Fulcrum Search engine with extensive, integrated support for full text queries. Data Versioning is also built-in.
Server Deployment Options
SilverStream applications can be deployed on a single server (NT or Unix) or clustered. Clustering provides near-linear performance scalability and a separate cache manager coordinates server-cached data for the cluster. SilverStream includes a dispatcher to route incoming client requests to the cluster (third-party dispatchers are also supported). Multiple dispatchers can be used to further eliminate the possibility of a single point of failure. In addition, the SilverStream server includes load balancing and session-level failover mechanisms.
From a developer's perspective, perhaps the single most compelling reason to choose SilverStream is the integrated development environment, or "designers." Developers familiar with IDEs such as PowerBuilder will feel right at home bouncing around the Page Designer, Form Designer, Object Designer and other designers. The designer consistency is especially surprising in the Page Designer, the mechanism for creating thin-client HTML applications (more on the Page Designer later).
All designers offer the familiar event-driven programming model favored by products such as Visual Basic and PowerBuilder. The developer has full GUI control over a wide range of control options, most inherited from standard AWT classes. Double-clicking on any control takes you to the Java programming editor, where all Java classes are supported along with hundreds of prebuilt SilverStream Java classes and helper objects. SilverStream doesn't package their own version control system, but they do include built-in support for PVCS and SourceSafe. The Form Designer, used to create client-side Java applications, includes a debugger with all the expected features, including breakpoints, step-through and step-over. The Debugger doesn't work on the server; obviously, this is a deficiency. In SilverStream's defense, certain debugging APIs are still incomplete within the current Java specification or fragile enough to prevent SilverStream from making a tremendous effort at round-trip debugging. We expect to see round-trip debugging (Solaris, Microsoft, HPUX) in the 3.0 release of the product.
To the SilverStream server, the designers are simply additional users, making it easy to impose access control and other security restrictions on different sets of developers.
SilverStream Forms - Client-Side Java
SilverStream builds on the award-winning Form Designer of 1.0 by adding capabilities for dynamic hierarchical views as well as the ability to deploy SilverStream Java client applications outside a browser using the Silver JRunner runtime Windows executable. SilverStream also generates Java 1.1 applets and can be used in any browser that supports it. SilverJRunner deployments actually run much faster than applet deployments because they don't perform the bytecode checking needed for the browser's security sandbox. In addition, SilverJRunner handles caching of applications to the client.
SilverStream's client-side applications consist of forms and views. When a form is created, it's assigned a default data source - most likely a table, although it could be some business object. SilverStream generates all the code needed to automatically retrieve data when the form is run on the client machine, and columns are easily bound to any data source. Two really nice controls that are included are a data-aware choice control for binding columns to lookup tables and a full HTML editor that can be bound to columns in your database. The HTML Edit Control allows you to build applications that allow end users to build their own HTML pages. A good example of this would be building product description pages. The editor is surprisingly rich in functionality and is easy to use.
In addition to forms, SilverStream has views. Think of a view as a data-bound hierarchical grid control. That is, you define column lists as you would for a grid control, but you can have unlimited levels of master-detail hierarchy. In addition, you can have multiple bands per level and multiple row selection, and to top it all off, it's an updatable control. It also allows you to define expressions for any column so you can perform tasks such as multiplying two columns and summing the totals.
Handling Master-Detail Processing
While SilverStream does have all of these nice controls, what really makes it productive is how it allows you to create master-detail forms. For example, if you want to build a customer form that has a tab folder with customer orders and contacts, the form can be built with the wizards. Since SilverStream is aware of your referential integrity settings (primary and foreign keys), it knows how to relate forms to views. If you drop an order view on the customer form, it builds the WHERE clause for you. Then you'll see only the orders for the particular customer you're working on. If you take that same order view and place it on an employee table, you'd see only the orders that the employee sold. While SilverStream takes care of a lot of this for you, you can change things through the property sheets or through programming.
Three-Tier Data Caching
A final note on forms and accessing data: as SilverStream downloads a form to the user's machine, it's already executing the query for that form (assuming the developer has chosen an automatic query). This means that as soon as the form instantiates on the user's machine, the data is most likely already streaming from the database to the application server. A thread on the server loops and retrieves 150 rows at a time from the database. Simultaneously, the client requests 100 rows at a time in a background thread. As soon as data is moved to the client, it's cleared from the server. What this means is that the amount of data on the server is always kept to a minimum. There's no need to load 5,000 rows to the server and then send them down to the client. The client gets the first 100 rows of data as fast as possible, while at any one time there may be only 500 rows sitting in the server as this data-caching mechanism does its job. If a certain form really needs all 5,000 rows immediately, a simple method call to the data cache changes the client-side retrieval to 2,000 rows at a time in a foreground thread. This entire caching mechanism is automatic and the developer doesn't need to code anything special to use it. The result is high data throughput as data passes each of the three tiers. It also results in faster response time in Java applications.
Rich Application Server Services
SilverStream makes building partitioned, distributed business objects a much more intuitive process by providing a designer to create stateless, server-side, triggered business objects that respond to invoked requests, database-triggered events, POP3 mail events, scheduled events and/or standard servlet requests. In addition, SilverStream Data Source Objects (DSO) are easily built to provide a clean middle-tier partition to relational and non-relational data sources, such as SAP, PeopleSoft, Lotus Notes and CICS. In fact, once created, developers code against DSOs the same way they code against relational data sources - the development environment treats data source objects just like tables and makes developing front-end apps against components pretty easy. Additionally, SilverStream includes support for persistent business objects.
Also new in 2.0 is SilverStream's data connector wizards. These wizards allow for the rapid creation of DSOs that go against SAP, PeopleSoft and Lotus Notes. Developers can also create their own data connectors for various nonrelational data sources of interest.
Page Designer - True Innovation for Thin Client Applications
The most striking feature of SilverStream 2.0 is the Page Designer, which makes a major breakthrough in creating HTML applications by allowing the developer to use a designer environment much like Visual Basic's. It's complete with object-oriented server-side Java, event-driven programming, WYSIWG design features, control properties and methods. If you've built HTML before using scripting tools or even HTML editors, then you're in for a treat. It's hard to believe that someone didn't come up with this before.
The Page Designer provides amazing level productivity. Because SilverStream handles master-detail transaction processing in pages similarly to forms, building complicated three-tier master-detail pages is a snap. SilverStream also handles full session and state management; passing data between pages is trivial and can easily persist across servers. In the persistent session object demo, we were able to completely shut off the server and reboot it, then hit Next on our page, and the application continued without a hitch - very impressive!
In addition to all the features listed above, SilverStream includes controls for file upload/download, the Visigenics CORBA IDL toolkit, a very powerful server management console, extensive data-binding capabilities, an authenticated version of Sybase SQLAnywhere, the ability to create JavaBeans and JARS, and a powerful mail API. SilverStream's unified security model can be applied to any component that is built, including row-level security against the database.
SilverStream is priced at $8,500 per processor, regardless of platform or number of users. In published performance specifications, SilverStream servers supported anywhere from 400 to 100,000 users, depending on application complexity and frequency of use. Development versions of SilverStream are available at $495 for a single developer, $2,495 for five developers and $4,995 for 10. With a full-priced deployment server, any number of developers can work at one time, making the cost per developer very trivial for larger organizations.
What We'd Like to See in the Product
This version of SilverStream is so
feature-rich, it lacks very little for the
database-centric Web application developer. Nevertheless, we'd like to see some improvements in future releases, including a full-featured report writer, explicit XML support, a more powerful database administration tool, a round-trip debugger and better application documentation tools.
In addition, SilverStream needs Enterprise JavaBean support. Luckily, this is under development and is slated to go into beta in late spring. With their EJB support,
SilverStream will also be opening the server to third-party development tools such as Cafe and JBuilder. Likewise, SilverStream can be used as a front-end presentation server to existing CORBA and EJB servers.
SilverStream is definitely going to be making the short list of application server platforms in the years to come. The tremendous talents of the development and management teams combine to make SilverStream a logical choice for developers who need the power to easily develop database applications to any data source, deploy on Unix or NT platforms, remain browser agnostic and desire the power and future promise of the Java language. A truly innovative offering, SilverStream's many strengths far outweigh its shortcomings. In an industry ready to explode, SilverStream raises the bar once again.
About the Authors
Brad Cooley and Steve Benfield are principals with Bondi Software, a software consultancy.
Both have extensive experience with corporate business software development. Brad is in
Greensboro, North Carolina, and can be reached at [email protected]. Steve is based in Atlanta, Georgia, and can be reached at