2 of 2 people found the following review helpful
- Published on Amazon.com
With great pleasure I will try to convey my impressions about this book, as the author of it is Nick Haralabidis (which maintains the popular blogs JDeveloper FAQ and ADF Code Bits) with whom I collaborated on the successful and complex task of Oracle Forms 6i migration to ADF 11g project for Mednet International.
Working on ADF for nearly a decade, is indeed striking that today there are countless sources of information, whether coming from official documentation, books or bloggers. The fundamental difference of JDeveloper Cookbook (which more accurately should have been called ADF Cookbook) is that it requires a thorough knowledge of the ADF and is not engaged in the interpretation or description of the main concepts; on the contrary it proposes solutions to real life development issues, that a structured team will encounter in a large scale project, demanding a solid and uniform treatment.
The first chapter ("Prerequisites to Success: ADF Project Setup and Foundations") has to do with setting up the JDeveloper environment in Linux, the creation of base classes for a project, the libraries partitioning, the logging, creating page templates and the coverage of a custom generic actions framework. The library recipe, the page templates and the base classes are covered in great detail in the Oracle documentation and perhaps a simple reference of them would suffice. The second chapter ("Dealing with Basics: Entity Objects") contains recipes for generating keys out from Oracle Sequences, managing the life cycle of an entity (doDML, removal, child removal, validation) and although there are overlaps in the documentation is a very good chapter. The same applies to "A Different Point of View: View Object Techniques" which describes the iteration through the records of a view object, changing the updateable and queriable properties of an attribute programmatically, the maintenance of current row before and after a rollback, the detection of new records, the modification of the WHERE clause, etc. Perhaps it would be preferable to merge it conceptually with the next chapter ("Important Contributors: List of Values, Bind Variables, View Criteria ") which also covers some already known issues (cascade lovs, lov switcher, view criteria) but also adds new material such as changing or cleaning the bind variables or making case-insensitive queries.
Moving to Chapter 5 ("Putting them all together: Application Modules") you will find recipes on how to create a Web Service from ADF BC and respectively of how to consume it as a Web Service client and a good example of activate / passivate framework behavior modification. Also there is coverage of statistics retrieval in terms of Application Modules, shared LOV modules and the extension of the Database Transaction Factory. Then, you will browse techniques for task flows initialization (with custom methods from the Application Module or from ADF task flow initializer), how to invoke a task flow URL, create a train flow or how to get information through the MDS. The chapter on ADF Faces introduces a few new elements as themes for customization of the af: query, usage the af: tree, the af: poll, the af: carousel, the af: selectManyShuttle or pop-up for row editing are found in the official documentation. But here stands out a recipe for page templates to reuse popups and also an indicative example for file export operation, despite the unfortunate realization of it (where the file contents are contained in a java.lang.String variable)
"In Backing not Baking: Bean Recipes" chapter there are useful recipes for an af: popup to alert for pending changes, a custom row selection listener, an excellent reference for custom query listeners and for a popup to inform for long-duration transactions. There is also an example of using the af: iterator in a custom data collection and an unnecessary reference to session variables (which are discouraged by the framework) Chapter 9 ("Handling Security, Session Timeouts, Exceptions, and Errors") does not add something new on the security aspect (for example there is coverage of common knowledge about the ADF Security Wizard, the programmatic access to the security context, an example of a custom login page) In contrast, most intriguing recipes are those that describe the session timeout management and handling errors from a custom exception handler that transforms error messages coming from the ADF BC layer.
The deployment chapter (Deploying ADF Applications) describes among others the use of ojdeploy tool to automate tasks (build and deploy) over Hudson CI. The next chapter (Refactoring, Debugging, Profiling, and Testing) I would say that describes mostly the theoretical capabilities of the platform rather than providing practical recipes for its usage. Topics covered here are the database synchronization of the ADF BC, the refactoring, the features of remote debugging and CPU profiling (which incidentally is not supported in Linux) Also how to manage log messages and the usage of JUnit for unit testing. There is compensation for this material in the last chapter (Optimizing,
Fine-tuning, and Monitoring) where there are some good tips for optimizing the ADF BC (but relevant techniques for ADF Faces are lacking), there is an excellent recipe for Weblogic Work Managers and finally there is a poor report from the ADF standpoint about JRockit Mission Control to monitor a system.