Having problem in creating EntityManagerFactory bean occasionally on
the production server.
There is only one entityManagerFactory bean defined in my setup.
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="transactions-
optional" />
</bean>
I have a cron to ping a URL every 3 minutes which just print out a
short text to solve the issue of slowness on first time access after
idle for a period of times.
As per the exception message:
"Application code attempted to create a EntityManagerFactory named
transactions-optional, but one with this name already exists!
Instances of EntityManagerFactory are extremely slow to create and it
is usually not necessary to create one with a given name more than
once. Instead, create a singleton and share it throughout your code.
If you really do need to create a duplicate EntityManagerFactory (such
as for a unittest suite), set the
appengine.orm.disable.duplicate.emf.exception system property to avoid
this error."
Any idea what is the cause? How to create a singleton for
EntityManagerFactory? I am using Spring MVC 3.0
Below is the full stack trace:
Nested in org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'personService': Injection of
persistence methods failed; nested exception is
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'entityManagerFactory' defined in URL [file:/
base/data/home/apps/mobisociety/1.339019164908347042/WEB-INF/guestbook-
infrastructure.xml]: Invocation of init method failed; nested
exception is javax.persistence.PersistenceException: Provider error.
Provider:
org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider:
java.lang.IllegalStateException: Application code attempted to create
a EntityManagerFactory named transactions-optional, but one with this
name already exists! Instances of EntityManagerFactory are extremely
slow to create and it is usually not necessary to create one with a
given name more than once. Instead, create a singleton and share it
throughout your code. If you really do need to create a duplicate
EntityManagerFactory (such as for a unittest suite), set the
appengine.orm.disable.duplicate.emf.exception system property to avoid
this error.
at
org.datanucleus.store.appengine.jpa.DatastoreEntityManagerFactory.checkForRepeatedAllocation
(DatastoreEntityManagerFactory.java:136)
at
org.datanucleus.store.appengine.jpa.DatastoreEntityManagerFactory.<init>
(DatastoreEntityManagerFactory.java:64)
at
org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider.createEntityManagerFactory
(DatastorePersistenceProvider.java:35)
at javax.persistence.Persistence.createFactory(Persistence.java:172)
at javax.persistence.Persistence.createEntityManagerFactory
(Persistence.java:112)
at
org.springframework.orm.jpa.LocalEntityManagerFactoryBean.createNativeEntityManagerFactory
(LocalEntityManagerFactoryBean.java:92)
at
org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet
(AbstractEntityManagerFactoryBean.java:288)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
$5.run(AbstractAutowireCapableBeanFactory.java:1445)
at java.security.AccessController.doPrivileged(Native Method)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods
(AbstractAutowireCapableBeanFactory.java:1443)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean
(AbstractAutowireCapableBeanFactory.java:1392)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean
(AbstractAutowireCapableBeanFactory.java:512)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean
(AbstractAutowireCapableBeanFactory.java:450)
at org.springframework.beans.factory.support.AbstractBeanFactory
$1.getObject(AbstractBeanFactory.java:289)
at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton
(DefaultSingletonBeanRegistry.java:222)
at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean
(AbstractBeanFactory.java:286)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:188)
at
org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findDefaultEntityManagerFactory
(PersistenceAnnotationBeanPostProcessor.java:506)
at
org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findEntityManagerFactory
(PersistenceAnnotationBeanPostProcessor.java:472)
at
org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor
$PersistenceElement.resolveEntityManager
(PersistenceAnnotationBeanPostProcessor.java:597)
at
org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor
$PersistenceElement.getResourceToInject
(PersistenceAnnotationBeanPostProcessor.java:570)
at org.springframework.beans.factory.annotation.InjectionMetadata
$InjectedElement.inject(InjectionMetadata.java:192)
at
org.springframework.beans.factory.annotation.InjectionMetadata.injectMethods
(InjectionMetadata.java:117)
at
org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues
(PersistenceAnnotationBeanPostProcessor.java:320)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean
(AbstractAutowireCapableBeanFactory.java:1049)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean
(AbstractAutowireCapableBeanFactory.java:511)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean
(AbstractAutowireCapableBeanFactory.java:450)
at org.springframework.beans.factory.support.AbstractBeanFactory
$1.getObject(AbstractBeanFactory.java:289)
at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton
(DefaultSingletonBeanRegistry.java:222)
at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean
(AbstractBeanFactory.java:286)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:188)
at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons
(DefaultListableBeanFactory.java:543)
at
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization
(AbstractApplicationContext.java:730)
at
org.springframework.context.support.AbstractApplicationContext.refresh
(AbstractApplicationContext.java:387)
at
org.springframework.web.context.ContextLoader.createWebApplicationContext
(ContextLoader.java:270)
at
org.springframework.web.context.ContextLoader.initWebApplicationContext
(ContextLoader.java:197)
at
org.springframework.web.context.ContextLoaderListener.contextInitialized
(ContextLoaderListener.java:47)
at org.mortbay.jetty.handler.ContextHandler.startContext
(ContextHandler.java:530)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:135)
at org.mortbay.jetty.webapp.WebAppContext.startContext
(WebAppContext.java:1218)
at org.mortbay.jetty.handler.ContextHandler.doStart
(ContextHandler.java:500)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:
448)
at org.mortbay.component.AbstractLifeCycle.start
(AbstractLifeCycle.java:40)
at
com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler
(AppVersionHandlerMap.java:191)
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler
(AppVersionHandlerMap.java:168)
at
com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest
(JettyServletEngineAdapter.java:123)
at com.google.apphosting.runtime.JavaRuntime.handleRequest
(JavaRuntime.java:235)
at com.google.apphosting.base.RuntimePb$EvaluationRuntime
$6.handleBlockingRequest(RuntimePb.java:5235)
at com.google.apphosting.base.RuntimePb$EvaluationRuntime
$6.handleBlockingRequest(RuntimePb.java:5233)
at com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest
(BlockingApplicationHandler.java:24)
at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:
363)
at com.google.net.rpc.impl.Server$2.run(Server.java:838)
at com.google.tracing.LocalTraceSpanRunnable.run
(LocalTraceSpanRunnable.java:56)
at com.google.tracing.LocalTraceSpanBuilder.internalContinueSpan
(LocalTraceSpanBuilder.java:536)
at com.google.net.rpc.impl.Server.startRpc(Server.java:793)
at com.google.net.rpc.impl.Server.processRequest(Server.java:368)
at com.google.net.rpc.impl.ServerConnection.messageReceived
(ServerConnection.java:448)
at com.google.net.rpc.impl.RpcConnection.parseMessages
(RpcConnection.java:319)
at com.google.net.rpc.impl.RpcConnection.dataReceived
(RpcConnection.java:290)
at com.google.net.async.Connection.handleReadEvent(Connection.java:
466)
at com.google.net.async.EventDispatcher.processNetworkEvents
(EventDispatcher.java:759)
at com.google.net.async.EventDispatcher.internalLoop
(EventDispatcher.java:205)
at com.google.net.async.EventDispatcher.loop(EventDispatcher.java:
101)
at com.google.net.rpc.RpcService.runUntilServerShutdown
(RpcService.java:251)
at com.google.apphosting.runtime.JavaRuntime$RpcRunnable.run
(JavaRuntime.java:394)
at java.lang.Thread.run(Unknown Source)
--
You received this message because you are subscribed to the Google Groups
"Google App Engine for Java" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-appengine-java?hl=en.