Comments
yourfanat wrote: I am using another tool for Oracle developers - dbForge Studio for Oracle. This IDE has lots of usefull features, among them: oracle designer, code competion and formatter, query builder, debugger, profiler, erxport/import, reports and many others. The latest version supports Oracle 12C. More information here.
Cloud Expo on Google News
SYS-CON.TV

2008 West
DIAMOND SPONSOR:
Data Direct
SOA, WOA and Cloud Computing: The New Frontier for Data Services
PLATINUM SPONSORS:
Red Hat
The Opening of Virtualization
GOLD SPONSORS:
Appsense
User Environment Management – The Third Layer of the Desktop
Cordys
Cloud Computing for Business Agility
EMC
CMIS: A Multi-Vendor Proposal for a Service-Based Content Management Interoperability Standard
Freedom OSS
Practical SOA” Max Yankelevich
Intel
Architecting an Enterprise Service Router (ESR) – A Cost-Effective Way to Scale SOA Across the Enterprise
Sensedia
Return on Assests: Bringing Visibility to your SOA Strategy
Symantec
Managing Hybrid Endpoint Environments
VMWare
Game-Changing Technology for Enterprise Clouds and Applications
Click For 2008 West
Event Webcasts

2008 West
PLATINUM SPONSORS:
Appcelerator
Get ‘Rich’ Quick: Rapid Prototyping for RIA with ZERO Server Code
Keynote Systems
Designing for and Managing Performance in the New Frontier of Rich Internet Applications
GOLD SPONSORS:
ICEsoft
How Can AJAX Improve Homeland Security?
Isomorphic
Beyond Widgets: What a RIA Platform Should Offer
Oracle
REAs: Rich Enterprise Applications
Click For 2008 Event Webcasts
Java Serialization without Serializable Interface
As you know in case of Core Java to serialize an object it is mandatory to implement Serializable interface and serialVersionUID

The title of this article seems unpleasant as it talks about serializing java object graph without the use of Serializable interface. It is true in case of Core Java. We know that to serialize a java bean we have to implement Serializable interface ( let us not consider the Externalizable interface ).In this article I will show how it is possible to serialize a java object without implementing Serializable interface using a library from a famous organisation called Jboss. In this small post I will make you familiar with “Jboss Serialization”.

Technicalities
As you know in case of Core Java to serialize an object it is mandatory to implement Serializable interface and serialVersionUID( optional ). There are certain situations in the project development where we want to serialize the object but that particular object does not implement Serializable interface and we may not have access to the source code. In this case I am not saying that it is impossible to we will find it difficult to serialize the object graph. But the introduction of Jboss Serialization API made it very simple to serialize an object irrespective of the serialization specification.  To use “Jboss Serialization” you have to download the zip file available in jboss site. The link for download is given below in the references section. You have to note that jboss serialization api depends upon two other libraries called “log4j.jar” and “trove.jar”. You have to put the two jar files in the classpath along with “jboss-serialization.jar”. If you are using normal java project you should have three jar files in your library as mentioned below.

log4j.jar

trove.jar

jboss-serialization.jar

If you are using Maven, you have to use the following dependency as mentioned below.

<dependency>

<groupId>jboss</groupId>

<artifactId>jboss-serialization</artifactId>

<version>4.2.2.GA</version>

</dependency>

How to do

Let us consider a very small example of java Object graph ie Organisation object contains Employee object which has name and id as fields. The code is given below.

package com.ddlab.jboss.serilization;

/**

* This is a plain java class with the fields name and id.

*

* @author <a href="mailto:debadatta.mishra@gmail.com"> Debadatta Mishra (PIKU)

* @Since Jan 2013

*/

public class Employee {

private String name;

private String id;

// ~~ Getter and Setter Methods below

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

}

 

 

 

 

package com.ddlab.jboss.serilization;

/**

* This is a plain java class with the field type {@link Employee}.

*

* @author <a href="mailto:debadatta.mishra@gmail.com"> Debadatta Mishra (PIKU)

* @Since Jan 2013

*/

public class Organisation {

private Employee emp;

public Employee getEmp() {

return emp;

}

public void setEmp(Employee emp) {

this.emp = emp;

}

}

In the above case you can mark that none of the classes implement Serializable interface. Ok, that’s great. To use jboss serialization and deserialization only replace “ObjectOutputStream” to “JBossObjectOutputStream” and “ObjectInputStream” to “JbossObjectInputStream”. Let us see concrete example code below.

package com.ddlab.jboss.serilization;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import org.jboss.serial.io.JBossObjectInputStream;

import org.jboss.serial.io.JBossObjectOutputStream;

/**

* This is a testharness class used to serialize and deserialize the object.

*

* @author <a href="mailto:debadatta.mishra@gmail.com"> Debadatta Mishra (PIKU)

* @Since Jan 2013

*/

public class TestJbossSerilization {

public static void storeObject(Organisation org, String filePath) {

JBossObjectOutputStream objOut = null;

OutputStream out = null;

File file = new File(filePath);

try {

out = new FileOutputStream(file);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

try {

objOut = new JBossObjectOutputStream(out);

objOut.writeObject(org);

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if (objOut != null)

objOut.close();

if (out != null)

out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

System.out

.println("Object Organisation is serialized successfully in the path "

+ file.getAbsolutePath());

}

public static void retrieveObject(String filePath) {

InputStream inStream = null;

try {

inStream = new FileInputStream(filePath);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

JBossObjectInputStream objIn = null;

try {

objIn = new JBossObjectInputStream(inStream);

} catch (IOException e) {

e.printStackTrace();

}

Organisation org;

try {

org = (Organisation) objIn.readObject();

System.out.println("Employee Name : " + org.getEmp().getName());

System.out.println("Employee Id : " + org.getEmp().getId());

} catch (IOException e) {

e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} finally {

try {

if (objIn != null)

objIn.close();

if (inStream != null)

inStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

public static void main(String[] args) throws Exception {

String filePath = "data/org.ser";

Organisation org = new Organisation();

Employee emp = new Employee();

emp.setId("111");

emp.setName("Deba");

org.setEmp(emp);

/*

* Serialize the object graph

*/

storeObject(org, filePath);

/*

* De-serialize the object graph

*/

retrieveObject(filePath);

}

}

You can download the complete project from the following link.

https://www.dropbox.com/s/drkl2rqxizt1x3a/jbossserialization.zip

So we have achieved serialization of java object graph without implementing Serializable interface. There are certain benefits of using it.

  1. There is no need to implement Serializable interface.
  2. No need to define serialVersionUID.
  3. Since it uses the concept of smart cloning, the process of serialization if 10 times faster.

Conclusion

I hope you will enjoy my article on serialization. You can download and learn for your personal use only. For any queries contact me on debadatta.mishra@gmail.com.

References

http://www.jboss.org/serialization

http://www.jboss.org/file-access/default/members/serialization/downloads/jboss-serialization-1.0.3.GA.zip

http://mvnrepository.com/artifact/jboss/jboss-serialization/4.2.2.GA

http://en.wikipedia.org/wiki/Serialization

About Debadatta Mishra
Debadatta Mishra is a senior Java developer with five years of experience in the field of Java and related technologies. He has written many articles on Java-related technologies on the Internet.

Latest AJAXWorld RIA Stories
CloudEXPO | DevOpsSUMMIT | DXWorldEXPO Silicon Valley 2019 will cover all of these tools, with the most comprehensive program and with 222 rockstar speakers throughout our industry presenting 22 Keynotes and General Sessions, 250 Breakout Sessions along 10 Tracks, as well as our ...
Your job is mostly boring. Many of the IT operations tasks you perform on a day-to-day basis are repetitive and dull. Utilizing automation can improve your work life, automating away the drudgery and embracing the passion for technology that got you started in the first place. In...
Technological progress can be expressed as layers of abstraction - higher layers are built on top of lower layers treating them as abstract black boxes with known interfaces. A serverless approach represents an inflection point that entirely separates the runtime layer from the u...
Whenever a new technology hits the high points of hype, everyone starts talking about it like it will solve all their business problems. Blockchain is one of those technologies. According to Gartner's latest report on the hype cycle of emerging technologies, blockchain has just ...
Big Switch's mission is to disrupt the status quo of networking with order of magnitude improvements in network e ciency, intelligence and agility by delivering Next-Generation Data Center Networking. We enable data center transformation and accelerate business velocity by delive...
Subscribe to the World's Most Powerful Newsletters
Subscribe to Our Rss Feeds & Get Your SYS-CON News Live!
Click to Add our RSS Feeds to the Service of Your Choice:
Google Reader or Homepage Add to My Yahoo! Subscribe with Bloglines Subscribe in NewsGator Online
myFeedster Add to My AOL Subscribe in Rojo Add 'Hugg' to Newsburst from CNET News.com Kinja Digest View Additional SYS-CON Feeds
Publish Your Article! Please send it to editorial(at)sys-con.com!

Advertise on this site! Contact advertising(at)sys-con.com! 201 802-3021


SYS-CON Featured Whitepapers
Most Read This Week
ADS BY GOOGLE