View Javadoc

1   package org.apache.ojb.otm.copy;
2   
3   /* Copyright 2003-2005 The Apache Software Foundation
4    *
5    * Licensed under the Apache License, Version 2.0 (the "License");
6    * you may not use this file except in compliance with the License.
7    * You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  import java.io.*;
19  import org.apache.ojb.broker.PersistenceBroker;
20  
21  /**
22   * Does in-memory serialization to achieve a copy of the object graph.
23   *
24   * @author matthew.baird
25   * @see ObjectCopyStrategy
26   */
27  public final class SerializeObjectCopyStrategy implements ObjectCopyStrategy
28  {
29  	/**
30  	 * This implementation will probably be slower than the metadata
31  	 * object copy, but this was easier to implement.
32  	 * @see org.apache.ojb.otm.copy.ObjectCopyStrategy#copy(Object)
33  	 */
34  	public Object copy(final Object obj, PersistenceBroker broker)
35  			throws ObjectCopyException
36  	{
37  		ObjectOutputStream oos = null;
38  		ObjectInputStream ois = null;
39  		try
40  		{
41  			final ByteArrayOutputStream bos = new ByteArrayOutputStream();
42  			oos = new ObjectOutputStream(bos);
43  			// serialize and pass the object
44  			oos.writeObject(obj);
45  			oos.flush();
46  			final ByteArrayInputStream bin =
47  					new ByteArrayInputStream(bos.toByteArray());
48  			ois = new ObjectInputStream(bin);
49  			// return the new object
50  			return ois.readObject();
51  		}
52  		catch (Exception e)
53  		{
54  			throw new ObjectCopyException(e);
55  		}
56  		finally
57  		{
58  			try
59  			{
60  				if (oos != null)
61  				{
62  					oos.close();
63  				}
64  				if (ois != null)
65  				{
66  					ois.close();
67  				}
68  			}
69  			catch (IOException ioe)
70  			{
71  				// ignore
72  			}
73  		}
74  	}
75  }