01: package org.hibernate.bytecode.cglib;
02:
03: import org.hibernate.bytecode.ReflectionOptimizer;
04: import net.sf.cglib.reflect.FastClass;
05: import org.hibernate.InstantiationException;
06:
07: import java.io.Serializable;
08: import java.io.ObjectOutputStream;
09: import java.io.IOException;
10: import java.io.ObjectInputStream;
11:
12: /**
13: * The {@link ReflectionOptimizer.InstantiationOptimizer} implementation for CGLIB
14: * which simply acts as an adpater to the {@link FastClass} class.
15: *
16: * @author Steve Ebersole
17: */
18: public class InstantiationOptimizerAdapter implements
19: ReflectionOptimizer.InstantiationOptimizer, Serializable {
20: private FastClass fastClass;
21:
22: public InstantiationOptimizerAdapter(FastClass fastClass) {
23: this .fastClass = fastClass;
24: }
25:
26: public Object newInstance() {
27: try {
28: return fastClass.newInstance();
29: } catch (Throwable t) {
30: throw new InstantiationException(
31: "Could not instantiate entity with CGLIB optimizer: ",
32: fastClass.getJavaClass(), t);
33: }
34: }
35:
36: private void writeObject(ObjectOutputStream out) throws IOException {
37: out.writeObject(fastClass.getJavaClass());
38: }
39:
40: private void readObject(ObjectInputStream in) throws IOException,
41: ClassNotFoundException {
42: Class beanClass = (Class) in.readObject();
43: fastClass = FastClass.create(beanClass);
44: }
45: }
|