【问题标题】:Error with serialversionUID mismatch after c3p0 jar upgradec3p0 jar升级后serialversionUID不匹配出错
【发布时间】:2021-11-12 20:29:50
【问题描述】:

我之前开发的应用程序使用的是 spring 和 hibernate 3。我已将应用程序升级到 spring 4.1.6 和 hibernate 4.3.0。应用程序已启动并正在运行,但正如本文所述,当 hibernate 调用 c3p0(c3p0 版本 0.9.1.2)的 setBinaryStream 方法时引发异常:

Hibernate 4 calls setBinaryStream that is not supported in c3p0

按照答案中的建议,我已经更新了 c3p0 版本。当我将 c3p0 版本更改为 0.9.2.1 时出现以下异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jndiCoreBankDataSource' defined in ServletContext resource [/WEB-INF/dataSourceContext-fs.xml]: Invocation of init method failed; nested exception is javax.naming.NamingException: unexpected exception [Root exception is java.io.InvalidClassException: com.mchange.v2.c3p0.WrapperConnectionPoolDataSource; local class incompatible: stream classdesc serialVersionUID = 7806429541739165290, local class serialVersionUID = -7086951306718003710]; remaining name '"jdbc/cored"'
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getTypeForFactoryBean(AbstractBeanFactory.java:1421)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:802)
    at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:542)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:436)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:412)
    at org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(BeanFactoryUtils.java:186)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1105)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1044)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813)
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1139)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1042)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4685)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5146)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
Caused by: javax.naming.NamingException: unexpected exception [Root exception is java.io.InvalidClassException: com.mchange.v2.c3p0.WrapperConnectionPoolDataSource; local class incompatible: stream classdesc serialVersionUID = 7806429541739165290, local class serialVersionUID = -7086951306718003710]; remaining name '"jdbc/corebank"'
    at com.sun.jndi.fscontext.FSContext.generateNamingException(FSContext.java:806)
    at com.sun.jndi.fscontext.RefFSContext.lookup(RefFSContext.java:149)
    at com.sun.jndi.fscontext.FSContext.lookup(FSContext.java:127)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:155)
    at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:87)
    at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152)
    at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:179)
    at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95)
    at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:106)
    at org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback(JndiObjectFactoryBean.java:231)
    at org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:217)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
    ... 61 more
Caused by: java.io.InvalidClassException: com.mchange.v2.c3p0.WrapperConnectionPoolDataSource; local class incompatible: stream classdesc serialVersionUID = 7806429541739165290, local class serialVersionUID = -7086951306718003710
    at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:699)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1885)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
    at com.mchange.v2.ser.SerializableUtils.deserializeFromByteArray(SerializableUtils.java:144)
    at com.mchange.v2.ser.SerializableUtils.fromByteArray(SerializableUtils.java:123)
    at com.mchange.v2.naming.JavaBeanObjectFactory.createPropertyMap(JavaBeanObjectFactory.java:110)
    at com.mchange.v2.naming.JavaBeanObjectFactory.getObjectInstance(JavaBeanObjectFactory.java:71)
    at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
    at com.sun.jndi.fscontext.RefFSContext.lookup(RefFSContext.java:146)
    ... 73 more

以下是事件相关的xml配置:

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
        <property name="environment">
            <props>
                <prop key="java.naming.factory.initial">${jndi.contextFactory}</prop>
                <prop key="java.naming.provider.url">${jndi.providerUrl}</prop>
            </props>
        </property>
    </bean>
    
    <bean id="targetDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate" ref="jndiTemplate"/>
     <property name="jndiName" value="jdbc/cored" />
    </bean>

我还没有接触过 jtds 和 jndi jar。是因为他们不兼容吗?但鉴于存在 serialversionUID 不匹配,我相信在某个地方存在一个不同版本的类 WrapperConnectionPoolDataSource,因为我已经搜索了整个项目,所以我无法弄清楚。

在 jndi 模板的 props 中,我正在从文件系统加载 jndi 上下文:

<prop key="java.naming.factory.initial">com.sun.jndi.fscontext.RefFSContextFactory</prop>
<prop key="java.naming.provider.url">file:d:/jndi-support/jdbc</prop>

下面是 jndi 支持文件夹。这里的绑定是使用 fsjndibinder.jar 生成的。 fsjndibinder.jar 包含其中打包的所有依赖项。即旧的 c3p0 09.1.2、jtds、jndi 库被打包。这是否导致 serialversionUID 问题?还是使用 fsjndibinder.jar 中打包的旧库生成的绑定文件导致它?如果是这样,这意味着绑定文件是WrapperConnectionPoolDataSource 类的序列化版本,或者它包含与我的项目中的匹配的serialversionUID?我没有 jndi 绑定以及它如何与池关联的经验。

编辑:这确实是一个绑定问题,因为我已经使用新库生成了绑定文件,但忘记将生成的绑定文件移到应用程序正在读取的补丁中。该应用程序现在可以连接,但我面临同样的问题,但我猜想与新版本的 c3p0 (v0.9.2.1) 不兼容的 jtds 库。当前jtds版本是1.2.2。

java.lang.AbstractMethodError: Method net/sourceforge/jtds/jdbc/JtdsPreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V is abstract

我已将 JTDS jar 更改为 v1.3.1,现在抛出以下异常:

2021-09-19 13:21:00,552 [main] WARN  com.mchange.v2.c3p0.impl.NewProxyStatement  - Exception on close of inner statement.
java.sql.SQLException: Invalid state, the Connection object is closed.
    at net.sourceforge.jtds.jdbc.TdsCore.checkOpen(TdsCore.java:481)
    at net.sourceforge.jtds.jdbc.TdsCore.clearResponseQueue(TdsCore.java:767)
    at net.sourceforge.jtds.jdbc.JtdsStatement.reset(JtdsStatement.java:722)
    at net.sourceforge.jtds.jdbc.JtdsStatement.close(JtdsStatement.java:966)
    at com.mchange.v2.c3p0.impl.NewProxyStatement.close(NewProxyStatement.java:867)
    at org.springframework.jdbc.support.JdbcUtils.closeStatement(JdbcUtils.java:93)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:412)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:440)
    at com.greytip.common.scriptrunner.dao.impl.RubyDaoHelperImpl.executeCommand(RubyDaoHelperImpl.java:173)
    at com.greytip.common.scriptrunner.dao.impl.RubyDaoHelperImpl.executeSql(RubyDaoHelperImpl.java:89)
    at sun.reflect.GeneratedMethodAccessor125.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.jruby.javasupport.JavaMethod.invokeWithExceptionHandling(JavaMethod.java:170)
    at org.jruby.javasupport.JavaMethod.invoke(JavaMethod.java:146)
    at sun.reflect.GeneratedMethodAccessor85.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.jruby.runtime.callback.ReflectionCallback.invokeMethod0(ReflectionCallback.java:101)
    at org.jruby.runtime.callback.AbstractCallback.invokeMethod(AbstractCallback.java:114)
    at org.jruby.runtime.callback.AbstractCallback.execute(AbstractCallback.java:181)
    at org.jruby.internal.runtime.methods.CallbackMethod.call(CallbackMethod.java:69)
    at org.jruby.RubyModule.call0(RubyModule.java:672)
    at org.jruby.RubyModule.call(RubyModule.java:633)
    at org.jruby.evaluator.EvaluateVisitor.visitCallNode(EvaluateVisitor.java:453)
    at org.jruby.ast.CallNode.accept(CallNode.java:62)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.evaluator.EvaluateVisitor.visitDAsgnNode(EvaluateVisitor.java:603)
    at org.jruby.ast.DAsgnNode.accept(DAsgnNode.java:58)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.evaluator.EvaluateVisitor.visitNewlineNode(EvaluateVisitor.java:1068)
    at org.jruby.ast.NewlineNode.accept(NewlineNode.java:68)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.evaluator.EvaluateVisitor.visitBlockNode(EvaluateVisitor.java:340)
    at org.jruby.ast.BlockNode.accept(BlockNode.java:60)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.internal.runtime.methods.EvaluateMethod.call(EvaluateMethod.java:71)
    at org.jruby.runtime.ThreadContext.yield(ThreadContext.java:273)
    at org.jruby.Ruby.yield(Ruby.java:323)
    at org.jruby.runtime.Block.call(Block.java:107)
    at org.jruby.RubyProc.call(RubyProc.java:102)
    at org.jruby.internal.runtime.methods.ProcMethod.call(ProcMethod.java:60)
    at org.jruby.RubyModule.call0(RubyModule.java:672)
    at org.jruby.RubyModule.call(RubyModule.java:633)
    at org.jruby.evaluator.EvaluateVisitor.visitCallNode(EvaluateVisitor.java:453)
    at org.jruby.ast.CallNode.accept(CallNode.java:62)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.evaluator.EvaluateVisitor.visitNewlineNode(EvaluateVisitor.java:1068)
    at org.jruby.ast.NewlineNode.accept(NewlineNode.java:68)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.evaluator.EvaluateVisitor.visitBlockNode(EvaluateVisitor.java:340)
    at org.jruby.ast.BlockNode.accept(BlockNode.java:60)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.RubyObject.eval(RubyObject.java:407)
    at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:106)
    at org.jruby.RubyModule.call0(RubyModule.java:672)
    at org.jruby.RubyModule.call(RubyModule.java:633)
    at org.jruby.evaluator.EvaluateVisitor.visitFCallNode(EvaluateVisitor.java:823)
    at org.jruby.ast.FCallNode.accept(FCallNode.java:59)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.evaluator.EvaluateVisitor.visitNewlineNode(EvaluateVisitor.java:1068)
    at org.jruby.ast.NewlineNode.accept(NewlineNode.java:68)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.evaluator.EvaluateVisitor.visitBlockNode(EvaluateVisitor.java:340)
    at org.jruby.ast.BlockNode.accept(BlockNode.java:60)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.RubyObject.eval(RubyObject.java:407)
    at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:106)
    at org.jruby.RubyModule.call0(RubyModule.java:672)
    at org.jruby.RubyModule.call(RubyModule.java:633)
    at org.jruby.evaluator.EvaluateVisitor.visitCallNode(EvaluateVisitor.java:453)
    at org.jruby.ast.CallNode.accept(CallNode.java:62)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.evaluator.EvaluateVisitor.visitNewlineNode(EvaluateVisitor.java:1068)
    at org.jruby.ast.NewlineNode.accept(NewlineNode.java:68)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.evaluator.EvaluateVisitor.visitBlockNode(EvaluateVisitor.java:340)
    at org.jruby.ast.BlockNode.accept(BlockNode.java:60)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.evaluator.EvaluateVisitor.visitRescueNode(EvaluateVisitor.java:1237)
    at org.jruby.ast.RescueNode.accept(RescueNode.java:61)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.evaluator.EvaluateVisitor.visitBeginNode(EvaluateVisitor.java:324)
    at org.jruby.ast.BeginNode.accept(BeginNode.java:57)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.evaluator.EvaluateVisitor.visitNewlineNode(EvaluateVisitor.java:1068)
    at org.jruby.ast.NewlineNode.accept(NewlineNode.java:68)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.internal.runtime.methods.EvaluateMethod.call(EvaluateMethod.java:71)
    at org.jruby.runtime.ThreadContext.yield(ThreadContext.java:273)
    at org.jruby.Ruby.yield(Ruby.java:323)
    at org.jruby.Ruby.yield(Ruby.java:319)
    at org.jruby.RubyArray.each(RubyArray.java:812)
    at sun.reflect.GeneratedMethodAccessor61.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.jruby.runtime.callback.ReflectionCallback.invokeMethod0(ReflectionCallback.java:101)
    at org.jruby.runtime.callback.AbstractCallback.invokeMethod(AbstractCallback.java:114)
    at org.jruby.runtime.callback.AbstractCallback.execute(AbstractCallback.java:181)
    at org.jruby.internal.runtime.methods.CallbackMethod.call(CallbackMethod.java:69)
    at org.jruby.RubyModule.call0(RubyModule.java:672)
    at org.jruby.RubyModule.call(RubyModule.java:633)
    at org.jruby.evaluator.EvaluateVisitor.visitCallNode(EvaluateVisitor.java:453)
    at org.jruby.ast.CallNode.accept(CallNode.java:62)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.evaluator.EvaluateVisitor.visitIterNode(EvaluateVisitor.java:975)
    at org.jruby.ast.IterNode.accept(IterNode.java:61)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.evaluator.EvaluateVisitor.visitNewlineNode(EvaluateVisitor.java:1068)
    at org.jruby.ast.NewlineNode.accept(NewlineNode.java:68)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.evaluator.EvaluateVisitor.visitBlockNode(EvaluateVisitor.java:340)
    at org.jruby.ast.BlockNode.accept(BlockNode.java:60)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.evaluator.EvaluateVisitor.visitBeginNode(EvaluateVisitor.java:324)
    at org.jruby.ast.BeginNode.accept(BeginNode.java:57)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.evaluator.EvaluateVisitor.visitNewlineNode(EvaluateVisitor.java:1068)
    at org.jruby.ast.NewlineNode.accept(NewlineNode.java:68)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.evaluator.EvaluateVisitor.visitBlockNode(EvaluateVisitor.java:340)
    at org.jruby.ast.BlockNode.accept(BlockNode.java:60)
    at org.jruby.evaluator.EvaluateVisitor.eval(EvaluateVisitor.java:223)
    at org.jruby.runtime.ThreadContext.eval(ThreadContext.java:126)
    at org.jruby.Ruby.eval(Ruby.java:180)
    at org.jruby.Ruby.evalScript(Ruby.java:176)
    at org.jruby.javasupport.bsf.JRubyEngine.exec(JRubyEngine.java:102)
    at org.apache.bsf.BSFManager$6.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.apache.bsf.BSFManager.exec(Unknown Source)
    at com.greytip.common.scriptrunner.RubyScriptRunner.rubyExec(RubyScriptRunner.java:60)
    at com.greytip.common.scriptrunner.RubyScriptRunner.rubyExec(RubyScriptRunner.java:79)
    at com.greytip.common.scriptrunner.DatabaseScriptRunner.execute(DatabaseScriptRunner.java:53)
    at com.greytip.common.scriptrunner.CriticalUpdatesRunner.afterPropertiesSet(CriticalUpdatesRunner.java:30)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:648)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:140)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1139)

似乎我已经击中了 jar 地狱和 * 中允许的最大字符数。我已删除部分堆栈跟踪以将字符保持在范围内。

【问题讨论】:

    标签: java hibernate connection-pooling jndi jtds


    【解决方案1】:

    问题的原因是某些东西一直在序列化 WrapperConnectionPoolDataSource 对象。

    查看源代码,它没有声明显式的 serialVersionId 字段,因此版本 id 是根据 classes 字段等动态生成的。

    显然,对 C3PO 实现的更改意味着生成的已更改。

    所以……如果这些对象用旧类序列化并用新类反序列化……反之亦然……结果将是这个异常。

    解决办法是什么?

    1. 您需要确保您的系统在所有地方都使用相同版本的 C3PO。

    2. 如果这些序列化的WrapperConnectionPoolDataSource(我猜是“绑定”)已被您的 JNDI 注册中心持久化(例如存储在文件中),您需要重新制作/刷新它们。

    认为应该足够了......

    【讨论】:

    • 我使用项目中的库生成了绑定。我仍然遇到同样的错误。 jtds 和 jndi 驱动程序是否会导致这种情况,因为我没有接触过它们。由于错误是由 c3p0 中的一个类引发的,我很困惑,因为我现在在项目中使用相同的 c3p0 jar 并用于绑定。这和tomcat有关系吗?
    • 如果您重新生成了绑定,那么 >somewherestillfind。
    • 感谢您的回复。我忘记将生成的绑定文件移到应用程序读取的补丁中。我用新的发现编辑了这个问题。
    • 是的。那是一个不同的问题。我建议你问一个不同的问题。但这可能只是您使用了不兼容版本的依赖项。请记住,这是一个问答网站……每个问题一个问题。