Were you putting hibernate.bytecode.provider=cglib into your runtime properties? All runtime properties are also passed to hibernate during its startup so that you can specify things like this.
Ben On Wed, Apr 18, 2012 at 12:37 PM, Mark Goodrich <[email protected]> wrote: > Rafal & Darius—**** > > I meant to cc this to the dev list, but I guess I forgot.**** > > Fwiw, here is a little bit about what writeReplace does:**** > > A proxy object generated by ProxyFactory is serializable if its super > class or any of its interfaces implement java.io.Serializable. However, a > serialized proxy object may not be compatible with future releases. The > serialization support should be used for short-term storage or RMI.**** > > For compatibility with older releases serialization of proxy objects is > implemented by adding a writeReplace method to the proxy class. This allows > a proxy to be serialized to a conventional ObjectOutputStream and > deserialized from a correspondingObjectInputStream. However this method > suffers from several problems, the most notable one being that it fails to > serialize state inherited from the proxy's superclass.**** > > Do you guys want me to enter a ticket for this?**** > > **** > > Mark**** > > **** > > *From:* [email protected] [mailto:[email protected]] *On > Behalf Of *Rafal Korytkowski > *Sent:* Wednesday, April 18, 2012 6:50 AM > *To:* Mark Goodrich > *Cc:* Darius Jazayeri > *Subject:* Re: Starting OpenMRS 1.9 with Html Form Entry module**** > > **** > > I confirmed that upgrading javassist to 3.16.1-GA doesn't help.**** > > **** > > I also wasn't able to switch back to cglib by adding > "hibernate.bytecode.provider=cglib" to hibernate.default.properties as > suggested here: https://hibernate.onjira.com/browse/HHH-1938 **** > > Hibernate still used javassist for some reason.**** > > **** > > Unfortunately using a different method isn't that simple, because > writeReplace is hardcoded in XStream in > http://www.docjar.com/html/api/com/thoughtworks/xstream/converters/reflection/SerializationMethodInvoker.java.html > **** > > Maybe, it's possible to replace SerializationMethodInvoker with a custom > class. I didn't use much time to look closely at the code to see if it's > possible without having a custom XStream build. > > Anyway, I haven't noticed any problems while using htmlform 1.9.2 with > trunk. Also MDS calls writeReplace and replaces ids with uuids. The error > seems not to cause any harm, but it definitely needs further investigation. > **** > > **** > > -Rafał**** > > On 18 April 2012 09:56, Rafal Korytkowski <[email protected]> wrote:**** > > Hi,**** > > **** > > It's because we've upgraded Hibernate and apparently changed from cglib to > javassist proxies (https://hibernate.onjira.com/browse/HHH-2506).**** > > **** > > It appears that javassist wants its own writeReplace method, which it > fails to create as it's defined already. Quick googling shows that many > people just upgrade javassist (that may not help in our case, but it's > worth trying) or switch back to cglib proxies to resolve similar issues. > I'll investigate further if we can simply use a different method in MDS, > but it also depends on the ability to customize it in XStream.**** > > > -Rafał**** > > **** > > On 17 April 2012 22:38, Mark Goodrich <[email protected]> wrote:**** > > Rafal & Darius,**** > > **** > > We’re seeing the following error when starting Html Form Entry with > Openmrs 1.9. The module still appears to start correctly. “writeReplace” > is the method that allows MDS to share the Html Forms. Any idea if this is > something we should be worried about?**** > > **** > > INFO - LocalSessionFactoryBean.buildSessionFactory(777) |2012-04-17 > 16:14:44,663| Building new Hibernate SessionFactory**** > > ERROR - JavassistLazyInitializer.getProxyFactory(165) |2012-04-17 > 16:14:44,927| Javassist Enhancement failed: > org.openmrs.module.htmlformentry.HtmlForm**** > > java.lang.RuntimeException: duplicate method: writeReplace in > org.openmrs.module.htmlformentry.HtmlForm_$$_javassist_84**** > > at > javassist.util.proxy.ProxyFactory.createClass3(ProxyFactory.java:509)**** > > at > javassist.util.proxy.ProxyFactory.createClass2(ProxyFactory.java:486)**** > > at > javassist.util.proxy.ProxyFactory.createClass1(ProxyFactory.java:422)**** > > at > javassist.util.proxy.ProxyFactory.createClass(ProxyFactory.java:394)**** > > at > org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.getProxyFactory(JavassistLazyInitializer.java:162) > **** > > at > org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.postInstantiate(JavassistProxyFactory.java:65) > **** > > at > org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:185) > **** > > at > org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:167) > **** > > at > org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:77) > **** > > at > sun.reflect.GeneratedConstructorAccessor56.newInstance(Unknown Source)**** > > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) > **** > > at > java.lang.reflect.Constructor.newInstance(Constructor.java:513)**** > > at > org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:105) > **** > > at > org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:133) > **** > > at > org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:80) > **** > > at > org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:322) > **** > > at > org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:485) > **** > > at > org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:133) > **** > > at > org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84) > **** > > at > org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:286)* > *** > > at > org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872) > **** > > at > org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:860) > **** > > at > org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:779) > **** > > at > org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211) > **** > > at > org.openmrs.api.db.hibernate.HibernateSessionFactoryBean.afterPropertiesSet(HibernateSessionFactoryBean.java:148) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) > **** > > at > org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) > **** > > at > org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) > **** > > at > org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) > **** > > at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) > **** > > at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322) > **** > > at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1325) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) > **** > > at > org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) > **** > > at > org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) > **** > > at > org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) > **** > > at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) > **** > > at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322) > **** > > at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1325) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) > **** > > at > org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) > **** > > at > org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) > **** > > at > org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) > **** > > at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) > **** > > at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322) > **** > > at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1325) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) > **** > > at > org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) > **** > > at > org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) > **** > > at > org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) > **** > > at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) > **** > > at > org.springframework.aop.framework.autoproxy.BeanFactoryAdvisorRetrievalHelper.findAdvisorBeans(BeanFactoryAdvisorRetrievalHelper.java:86) > **** > > at > org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findCandidateAdvisors(AbstractAdvisorAutoProxyCreator.java:100) > **** > > at > org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:86) > **** > > at > org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:68) > **** > > at > org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:359) > **** > > at > org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:322) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:407) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1426) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) > **** > > at > org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) > **** > > at > org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) > **** > > at > org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) > **** > > at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) > **** > > at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322) > **** > > at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1325) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) > **** > > at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) > **** > > at > org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) > **** > > at > org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) > **** > > at > org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) > **** > > at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) > **** > > at > org.springframework.context.support.AbstractApplicationContext.initMessageSource(AbstractApplicationContext.java:755) > **** > > at > org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:413) > **** > > at > org.openmrs.module.ModuleUtil.refreshApplicationContext(ModuleUtil.java:780) > **** > > at > org.openmrs.module.web.WebModuleUtil.refreshWAC(WebModuleUtil.java:825)*** > * > > at > org.openmrs.web.Listener.performWebStartOfModules(Listener.java:587)**** > > at org.openmrs.web.Listener.startOpenmrs(Listener.java:230) > **** > > at org.openmrs.web.WebDaemon$1.run(WebDaemon.java:44)**** > > Caused by: javassist.bytecode.DuplicateMemberException: duplicate method: > writeReplace in org.openmrs.module.htmlformentry.HtmlForm_$$_javassist_84* > *** > > at > javassist.bytecode.ClassFile.testExistingMethod(ClassFile.java:637)**** > > at > javassist.bytecode.ClassFile.addMethod(ClassFile.java:613)**** > > at > javassist.util.proxy.ProxyFactory.override(ProxyFactory.java:941)**** > > at > javassist.util.proxy.ProxyFactory.overrideMethods(ProxyFactory.java:913)** > ** > > at > javassist.util.proxy.ProxyFactory.make(ProxyFactory.java:714)**** > > at > javassist.util.proxy.ProxyFactory.createClass3(ProxyFactory.java:497)**** > > ... 93 more **** > > **** > > **** > _________________________________________ To unsubscribe from OpenMRS Developers' mailing list, send an e-mail to [email protected] with "SIGNOFF openmrs-devel-l" in the body (not the subject) of your e-mail. [mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l]

