I'm not sure why spring is serializing EntityManagers... regardless this is definitely a bug. I'm guessing you're in the tire kicking phase so if you continue using OpenJPA you should read some info on Entity enhancement[1]. Using this property [2] in your persistence.xml is not recommend.
[1] http://openjpa.apache.org/entity-enhancement.html [2] <property name="openjpa.RuntimeUnenhancedClasses" value="supported"/> Thanks, Rick On Fri, Mar 4, 2011 at 5:11 PM, Jens Deppe <[email protected]> wrote: > Hi, > > I'm trying to use OpenJPA 2.0.1 with the Spring WebFlow booking sample app > and am having some trouble. > > I've set up my data access as follows: > > <!-- Drives transactions using local JPA APIs --> > <bean id="transactionManager" > class="org.springframework.orm.jpa.JpaTransactionManager"> > <property name="entityManagerFactory" > ref="entityManagerFactory" /> > </bean> > > <!-- Creates a EntityManagerFactory for use with the OpenJPA > provider and a simple in-memory data source populated with test data --> > <bean id="entityManagerFactory" > class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> > <property name="dataSource" ref="dataSource" /> > <property name="jpaVendorAdapter"> > <bean > class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter" /> > </property> > <property name="loadTimeWeaver"> > <bean > class="org.springframework.instrument.classloading.ReflectiveLoadTimeWeaver"/> > </property> > </bean> > > Everything seems to work fine until I hit a page which signals the start of > a flow, at which point I get the following exception: > > java.lang.NullPointerException > > > org.apache.openjpa.persistence.EntityManagerImpl.readExternal(EntityManagerImpl.java:1441) > > java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1791) > > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750) > java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) > > java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946) > > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870) > > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) > java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) > > java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946) > > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870) > > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) > java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) > java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) > > > org.springframework.webflow.core.collection.LocalAttributeMap.readObject(LocalAttributeMap.java:342) > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > java.lang.reflect.Method.invoke(Method.java:597) > > java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) > > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) > > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) > java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) > java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) > > > org.springframework.webflow.engine.impl.FlowSessionImpl.readExternal(FlowSessionImpl.java:147) > > java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1791) > > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750) > java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) > java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) > java.util.LinkedList.readObject(LinkedList.java:964) > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > java.lang.reflect.Method.invoke(Method.java:597) > > java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) > > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) > > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) > java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) > java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) > > > org.springframework.webflow.engine.impl.FlowExecutionImpl.readExternal(FlowExecutionImpl.java:305) > > java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1791) > > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750) > java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) > java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) > > > org.springframework.webflow.execution.repository.snapshot.SerializedFlowExecutionSnapshot.deserialize(SerializedFlowExecutionSnapshot.java:194) > > > org.springframework.webflow.execution.repository.snapshot.SerializedFlowExecutionSnapshot.unmarshal(SerializedFlowExecutionSnapshot.java:99) > > > org.springframework.webflow.execution.repository.snapshot.SerializedFlowExecutionSnapshotFactory.restoreExecution(SerializedFlowExecutionSnapshotFactory.java:80) > > > org.springframework.webflow.execution.repository.snapshot.AbstractSnapshottingFlowExecutionRepository.restoreFlowExecution(AbstractSnapshottingFlowExecutionRepository.java:89) > > > org.springframework.webflow.execution.repository.impl.DefaultFlowExecutionRepository.getFlowExecution(DefaultFlowExecutionRepository.java:112) > > > org.springframework.webflow.executor.FlowExecutorImpl.resumeExecution(FlowExecutorImpl.java:168) > > > org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:183) > > > org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:788) > > > org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:717) > > > org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) > > > org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) > javax.servlet.http.HttpServlet.service(HttpServlet.java:617) > javax.servlet.http.HttpServlet.service(HttpServlet.java:717) > > > com.gemstone.gemfire.modules.session.filter.ServletWrapper.service(ServletWrapper.java:72) > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:343) > > > org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) > > > org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) > > > org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) > > > org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100) > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) > > > org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) > > > org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) > > > org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35) > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) > > > org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177) > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) > > > org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:188) > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) > > > org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) > > > org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) > > > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) > > > org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:149) > > > org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) > > > org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) > > > org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) > > > org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) > > > com.gemstone.gemfire.modules.session.filter.SessionCachingFilter.doFilter(SessionCachingFilter.java:434) > > > Doing some debugging, I can see that the factoryKey > (EntityManagerImpl.java:1437) being deserialized is null. That's because it > was written as null (line 1464): > > Object factoryKey = ((AbstractBrokerFactory) _broker > .getBrokerFactory()).getPoolKey(); > > Here getPoolKey() returns null. > > So is this a bug, or should I be configuring something else/differently to > get this to work? > > TIA. > > --Jens >
