Obtaining Commons Lang Problem You want to use Commons Lang because your program needs to use some of the simple utilities this component. Title The Common Java Cookbook; Author(s) Tim O'Brien; Publisher: soundofheaven.info ebook Online, HTML and PDF file ( pages, MB); Language: English; ISBN Apache Jakarta Commons: Reusable Java Components (Will Iverson ). Applied Software Engineering Using Apache Jakarta Commons Apache Jakarta Commons: Reusable Java Components Jakarta Commons Cookbook.
|Language:||English, Spanish, Arabic|
|Genre:||Fiction & Literature|
|ePub File Size:||16.46 MB|
|PDF File Size:||15.65 MB|
|Distribution:||Free* [*Regsitration Required]|
I originally noticed the Jakarta Commons libraries while working with by using the Jakarta Commons, I found I spent less time reinventing the. Jakarta Commons Cookbook. Keith Alcock, TCS Member [email protected] Jakarta Commons is a collection of small, reusable, popular, and free (both as in . Jakarta Commons Cookbook - Ebook download as PDF File .pdf), Text File .txt) or read book online.
Test test3 trimToNull: Tip At the time of writing, the most recent version of the Commons Lang component was Version 2. This class does not define which constants are related to which property. Copy or add commons-lang Calculating String Difference Recipe 2. Even if you are using Java 1. If a width less than four is specified.
Jakarta is a project under the Apache Software Foundation. Be aware that the structure of projects and subprojects in Jakarta is somewhat fluid at the moment. All of these contributions help sustain a living community. This committee manages a number of Jakarta subprojects including the Jakarta Commons.
I wanted to write this book to help attract more people to the concept of Jakarta Commons and to take some time to encourage people to think about how they could contribute to that effort. If you find a typo or a bug. I would encourage any developer to take an interest in a piece of software and watch the development process. Commons components will have higher quality.
Apache is making way for a new generation of projects that will set the standard for open source Java. The Apache Software Foundation is a nonprofit corporation registered in Delaware that supports ongoing collaborative software development according to a set of simple ideals: If there are more people paying attention to the software. All developers who touch open source should be familiar with the various licenses and come to their own conclusions. The Apache license does not place restrictions on people or organizations that wish to redistribute the software it covers.
Read the Apache Software License 2. For more information about open source. We appreciate. An attribution usually includes the title. Answering a question by citing this book and quoting example code does not require permission. You do not need to contact us for permission unless you're reproducing a significant portion of the code.
Copyright O'Reilly Media. Incorporating a significant amount of example code from this book into your product's documentation does require permission. For example: Resource Centers. You can access this page at: CA in the United States or Canada international or local fax O'Reilly maintains a web page for this book. O'Reilly Media. Gautam Guliani. Tom Bergerson.
Stefan Winz. Chris Bobbitt. David Navin. Thanks to Brett McLaughlin. Alex Wolfe. Thanks to Michael Podrazik. I would like to thank my wife. Mike Smith. Susan O'Brien. Thanks also to Karen Tegtmeyer for reviewing this book. Peter Costa. Karen Brunssen. Sultan Meghji. Dan Waite. Susette and Tom. Jim Buswell. Jarret Rackoff. Mark Snell. Kat and Jay. Robert Sorkin.
Thanks to various colleagues: Tim Beynart. Most of all. Happy Halloween. Ray Krueger. Rich Angeletti. In the face of constant challenge. Bob Hartlaub.
Thanks to my family. Primary credit should first go to the Jakarta community and the various individuals who give hours upon hours of time to cut releases and maintain infrastructure. Grandma Barbee and James Sr. Much respect to John Bicknell. Daniel Summers. Bill Martens. Thanks to the Paynes: Jakarta has remained a well spring of innovation. Julian Bleecker.
Mad props to Dave and Nicola. Felix Sheng. His feedback and advice over the course of the past year has been immeasurably valuable. David Winterfeldt. Greg Sandell. Stefan originally introduced me to the Commons in the form of the Digester.
Endless thanks to Andrea and Klaus. Don't waste your time rewriting and maintaining utilities that already exist in Commons Lang.
A few classes in many Jakarta Commons projects have been made obsolete by the release of 1. The bar for backward compatibility will eventually shift. You may be tempted to skip the simple recipes presented in this chapter and continue on to more advanced topics in this text. This package fills gaps present in the standard Java API and provides a number of simple. String manipulation. Even if you are using Java 1.
Jakarta Commons Lang provides classes that augment the fundamental design of the Java programming language. Those of you who are stuck with 1. Sun's Javadoc for the java. This URL will select a mirror. Unzip or untar the binary distribution. Solution To download the latest version of Commons Lang. Click on either the 2. If you search for the term "Commons Lang.
Copy or add commons-lang Find the Commons Lang project section. Discussion Step 5 varies based on your development environment. This will create a directory named commons-lang In a web browser. If you are working with Apache Ant as a build tool. If you are going to use a different version of the Commons Lang component with the recipes in this chapter. It is one of the most widely used libraries in open source Java.
See Also If you are having an issuewith one of the utilities in Commons Lang.. If there is a more recent version of Commons Lang available. If you are looking for the source code.
Although not a guarantee or a promise. At the time of writing. If an interface has been altered or functionality removed. You can also visit the Commons Lang web site at http: To learn more about Commons Lang.
The Jakarta Commons-user mailing list is a place for users of all Commons components to ask questions of other users and Commons developers. If you have a question or a comment.
Solution Join the commons-user jakarta. Discussion Before you join this mailinglist. This mailing list has a high volume of messages. If you know the answer to someone's question. This mailing list is full of Commons users. Once you have read these guidelines. The archives of this mailing list are a great place to look if you are having problems with a particular Commons component.
In the case of Commons Lang. See Also The Commons-user mailing list archive is also available from the Eyebrowse list archive at http: Try not to ask a question that has already been asked and answered in a previous discussion.
Recipe 1. Solution Download the source code from http: Following the same procedure as outlined in Recipe 1. Once you unzip this file, you will have the source to Commons Lang in. If Ant is installed, you can compile or test by running ant compile or ant test. Burke and Brian M. Coyner O'Reilly. The unit tests in this source distribution use the JUnit testing framework.
For more information about JUnit, see the JUnit project page at http: Also see Chapter 4 in the Java. SeeRecipe 1. The following code is an example of a toString method, which uses a reflection builder: Discussion Assume that you have an object named PoliticalCandidate—a bean that represents some information about a presidential candidate.
This bean has a set of properties: Example shows the PoliticalCandidate class using a ReflectionToStringBuilder; the getter and setter methods have been omitted for brevity. Example The process of keeping the contents of a toString method synchronized with a changing object model becomes a chore usually a forgotten one. Commons Lang includes a fairly simple utility designed to automate this chore using reflection. Most importantly, the ReflectionToStringBuilder reflects any future changes that are made to the object model.
The following code demonstrates the output of a string built via reflection: YEAR, ; calendar. APRIL ; calendar. The code above sets the properties of a bean and produces the following output:. As in other cases in this book, I've applied a minimal amount of formatting to the output so that it fits on the printed page.
Your results will be the same in terms of content but will be all on one long line. This is not the most readable piece of information in the world, but it was automatically generated. Keeping a toString method up-to-date in an object model that contains one hundred entities is next to impossible under the constraints of a deadline and a budget. If your objects have meaningfultoString methods, it will be much easier to diagnose problems in your application.
If you use the ReflectionToStringBuilder, you are assured that the message printed out will be accurate; the alternative is to have a message that may or may not be relevant—trusting developers to keep toString methods updated manually. This utility uses the class AccessibleObject in the J2SE reflection package to bypass access modifiers and access private member variables of an object directly. If your system is running under a restrictive SecurityManager, you may need to alter your configuration to allow Commons Lang to bypass these security restrictions.
Only use this reflection builder if you are certain that your code will run in an environment without a restrictive security policy. I use this utility in a system that runs on a few servers in a known location, but if I were writing a reusable library, a reflection builder would not be feasible; if someone were to use my library in an environment with a different security policy, calling a toString may cause problems.
The relevant permission is the suppressAccessChecks permission target of the java. ReflectPermission class. The following example demonstrates atoString method implementation that customizes both style and content: ToStringBuilder; import org.
CallingtoString on this object will produce the following output containing only the two properties specified as parameters to append: Unlike the output shown in Recipe 1. Discussion GeneratingtoString content using reflection saves time, but the trade-off is that the code using reflection prints out every member variable of a given class.
What do you do when the desired behavior is to print out only a few selected variables from a given class? What if your objects are very wide , in that they have many properties that you don't want to print out in a toString method?
There are situations where an object could have a large number of properties or when a particular property of an object might contain a large amount of textual content. In these situations, it would be counterproductive to use ReflectionToStringBuilder to print out every member variable in a class. This builder is then customized by callingappend , which lets you specify the properties you want included in the output. To customize the contents of a ToStringBuilder, you must manually add each property to an instance of a builder.
The append method accepts all primitives, objects, and arrays. Table summarizes the variations of append for integer primitives and objects. Table Variations of ToStringBuilder append ToStringBuilder method append int value append String n, int value append Object value append String n, Object value append int array append Object array append String n int array append String n, Object array append String n, int array, boolean detail Description Appends the value of the integer.
Appends the value of the integer and the name of the property. Appends the toString of an Object. Appends the toString of an Object and the name of the property. Appends the formatted contents of array.
Appends the property name and the size of an array Appends the property name and the full contents of an array. TheToStringStyle class provides a mechanism to customize the output of a ToStringBuilder, and this class contains a few built-in styles.
One example is the ToStringStyle. Another example is the ToStringStyle. The following list provides an example of each of these preset styles:. PoliticalCandidate 1cd2e5f[Jefferson,Thomas]. What's the big deal about toString methods? This is about accuracy and keeping messages relevant in an evolving system.
All useful error messages include a string representation of the object involved in the error. If you get an exception, and you print the value of an object, it is usually clear what is causing that exception. In the absence of sensible logging, it is next to impossible to debug a system without diving directly into a debugger. This is especially true if you are trying to diagnose the cause of an infrequent problem that only affects a tiny percentage of users who only encounter a problem if they perform a very specific action in a specific context.
In these cases, it is helpful to know the internal state of every object involved in the error, and toString is the easiest way to print this out to a log. Automate your toString method, and your error messages will be more meaningful. Example briefly demonstrates these two builders using the PoliticalCandidate bean from the previous two recipes.
Automating hashCode and equals import org. HashCodeBuilder; import org. Discussion HashCodeBuilder has a constructor that takes two integer primitives. These primitives are used as an offset when creating a hash code; both numbers should be odd, nonzero, and prime.
The HashCodeBuilder in Example is configured to use the firstName and the lastName of the PoliticalCandidate object; therefore, two PoliticalCandidate objects with the same first and last name will have identical hash codes. If a hash code depends on every field in a class, you may use reflection to generate a hash code: EqualsBuilder'sappend method accepts all primitives, objects, and arrays, and one advantage of EqualsBuilder is the ability to compare two arrays by simply passing them to append.
When this happens, EqualsBuilder compares every element of an array: TheEqualsBuilder compares the contents of two arrays, checking to see that the corresponding element is equal.
The following output is produced: Is array1 equal to array2? If two classes are equal only if every field is equal, the EqualsBuilder can compare two objects using reflection as in the following code: Be careful when using reflection to automate hashCode and equals , you may get more than you bargained for.
In Example , a candidate is uniquely identified by first and last name; if this bean were mapped to a table in a relational database, firstName and lastName would be a composite key identifying each unique row.
A HashMap or HashSet is similar to a database table in that the identifier is defined by the fields used by hashCode and equals ; putting an equal object with the same hash code into a HashMap replaces the previous entry. A poorly implemented hashCode or equals can have unintended consequences when storing objects in such a data structure. In other words, equals and hashCode should be based off of the properties that uniquely identify a class.
This being the case, the equals function should return true if two PoliticalCandidate objects haveidentical first and last names, and the hash code for two equal objects should be identical.
The hashCode and equals in Example are written to only take into account the firstName and lastName properties. CompareToBuildercan perform a comparison via reflection.
This implementation compares all nonstatic and nontransient member variables in both classes.
The following example demonstrates the use of the reflection builder to implement a compareTo method. In Example Callingappend specifies what variables will be compared and in what order they will be compared.
The order of comparisons plays a key role when a comparison involves multiple member variables. The last property "pushed" onto the CompareToBuilder is the first property to be compared.
The following example demonstrates a customization of the compareTo method. Assume that the default sorting behavior for PoliticalCandidate objects should be lastName and then firstName. Objects are compared by last name. The order of the calls to append are backward—similar to pushing an object onto the top of a stack. Automating the compareTo method via reflection may not compare objects in a way that is consistent with equals. Instead of capturing comparison logic in a compareTo method.
If you are trying to sort a collection of beans. Comparator utilities are discussed in Chapter 4. See Also compareTo methods provide the natural sorting order for a set of objects. The Jakarta Commons Collections project contains a number of supplements to the Comparator interface.
This example takes two arrays and prints them out using ArrayUtils. This method takes any array as an argument and prints out the contents delimited by commas and surrounded by brackets: This example prints the strings array.
Solution UseArrayUtils. If you need to print out the contents of a Collection. It is important to realize that while clone leaves the original array alone.
Ifarray had been an array of Long objects. Example 15 demonstrates the reversal and cloning of a primitive array full of long primitives. Cloning and reversing a primitive array with ArrayUtils import org. Thearray is cloned and reversed. In addition to supporting all primitive arrays. The only difference between Examples Example and Example is the type of array being cloned and reversed. Without the aid of ArrayUtils. The following code completes the same task. J2SE contains a Collections object with a static reverse method.
If you had an array of double primitives. Without Java 1. The next recipe will touch upon an easier method for performing this translation. All arrays have a clone method. If you attempt to clone a null reference. All arrays can be cloned by calling the clone method: Discussion Assume that the following example uses an external library that expects a list of Double objects.
The following example demonstrates the translation from a primitive array to an object array and vice versa: The first translation takes a long and translates the array to a Long. The existing system uses an array of double primitives.
The result from both translations is an array of equal length and equal contents. NaN in our primitive array. While an object array can contain a null element. The second argument to ArrayUtils. TablesTable and Table summarize both the toObject and toPrimitive methods. In this example. The various flavors of ArrayUtils. The primitive array. ArrayUtils offers various static methods to transform between primitive and object arrays.
For more information about autoboxing. When using a primitive array. When using an object array. This example locates strings in a string array and produces the following output: Array contains 'Blue'? The following example demonstrates the use of these three methods: ArrayUtils calls the equals method to check for a matching array element. ArrayUtils compares the value in question to each element of an array until a match is found. If the array contains the element. Example demonstrates how to establish that the value is contained within an array and how to locate the index for each matching element.
In the next example. Searching an array using ArrayUtils. ArrayUtils isn't going to change your application's architecture. The simple savings you gain from ArrayUtils is one less for loop you have to test and maintain: See Chapter 4 for more information about querying collections with predicates. Instead of using the three methods defined in this recipe. See Also Chapter 4 contains a number of recipes dealing with Predicate objects and filtering collections.
Example takes an Object representing atomic symbols and atomic weights and turns it into a Map retrieving the atomic weight for hydrogen.
Creating a Map from an Object[ ][ ] import org. Example demonstrates the creation of such a Map. This is a simple way to quickly create a Map in a piece of code. Commons Collections contains utility methods for retrieving Double objects as double primitives.
The toMap method then extracts the first item in each array as the key and the second item as the value. Double objects are added to a Map.
See Recipe 5. See Also In the previous example. Discussion Instead of calling weights. The following example outputs the international standard for representing a date and time in a given time zone: Solution UseFastDateFormat. This produces the following output displaying the current time with time-zone information: It is currently: If multiple threads are using any Java formatting object there is a possibility of deadlock.
See Also Java date and time classes have a number of issues—concurrency issues with date formatting being "only the tip of the iceberg.
If your systems use a shared instance SimpleDateFormat across multiple threads. In addition to the format demonstrated in the previous example. Sun's SimpleDateFormat class can generate time zones without the colon separator. In fact. Stephen Colebourne. The world is getting smaller by the day.
Isn't SimpleDateFormat enough? The simple answer is no. For more information about Joda. See Table For more information about nonthread-safe implementations of SimpleDateFormat. For more information about the ISO date and time standards. It is unclear if Sun has addressed this issue in Java 1. Sun specifically states that all of the format classes Format. Assuming that the current date is March This example creates an object representing the current time and rounds this date to the nearest hour.
The following example demonstrates the use of DateUtils. HOUR Calendar. YEAR sets the day of the year to one and the time to the first instance of the nearest year: Are you certain that you woke up at 9: This previous code rounds to the nearest year. In DateUtils. Nearest Year: HOUR field at the very least—recording a general time.
When you round or truncate to a field. It would be appropriate to round this time to theCalendar. YEAR Calendar. Rounding a Date to a Calendar. If your wokeUpDate object is 1: Joda contains an entire package devoted to date. If the Calendar object was March. March 16 This code will print out Mon Mar 01 One would think that the middle of March is the 15th? Isn't that date the famous Ides of March—the date on which Brutus betrayed Caesar?
According to DateUtils. If your frustration is boiling over. Truncating a Date object at Calendar. Solution UseDateUtils. Example truncates a date at the month field and the hour field.. The day. When a Date is truncated to the Calendar. MONTH import org. MONTH field. When a Date is truncated. See Also DateUtils. These can solve a linear system of equations. In other words, matrix arithmetic is implemented.
Opens up entire regions of electrical circuit modelling and control systems theory, for example. For statistics, simple regressions between two variables is now computed. And complex numbers can be explicitly handled with the ComplexMath class.
It can be appreciated that the new Commons maths classes fill longstanding gaps in the default maths ability of Java, which has been weak in numerical methods and high performance computing. It greatly strengthens the credibility of developing applications in those fields with Java. If you have used any of the open-source technologies offered at apache.
While it is not a comprehensive book, each chapter takes a look at various areas of Java development and which of the Commons libraries provide classes and methods to handle common routines. Personally, I didn't realize just how cool some of the Math functions are - so that was an interesting read. I like the fact that there was a lot of source examples in the book, too. I think O'Brien does a nice job at balancing the Commons stuff with the topics that are better handled by a more focused book.
For example, he just touches on XML and Log4J - so if you're looking for a book that has details on getting logging up, running and configured for example , this isn't it. If you want to know if you should incorporate any of the Jakarta Commons stuff in your development, this book will give you plenty of reasons why. How many times do you find a solution written for your last project to be equally applicable to your current problem but too closely coupled to reuse without adapting code in copy-and-paste style?
Even worse, when bug is found you have to patch the same solution differently amongst relevant projects. While open source and Java mean free, community support, and options, Jakarta Commons bring the next level of productivity and ease of maintenance.
Being one of the contributors, the author introduces the audience components refactored from more elaborated projects in an easily referenced form of tips and cautions. How many times do you end up disappointed when a primitive function is expected from the language with its Javadoc being searched through? Even though you find it from the latest release, sometimes upgrading the runtime environment is not an option.
Language supplements are described like Jakarta Commons being the lead of the direction the language should be steered towards. Text manipulation is so universal where handy utilities are illustrated. JavaBeans, a simple yet versatile convention, deserve a helper library that eases your life. By practical to conceptual ideas, the math library is employed to estimate the amount of time left in long running processes.
Arbitrary complexity of comparison and sorting is managed by means of functors. The author intends to be neither comprehensive nor surveying options to a problem. Nonetheless, it is inconvenient to have no source available for download. With the book in its first edition, there exists missing cross reference and code inaccuracy sometimes is obvious.
By including instructions for the use with Maven, those new to the framework may be confused. After the book is glanced through, it is really desirable to see how the author can deploy the same way of presentation to areas where no thorough documentation of good quality ever exists. See all 9 reviews. Amazon Giveaway allows you to run promotional giveaways in order to create buzz, reward your audience, and attract new followers and customers.
Learn more about Amazon Giveaway. The Jakarta Pandemic. Programming Jakarta Struts. Thing From Jakarta. Java Frameworks and Components: Accelerate Your Web Application Development. Jakarta Undercover 3: Forbidden City. Recommend Documents.
Apache Jakarta-Tomcat For all the people which doesn't have enough money to buy good books. For all the rippers. Mastering Apache Velocity No part Reusable Java Components".