@ -16,7 +16,9 @@
@@ -16,7 +16,9 @@
package org.springframework.orm.jpa ;
import java.io.IOException ;
import java.io.NotSerializableException ;
import java.io.ObjectInputStream ;
import java.io.ObjectStreamException ;
import java.io.Serializable ;
import java.lang.reflect.InvocationHandler ;
@ -360,6 +362,25 @@ public abstract class AbstractEntityManagerFactoryBean implements
@@ -360,6 +362,25 @@ public abstract class AbstractEntityManagerFactoryBean implements
}
}
/ * *
* Delegate an incoming invocation from the proxy , dispatching to EntityManagerFactoryInfo /
* EntityManagerFactoryPlusOperations / the native EntityManagerFactory accordingly .
* /
Object invokeProxyMethod ( Method method , Object [ ] args ) throws Throwable {
if ( method . getDeclaringClass ( ) . isAssignableFrom ( EntityManagerFactoryInfo . class ) ) {
return method . invoke ( this , args ) ;
}
else if ( method . getDeclaringClass ( ) . equals ( EntityManagerFactoryPlusOperations . class ) ) {
return method . invoke ( this . plusOperations , args ) ;
}
Object retVal = method . invoke ( this . nativeEntityManagerFactory , args ) ;
if ( retVal instanceof EntityManager ) {
EntityManager rawEntityManager = ( EntityManager ) retVal ;
retVal = ExtendedEntityManagerCreator . createApplicationManagedEntityManager ( rawEntityManager , this ) ;
}
return retVal ;
}
/ * *
* Subclasses must implement this method to create the EntityManagerFactory
* that will be returned by the < code > getObject ( ) < / code > method .
@ -427,19 +448,9 @@ public abstract class AbstractEntityManagerFactoryBean implements
@@ -427,19 +448,9 @@ public abstract class AbstractEntityManagerFactoryBean implements
// Serialization support
//---------------------------------------------------------------------
Object invokeProxyMethod ( Method method , Object [ ] args ) throws Throwable {
if ( method . getDeclaringClass ( ) . isAssignableFrom ( EntityManagerFactoryInfo . class ) ) {
return method . invoke ( this , args ) ;
}
else if ( method . getDeclaringClass ( ) . equals ( EntityManagerFactoryPlusOperations . class ) ) {
return method . invoke ( this . plusOperations , args ) ;
}
Object retVal = method . invoke ( this . nativeEntityManagerFactory , args ) ;
if ( retVal instanceof EntityManager ) {
EntityManager rawEntityManager = ( EntityManager ) retVal ;
retVal = ExtendedEntityManagerCreator . createApplicationManagedEntityManager ( rawEntityManager , this ) ;
}
return retVal ;
private void readObject ( ObjectInputStream ois ) throws IOException , ClassNotFoundException {
throw new NotSerializableException ( "An EntityManagerFactoryBean itself is not deserializable - " +
"just a SerializedEntityManagerFactoryBeanReference is" ) ;
}
protected Object writeReplace ( ) throws ObjectStreamException {