Pages

Sunday, October 21, 2007

Murach's Java SE 6

There have been a number of books and tutorials written about Java. The gold standard for me has always been "Learning Java" by Patrick Niemeyer and Johnathan Knudsen (O'Reilly & Associates). I have had a number of new programmers, enthusiasts, and members of the JUG tell me it is information overload. The book does contain a lot of information in its 828 page heft. As a result, I have been looking for a book just for beginners. I have found it.

I just completed reviewing Murach's Java SE 6. It is a very good resource for learning Java. This book does an excellent job of providing a firm basis for understanding the technology. The book is clearly and concisely written. The book is divided into 5 major sections which cover the essential Java skills to advanced topics on data access programming using XML and JDBC.

The teaching style is very clever. It typically takes the form of a page of information with facing page with examples. I found this to be very important in getting sometimes difficult points across. I typically take the "Show me the code" philosophy, and this style works for me.

The other technique that used is to convey a purpose for learning Java. This is done by using the various topics as building blocks to create an application. The final result is a completed application at the end of the book. It encompasses the lessons learned, and gives the new programmer a sense of accomplishment with a completed functional application at the end of the book. I love it.

I have found that people learn better with functional code examples. This book is replete with them. One of my greatest annoyances is to have code samples which do not work. This clouds the ability to learn because it forces the beginning programmer to question their abilities. The shroud of uncertainty should not be because the gold standard code is incorrect. I am pleased to note that I tried a number of code examples and they all worked.

My favorite section is Data access programming with Java. Chapter 20 covers working with XML. This is a must for any programmer. XML is the new black, and anything that can help you learn this important technology is a must. In chapter 20, the topic of StAX is covered. This is the best simplified example of using StAX I have seen. After reading the information, and performing the examples, I felt I had a better understanding of this technology.

I only have a few minor negative points to mention: the title is a little misleading. The majority of the information in the book really details Java SE 5 enhancements with two notable exceptions: StAX and an introduction to Derby (Java DB). The water is chummed in Chapter 1 where he mentions that C# runs faster than Java. This is a point that needs to be proven. Java 6 SE is almost as fast as C/C++ on bare metal. I have not heard anything like this for C#. I will forgive this remark though since the rest of the book is so well written.

My overall impression is that the book is an outstanding resource for new and seasoned programmers. This is a great book to add to the reference shelf.

The publisher has a number of code samples, student workbooks, and tutorials:

Student and Trainer Resources (Publisher)

Saturday, October 20, 2007

Quartz Job Scheduler on Glassfish

I have discovered that get a Quartz Job Scheduler to run in glassfish, you need to change the server.policy file to add the following information:

///////////////////////////////////////////////////////////////////////////////////////////////
// Quartz Scheduler
///////////////////////////////////////////////////////////////////////////////////////////////
grant codeBase "file:${com.sun.aas.instanceRoot}/applications/j2ee-modules/QuartzScheduler/-" {
permission java.lang.RuntimePermission "getClassLoader";
// Required for ShutdownHookPlugin
permission java.lang.RuntimePermission "shutdownHooks";
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
permission javax.management.MBeanPermission "com.sun.enterprise.admin.runtime.BaseRuntimeMBean#", "registerMBean";
permission javax.management.MBeanServerPermission "findMBeanServer";
};