Distributed Objects using Reflective Serialization/Deserialization
Distributed Objects using Reflective Serialization/Deserialization
Assignment 3 Distributed Objects using Reflective Serialization/Deserialization The goal of this assignment is to create two programs (on two separate computers) that communicate with each other over a network connection (see diagram below). The Sender program will create one or more arbitrary objects, serialize these objects into a JDOM document, and then send this document as a stream of bytes to the Receiver program using a socket connection. The Receiver program will convert the incoming byte stream into a JDOM document, deserialize the document into objects, and display the objects to screen. byte stream (Network) JDOM document objects Sender Object Creator Serializer Socket objects JDOM document Socket Deserializer Visualizer (Object Inspector) Receiver The Object Creator This part of your system will create arbitrary objects under control of the user. Allow the user to create one or more objects from a selection of objects using some sort of text-based menu system or GUI. You must demonstrate that your system can handle the following kinds of objects: • A simple object with only primitives for instance variables. The user of your program must also be able to set the values for these fields. • An object that contains references to other objects. Of course, these other objects must also be created at the same time, and their primitive instance variables must be settable by the user. Your program must also be able to deal with circular references (i.e. objects connected in a graph). • An object that contains an array of primitives. Allow the user to set the values for the array elements to arbitrary values. • An object that contains an array of object references. The other objects must also be created at the same time. • An object that uses an instance of one of Java’s collection classes to refer to several other objects. These objects, too, must be created at the same time. The Serializer Serialization will be implemented in a Java class called Serializer, and will be invoked using the method: public org.jdom.Document serialize(Object obj) This method will serialize the complete state of the object passed in as parameter, and produce an XML document that can be stored to file, printed out, or sent over a network connection. Use the facilities provided by JDOM to help you do this, in particular the Document and XMLOutputter classes. The XML document must have one root element with the tag-name serialized. The object, and any other objects that may need to be serialized, will be nested within the root element, listed one after the other. For example: <serialized <object . . . . . . </ obj ect <object . . . . . . </ obj ect </serialized The element object will have two attributes: class and id. The class’s value will be the name of the class of the object, and the id’s value will be object’s unique identifier number, most likely created using IdentityHashMap. For example: <object class=’’Zoo’’ id=’’0’’ Nested within each object element will be 0 or more field elements. Each field element will have two attributes: name and declaringclass. The name’s value will be the name of the field, and the declaringclass’s value will be the name of the field’s declaring class. For example: <fiel d na me=’’city’’ declaringclass=’’Zoo’’ . . . </fiel d If the type of the field is a primitive, store the primitive as content of a value element. For example: <fiel d . . . <val ue23. 7</ val ue </fiel d If the field is a reference to another object, store the id of that object as content of a reference element. For example: <fiel d . . . <reference5</reference </fiel d Of course, the object being referred to must also be serialized, and will be another object element nested inside the root element. Array objects will be similar to the object element described above, except that an additional length attribute is used, and each element of the array will be stored as content to a value or reference element, depending on the component type. For example: <object class=’’[ C’’ id=’’8’’ lengt h=’’5’’ <val ueS</ val ue <val uem</ val ue <val uei </ val ue <val uet </ val ue <val ueh</ val ue </ obj ect The Network Connection Java provides the java.net.Socket class to help implement a network connection between two programs. Initially, while testing your system, you can run the two programs on the same computer. However, when demonstrating your system to the TAs, you must show that it works over a network connecting two separate computers. The Deserializer Deserialization will be implemented in a Java class called Deserializer, and will be invoked using the method: public Object deserialize(org.jdom.Document document) This method will deserialize an XML document passed in as parameter, returning the reconstituted object (and any objects it refers to). Use the facilities provided by JDOM to help with this, in particular the Document and SAXBuilder classes. The Visualizer This part of your system displays the deserialized objects to screen. You can use a text-based or graphical user interface for this. The Object Inspector you created in Assignment 2 may be helpful here. Be sure that this part of the system shows that the deserialized objects are properly recreated. Other Requirements You must demonstrate a working program to your TA during lab time shortly after the due date. Make certain you show that all requirements of the system have been fulfilled and implemented correctly. You must also use version control, unit testing, and refactoring throughout this assignment. Submit the following: 1. An electronic copy of your source code, unit tests, your version control logs, and a record of your refactorings (in a Word, PDF or text file call refactorings). Use the Assignment 3 Dropbox Folder in D2L to submit electronically. Advanced Programming Techniques Assignment 3 Grading Student:__________________________________________ Functionality Object Creation Simple object 2 ______ Object with references to other objects 2 ______ Object with array of primitives 2 ______ Object with array of references 2 ______ Object using collection instance 2 ______ Serialization to JDOM document Simple object 2 ______ Object with references to other objects 2 ______ Object with array of primitives 2 ______ Object with array of references 2 ______ Object using collection instance 2 ______ Sending/Receiving of byte steam 4 ______ Deserialization from JDOM document Simple object 2 ______ Object with references to other objects 2 ______ Object with array of primitives 2 ______ Object with array of references 2 ______ Object using collection instance 2 ______ Object Visualization 10 ______ Other Requirements Version control (show log files) 4 ______ Unit Tests 4 ______ Refactoring (described in refactorings file) 4 ______ Design Quality 4 ______ Total 60 ______ _____%