The book starts off with a nice introduction to Web applications in the context of WebLogic, including a discussion of WebLogic-specific descriptors. Everything you need to create production-ready applications, including HTTP Session replication, clustering HTTP sessions using in-memory replication, HttpClusterServlet and SSL is discussed in here in a very clear and concise manner. There is also a section that describes how to setup an Apache Web server to front a cluster of WebLogic servers. This section also includes a great section on security and using security in your application.
The next chapter in the book discusses JNDI in great detail. I re-read this chapter several times and just love the treatment this topic was given. There were things in there that I have learned over the last 5 years of using WebLogic, which made me wish I had this book in 1999. There is a clear and in-depth explanation of JNDI, binding objects to JNDI, RMI, and RMI over IIOP, and many other JNDI best practices.
After JNDI, the book moves on to JDBC and this chapter provides a very comprehensive tutorial on how to use JDBC and databases in the context of WebLogic. The discussion includes connection pools, multipools, and Data Sources. My favorite part of this chapter was the detailed section on all of the connection pool configuration parameters. WebLogic's JDBC sub-system is incredibly powerful but the WebLogic console or help doesn't do a good job of explaining all of the features and settings and it's nice to have a complete guide to all of the configuration parameters. The chapter also discusses using Java Data Sources in the context of a transaction and the javax.transaction.UserTransaction API.
The JDBC chapter also includes a section on Rowsets. Rowsets were introduced in JDBC 2.0 and the Rowset interface extends the java.sql.ResultSet interface. WebLogic's RowSet implementation is great and I remember last year's eWorld where Rob Wollen and Seth White hosted a session on RowSets and I was very impressed with the features they offered. There is Java code on how to use Rowsets including creating, populating, and manipulating Rowsets along with transactions and disconnected Rowsets. There is also a discussion on the different optimistic concurrency schemes.
After JDBC, the book moves onto transactions and the Java Transaction API (JTA) and how to use them in the context of JDBC transactions (XA and non-XA), distributed transactions, and EJB transactions. This is a very nicely written chapter and anyone needing to understand how to build and deploy applications that use JTA will find everything they need here. The next chapter deals with the Java Connector Architecture (JCA) and I basically skimmed this chapter. I don't have a lot of experience with JCA but this chapter looks good.
The next chapter deals with the topic of the Java Messaging Service or JMS. This is also one of those chapters that I re-read several times and I love the way it is written. This is a very comprehensive chapter and I won't list all the contents but I have to highlight the section on clustered JMS. There is a brief mention of Message-driven Beans (MDBs) in this section but detailed treatment is in the EJB section.
The next section of the book deals with Enterprise Java Beans (EJBs). The chapter starts off with a quick tutorial of Cedric's EJBGen. From EJBGen, you move into a discussion of the now deprecated ejbc (WebLogic EJB compiler) and the newer appc class for compiling EJBs. After a brief discussion of transactions, we move into configuration aspects, including pooling of stateless and stateful EJBs. The issue of concurrency with entity beans is also discussed here along with some good concurrency strategies. The issue of clustering and failover of stateful and stateless EJBs is also discussed here. The EJB section continues and includes topics like CMP 2.0 and EJB QL. If you are new to CMP or Entity Beans, you will really benefit from this chapter as it includes an in-depth look at all of the issues involved in CMP, including Container-Managed relationships, cascading deletes, caching, EJB QL and WebLogic-specific extensions to EJB QL.
The next chapter deals with packaging and deployment of applications to the WebLogic server. After a quick description of the deployer tool, the section describes all the features available for application deployment, including the idea of staging applications and auto deployment. I really like the section that describes WebLogic's custom classloaders and how class loading works in EAR files. This is usually a very confusing topic and people new to J2EE or EAR files will spend a lot of time trying to figure out classpath issues.
After deployment, the book moves on to the installation and creation of WebLogic domains. This section is useful for the developer, but really necessary for the WebLogic admin that is going to manage the production environments. WebLogic is the best application server out there and with all the features comes complexity. There are a lot of options in setting up managed, admin servers, node manager and this chapter does a great job of articulating all of the options and highlighting some of the best-practices in WebLogic software installation.
The next section deals with clustering, load balancing and failover and how to achieve high-availability for your application. There is great discussion on how to setup a cluster with multiple configurations including splitting web and object tiers across clusters and co-locatingthe web/object tier (my preferred option) in the same cluster.
The next chapter discusses some best practices on performance, monitoring and tuning. This section includes information on tuning Http Sessions, JDBC pools, JMS, optimizing EJB pools, and optimizing CMP. It also discusses how to tune the WebLogic server by configuring execute queues, server threads and detecting things like stuck threads, etc. There is some discussion on tuning the JVM and I was happy to see JRockit mentioned here. The next chapter discusses SSL and how to use SSL with WebLogic. I glossed over this chapter as we use a hardware SSL accelerator and this is not a topic of interest to me.
The next section deals with security and it is very comprehensive and thorough. Starting with JVM security and working up to the security provider architecture provided by WebLogic, this chapter provides great information about each topic including JAAS and the embedded LDAP server. The section on JAAS includes code samples that are ready to be used for your application for your authentication and authorization needs.
After security, the book moves onto XML and discusses things like SAX, DOM, WebLogic's FastParser, StaX and XML registry. After XML, the book moves into Web services and all of the services provided by WebLogic including the Ant tasks (servicegen) that take any J2EE components and turn them into Web services and JAX-RPC. This chapter also includes a nice section that offers some design considerations when creating or consuming Web services. I really like the JAX-RPC section and it includes a lot of code/Ant samples for creating clients and servers.
The last section of the book deals with Java Management Extensions (JMX). There is also a mention of WLShell in this chapter along with some nice samples. After JMX, the logging architecture of WebLogic is discussed. The book rounds out with a chapter on SNMP and how to use SNMP to monitor WebLogic.
In closing, this is a great book for developers, architects and system or network administrators that work with WebLogic. I think this is a must-own book and fills in all of the gaps that are left with WebLogic's online documentation. I would highly recommend this book to anyone working with WebLogic in any capacity. You are guaranteed to learn something new every time you crack open this book. Run, don't walk and buy this book.