|
From: Colin S. <col...@ex...> - 2004-01-17 21:54:46
|
When I was adding the beanid tag earlier today, I was thinking that it probably made sense to put a version number on the dtd document, unless we think it's going to stay completely static from now on... |
|
From: Jason W. S. <jso...@sb...> - 2004-01-19 02:40:49
|
I recently switched from using Hibernate's schemaupdate ant task to = using the schemaUpdate property of org.springframework.orm.hibernate.LocalSessionFactoryBean. When I attempt to update an already existing schema it fails with the message: java.sql.SQLException: ORA-00955: name is already used by an existing = object (see below for complete stack trace). It turns out that Hibernate's schemaUpdate implementation always = requests that Oracle create a new sequence, even if that sequence already exists = in the database. When I used the schemaupdate task, this did not result in = any error messages. The sequence create statement silently failed. My old = EJB build scripts worked the same way, asking the database to create a = sequence for each CMP bean each time I deployed, and then silently failing for sequences that already exist. I gather from talking to Oracle people = that this is considered to be the "proper" way to do things in the Oracle = world (i.e. create everything, and silently fail for anything that already exists). When I set the schemaUpdate property on LocalSessionFactoryBean, this = same behavior results in an exception that prevents application deployment. = While I agree with the philosophy of failing loudly, in this case it is problematic for me. Would it be excessively evil if I caught the exceptions inside of the callback inside of LocalSessionFactoryBean.executeSchemaUpdate without taking any corrective action? If not, is it possible that a flag could be added to the standard implementation of LocalSessionFactoryBean to cause failed statements = during schemaUpdate to be ignored? I imagine that using Oracle9 and using = sequences to generate primary keys in Hibernate (seqhilo) is not an uncommon use = case. I am inclined to implement a subclass of LocalSessionFactoryBean that = has this behavior, but I am concerned that continuing to use a Hibernate session, even after a trivial failure during schemaUpdate, might have unintended consequences. Thanks, Jason W. Solinsky Here is my stack trace: java.sql.SQLException: ORA-00955: name is already used by an existing = object at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289) at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573) at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891) at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093) at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2= 047 ) at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:19= 40) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.j= ava :2709) at oracle.jdbc.driver.OracleStatement.executeUpdate(OracleStatement.java:796= ) at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingState= men t.java:196) at org.springframework.orm.hibernate.LocalSessionFactoryBean$1.doInHibernate= (Lo calSessionFactoryBean.java:321) at org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemp= lat e.java:147) at org.springframework.orm.hibernate.LocalSessionFactoryBean.executeSchemaUp= dat e(LocalSessionFactoryBean.java:311) at org.springframework.orm.hibernate.LocalSessionFactoryBean.afterProperties= Set (LocalSessionFactoryBean.java:249) at org.springframework.beans.factory.support.AbstractBeanFactory.callLifecyc= leM ethodsIfNecessary(AbstractBeanFactory.java:1026) at org.springframework.beans.factory.support.AbstractBeanFactory.createBean(= Abs tractBeanFactory.java:548) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(Abs= tra ctBeanFactory.java:188) at org.springframework.beans.factory.support.AbstractBeanFactory.resolveRefe= ren ce(AbstractBeanFactory.java:980) at org.springframework.beans.factory.support.AbstractBeanFactory.resolveValu= eIf Necessary(AbstractBeanFactory.java:952) at org.springframework.beans.factory.support.AbstractBeanFactory.applyProper= tyV alues(AbstractBeanFactory.java:909) at org.springframework.beans.factory.support.AbstractBeanFactory.populateBea= n(A bstractBeanFactory.java:743) at org.springframework.beans.factory.support.AbstractBeanFactory.createBean(= Abs tractBeanFactory.java:547) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(Abs= tra ctBeanFactory.java:188) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preI= nst antiateSingletons(DefaultListableBeanFactory.java:211) at org.springframework.context.support.AbstractApplicationContext.refresh(Ab= str actApplicationContext.java:280) at org.springframework.web.context.support.XmlWebApplicationContext.refresh(= Xml WebApplicationContext.java:107) at org.springframework.web.context.ContextLoader.createWebApplicationContext= (Co ntextLoader.java:131) at org.springframework.web.context.ContextLoader.initWebApplicationContext(C= ont extLoader.java:81) at org.springframework.web.context.ContextLoaderListener.contextInitialized(= Con textLoaderListener.java:32) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.ja= va: 3775) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4257)= at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.jav= a:8 66) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:850) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) at org.apache.catalina.core.StandardHostDeployer.addChild(StandardHostDeploy= er. java:832) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.commons.beanutils.MethodUtils.invokeMethod(MethodUtils.java:25= 2) at org.apache.commons.digester.SetNextRule.end(SetNextRule.java:256) at org.apache.commons.digester.Rule.end(Rule.java:276) at org.apache.commons.digester.Digester.endElement(Digester.java:1058) at org.apache.catalina.util.CatalinaDigester.endElement(CatalinaDigester.jav= a:1 23) at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unkn= own Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDisp= atc her.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknow= n Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at org.apache.commons.digester.Digester.parse(Digester.java:1567) at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeploye= r.j ava:512) at org.apache.catalina.core.StandardHost.install(StandardHost.java:890) at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:856= ) at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:699= ) at org.apache.catalina.manager.ManagerServlet.doPut(ManagerServlet.java:447)= at javax.servlet.http.HttpServlet.service(HttpServlet.java:766) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicat= ion FilterChain.java:284) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilte= rCh ain.java:204) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve= .ja va:256) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCon= tex t.java:151) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:56= 4) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardCont= ext Valve.java:245) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve= .ja va:199) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCon= tex t.java:151) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorB= ase .java:594) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCon= tex t.java:149) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:56= 4) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:= 195 ) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCon= tex t.java:151) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:= 164 ) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCon= tex t.java:149) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:56= 4) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.j= ava :156) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCon= tex t.java:151) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:56= 4) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:211) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:805= ) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processCo= nne ction(Http11Protocol.java:696) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:605= ) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.= jav a:677) at java.lang.Thread.run(Unknown Source) |