/*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * License: GNU Lesser General Public License (LGPL), version 2.1 or later.
 * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
 */
package org.hibernate.proxy.pojo.javassist;

import java.io.Serializable;
import java.lang.reflect.Method;

import org.hibernate.proxy.AbstractSerializableProxy;
import org.hibernate.proxy.HibernateProxy;
import org.hibernate.type.CompositeType;

Serializable placeholder for Javassist proxies
/** * Serializable placeholder for Javassist proxies */
public final class SerializableProxy extends AbstractSerializableProxy { private final Class persistentClass; private final Class[] interfaces; private final String identifierGetterMethodName; private final Class identifierGetterMethodClass; private final String identifierSetterMethodName; private final Class identifierSetterMethodClass; private final Class[] identifierSetterMethodParams; private final CompositeType componentIdType; public SerializableProxy( String entityName, Class persistentClass, Class[] interfaces, Serializable id, Boolean readOnly, Method getIdentifierMethod, Method setIdentifierMethod, CompositeType componentIdType) { super( entityName, id, readOnly ); this.persistentClass = persistentClass; this.interfaces = interfaces; if ( getIdentifierMethod != null ) { identifierGetterMethodName = getIdentifierMethod.getName(); identifierGetterMethodClass = getIdentifierMethod.getDeclaringClass(); } else { identifierGetterMethodName = null; identifierGetterMethodClass = null; } if ( setIdentifierMethod != null ) { identifierSetterMethodName = setIdentifierMethod.getName(); identifierSetterMethodClass = setIdentifierMethod.getDeclaringClass(); identifierSetterMethodParams = setIdentifierMethod.getParameterTypes(); } else { identifierSetterMethodName = null; identifierSetterMethodClass = null; identifierSetterMethodParams = null; } this.componentIdType = componentIdType; } @Override protected String getEntityName() { return super.getEntityName(); } @Override protected Serializable getId() { return super.getId(); } protected Class getPersistentClass() { return persistentClass; } protected Class[] getInterfaces() { return interfaces; } protected String getIdentifierGetterMethodName() { return identifierGetterMethodName; } protected Class getIdentifierGetterMethodClass() { return identifierGetterMethodClass; } protected String getIdentifierSetterMethodName() { return identifierSetterMethodName; } protected Class getIdentifierSetterMethodClass() { return identifierSetterMethodClass; } protected Class[] getIdentifierSetterMethodParams() { return identifierSetterMethodParams; } protected CompositeType getComponentIdType() { return componentIdType; }
Deserialization hook. This method is called by JDK deserialization. We use this hook to replace the serial form with a live form.
Returns:The live form.
/** * Deserialization hook. This method is called by JDK deserialization. We use this hook * to replace the serial form with a live form. * * @return The live form. */
private Object readResolve() { HibernateProxy proxy = JavassistProxyFactory.deserializeProxy( this ); setReadOnlyBeforeAttachedToSession( ( JavassistLazyInitializer ) proxy.getHibernateLazyInitializer() ); return proxy; } }