Hi together,
As a newbie I would like to get your advices on how to use the Hibernate
caching for Flex Data Management Services. Is this possible at all or a
contra-diction to the HibernateAssembler?
For my java applications I currently use second-level caching to speed up
data access with Hibernate (3.2), which I would also like to use for my
Flex app:
For this I use in the Hibernate mapping definition (inside the class
element):
<cache usage="read-write"/>
Unfortunately if I turn EhCache on (via the hibernate configuration) ...
<property
name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
... the tomcat logs show an ugly stack-trace:
CacheException: Attempt to restart an already started EhCacheProvider.
See below for the exception in its full-length beauty. The only way to
overcome this, to avoid caching at all by setting:
<property
name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
(Also using the recommended SingletonEhCacheProvider does not help)
Any help much appreciated.
Thanks,
Niko
2006-12-05 08:57:08,737 [main] ERROR
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/useradmin]
- Servlet /useradmin threw load() exception
java.lang.ExceptionInInitializerError
at
flex.data.assemblers.HibernateManager.createSessionFactory(HibernateManager.java:66)
at
flex.data.assemblers.HibernateManager.<init>(HibernateManager.java:44)
at
flex.data.assemblers.HibernateAssembler.initialize(HibernateAssembler.java:137)
at
flex.messaging.factories.JavaFactory$JavaFactoryInstance.createInstance(JavaFactory.java:254)
at
flex.messaging.factories.JavaFactory.createFactoryInstance(JavaFactory.java:93)
at
flex.messaging.FactoryDestination.getFactoryInstance(FactoryDestination.java:76)
at flex.data.adapters.JavaAdapter.server(JavaAdapter.java:158) at
flex.data.adapters.JavaAdapter.setSettings(JavaAdapter.java:119)
at flex.messaging.Destination.createAdapter(Destination.java:279)
at
flex.messaging.Destination.initDestination(Destination.java:103)
at
flex.messaging.FactoryDestination.initDestination(FactoryDestination.java:58)
at flex.data.DataService.createDestination(DataService.java:90) at
flex.messaging.services.AbstractService.createDestinations(AbstractService.java:82)
at
flex.messaging.config.MessagingConfiguration.createServices(MessagingConfiguration.java:187)
at
flex.messaging.config.MessagingConfiguration.configureBroker(MessagingConfiguration.java:84)
at
flex.messaging.MessageBrokerServlet.init(MessageBrokerServlet.java:105)
at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1105)
at
org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:932)
at
org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3951)
at
org.apache.catalina.core.StandardContext.start(StandardContext.java:4225)
at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
at
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
at
org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
at
org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:608)
at
org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:535)
at
org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
at
org.apache.catalina.startup.HostConfig.start(HostConfig.java:1122)
at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:310)
at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1021)
at
org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)
at
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
at
org.apache.catalina.core.StandardService.start(StandardService.java:450)
at
org.apache.catalina.core.StandardServer.start(StandardServer.java:709)
at org.apache.catalina.startup.Catalina.start(Catalina.java:551)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432)
Caused by: org.hibernate.cache.CacheException: Attempt to restart an
already started EhCacheProvider. Use sessionFactory.close() between
repeated calls to buildSessionFactory. Consider using
net.sf.ehcache.hibernate.SingletonEhCacheProvider.
at
org.hibernate.cache.EhCacheProvider.start(EhCacheProvider.java:134)
at
org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:183)
at
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1218)
at
flex.data.assemblers.HibernateManager.createSessionFactory(HibernateManager.java:61)
... 41 more
Caused by: net.sf.ehcache.CacheException: Cannot parseConfiguration
CacheManager. Attempt to create a new instance of CacheManager using the
diskStorePath "/tmp/cache" which is already used by an existing
CacheManager. The source of the configuration was classpath.
at net.sf.ehcache.CacheManager.configure(CacheManager.java:248) at
net.sf.ehcache.CacheManager.init(CacheManager.java:193) at
net.sf.ehcache.CacheManager.<init>(CacheManager.java:180) at
org.hibernate.cache.EhCacheProvider.start(EhCacheProvider.java:124)
... 44 more