Suppose I have 2 classes
1) Person having person name = "Yogesh";
2) User having username = "User" extends Person and implements Serializable.
What will be the values printed if I serialize and deserialize the User object?
I guessed it wrongly and answered that personname will not get printed as Person class is not serializable. BUT THAT WAS WRONG !!!
Both the values will be stored and retrieved correctly. The reason I don't know, but, this scenario, I have tested on PC
Monday, February 21, 2011
Saturday, February 19, 2011
What is serialVersionUID?
Source : http://www.javablogging.com/what-is-serialversionuid/
Most people learn about serialVersionUID after they write their first serializable object (I know I did). You add ‘implements Serializable’ and in the next moment your IDE starts complaining… so what’s up?
Lets look at a simple example to see what meaning that variable has. In the example we will use the class SerializeMe shown below:
Field data represents some information stored in the class. Class implements the Serializable interface, so my IDE automatically offered me to declare the serialVersionUID field. Lets start with value 1 set there.
We will also need some class that will serialize and deserialize the SerializeMe class. Here it is:
This code will serialize an instance of class SerializeMe to a file and then deserialize it back. Now let’s run the main function! You should get output that says:
What is serialVersionUID?
Most people learn about serialVersionUID after they write their first serializable object (I know I did). You add ‘implements Serializable’ and in the next moment your IDE starts complaining… so what’s up?
Lets look at a simple example to see what meaning that variable has. In the example we will use the class SerializeMe shown below:
class SerializeMe implements Serializable { private static final long serialVersionUID = 1L; private int data; public SerializeMe (int data) { this.data = data; } public int getData() { return data; } }
Field data represents some information stored in the class. Class implements the Serializable interface, so my IDE automatically offered me to declare the serialVersionUID field. Lets start with value 1 set there.
We will also need some class that will serialize and deserialize the SerializeMe class. Here it is:
public class UIDTester { public static void main(String... strings) throws Exception { File file = new File("out.ser"); FileOutputStream fos = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fos); SerializeMe serializeMe = new SerializeMe(1); oos.writeObject(serializeMe); oos.close(); FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis); SerializeMe dto = (SerializeMe) ois.readObject(); System.out.println("data : " + dto.getData()); ois.close(); } }
This code will serialize an instance of class SerializeMe to a file and then deserialize it back. Now let’s run the main function! You should get output that says:
data : 1 |
Tuesday, February 15, 2011
Best practices in Collections
If you do need a synchronized map, you can use the static method synchronizedMap(...) in class Collections to add synchronization to a regular map. Don't use the legacy collection classes, such as Hashtable. Example:
// A regular, unsynchronized map Map<Integer, String> map = new HashMap<Integer, String>(); // Wrap it to add synchronization Map<Integer, String> synchedMap = Collections.synchronizedMap(map);
Common Mistakes in Collections
Source : http://javabeanz.wordpress.com/2007/07/13/treemap-vs-hashmap/
Classes like Integer, String, Double etc implements Comparable interface. So if we are to use an object of a custom class as the key, ensure that it’ s class implements the Comparable interface.
A common mistake that everyone does is not to override the hashcode(). If we are failing to do so, map.get(new MyCustomKey()); may not give you what you were expecting. So it is always advised to override the hashCode() if objects of that class is being used as a key.
When you are using your custom object as a key to a HashMap, make sure you do the following
1) implement Comparable
2) override compareTo method, and give its implementation
3) override hashCode and equals method, and give their implementation.
4) Always, make your key object as immutable, so that it is not changed after you add it to a HashMap as key.
Classes like Integer, String, Double etc implements Comparable interface. So if we are to use an object of a custom class as the key, ensure that it’ s class implements the Comparable interface.
public class MyCustomKey implements Comparable { private int value; public MyCustomKey(int value) { this.value = value; } public int compareTo (MyCustomKey key) { int comparison = 0; // Note: // Return -1 if this.value < key.value // Return 0 if this.value = key.value // Return 1 if this.value > key.value return (comparison); } }
A common mistake that everyone does is not to override the hashcode(). If we are failing to do so, map.get(new MyCustomKey(
public class MyCustomKey implements Comparable { private int value; public MyCustomKey(int value) {} public int compareTo (MyCustomKey key) {} public int hashCode() { // Note: // If two objects are equal then their corresponding hashCode () // should return the same value too. return (this.value * 199); } }
When you are using your custom object as a key to a HashMap, make sure you do the following
1) implement Comparable
2) override compareTo method, and give its implementation
3) override hashCode and equals method, and give their implementation.
4) Always, make your key object as immutable, so that it is not changed after you add it to a HashMap as key.
Sunday, February 13, 2011
Struts2 vs. Struts1
1. Servlet Dependency:
Actions in Struts1 have dependencies on the servlet API since theHttpServletRequest and HttpServletResponse objects are passed to the execute method when an Action is invoked but in case of Struts 2, Actions are not container dependent because they are made simple POJOs. In struts 2, the servlet contexts are represented as simple Maps which allows actions to be tested in isolation. Struts 2 Actions can access the original request and response, if required. However, other architectural elements reduce or eliminate the need to access the HttpServetRequest or HttpServletResponse directly
Struts 2 Iterator tag example
Source : http://www.mkyong.com/struts2/struts-2-iterator-tag-example/
Struts 2 Iterator tag is used to iterate over a value, which can be any of java.util.Collection or java.util.Iterator. In this tutorials, you will create a list variable, use Iterator tag to loop over it and get the iterator status with IteratorStatus.
1. Action
An Action class with a List property , which contains variety of delicious “KFC combo meals”.
IteratorKFCAction
Struts 2 Iterator tag example
Struts 2 Iterator tag is used to iterate over a value, which can be any of java.util.Collection or java.util.Iterator. In this tutorials, you will create a list variable, use Iterator tag to loop over it and get the iterator status with IteratorStatus.
1. Action
An Action class with a List property , which contains variety of delicious “KFC combo meals”.
IteratorKFCAction
package com.mkyong.common.action; import java.util.ArrayList; import java.util.List; import com.opensymphony.xwork2.ActionSupport; public class IteratorKFCAction extends ActionSupport{ private List<String> comboMeals; public Listlt;String> getComboMeals() { return comboMeals; } public void setComboMeals(List<String> comboMeals) { this.comboMeals = comboMeals; } public String execute() { comboMeals = new ArrayList<String>(); comboMeals.add("Snack Plate"); comboMeals.add("Dinner Plate"); comboMeals.add("Colonel Chicken Rice Combo"); comboMeals.add("Colonel Burger"); comboMeals.add("O.R. Fillet Burger"); comboMeals.add("Zinger Burger"); return SUCCESS; } }
Friday, February 4, 2011
Column names in hbm.xml
When i added a field in my pojo class, with name xMoveCompatibleItem and I used eclipse's inbuilt feature to generate getter and setter methods
Eclipse generated methods with the following names:
getXMoveCompatible()
setXMoveCompatible(String)
Note that X and M are both capital and consecutive, which was creating a problem for weblogic. It was not able to find the getter method for that property.
Do take care while adding a property, if the second letter of the property name is in CAPITAL
Eclipse generated methods with the following names:
getXMoveCompatible()
setXMoveCompatible(String)
Note that X and M are both capital and consecutive, which was creating a problem for weblogic. It was not able to find the getter method for that property.
Do take care while adding a property, if the second letter of the property name is in CAPITAL
Subscribe to:
Posts (Atom)