[jboss-user] [JBoss Cache: Core Edition] - JDBCCacheLoader with Oracle 10g problem

niuxuetao_fiserv do-not-reply at jboss.com
Fri Jun 26 12:33:43 EDT 2009


Hi,

I am using JBossPojo Cache 3.0.0.GA and evicting cache to oracle 10g using JDBCCacheLoader shipped with JBoss. But when I run it with 1 thread, I always see such exception:

  | Caused by: java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG column
  | 
  | 	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
  | 	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
  | 	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
  | 	at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
  | 	at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
  | 	at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:955)
  | 	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168)
  | 	at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
  | 	at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3368)
  | 	at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
  | 	at org.jboss.cache.loader.AdjListJDBCCacheLoader.insertNode(AdjListJDBCCacheLoader.java:501)
  | 	... 69 more
  | [2009-06-26 18:23:55,046] [Detection1] WARN  PojoCacheImpl - Could not end transaction for operation on: /RTDE/pattern-matching-threshold/663330655
  | javax.transaction.RollbackException: outcome is false status: 1
  | 	at org.jboss.cache.transaction.DummyTransaction.commit(DummyTransaction.java:98)
  | 	at org.jboss.cache.transaction.DummyBaseTransactionManager.commit(DummyBaseTransactionManager.java:99)
  | 	at org.jboss.cache.pojo.impl.PojoCacheImpl.endTransaction(PojoCacheImpl.java:152)
  | 	at org.jboss.cache.pojo.impl.PojoCacheImpl.attach(PojoCacheImpl.java:116)
  | 	at org.jboss.cache.pojo.impl.PojoCacheImpl.attach(PojoCacheImpl.java:93)
  | 	at org.jboss.cache.pojo.impl.PojoCacheImpl.attach(PojoCacheImpl.java:88)
  | ...
  | 

If I run it with multiple threads, I get this exception, which looks like jboss is trying to recreate the same table for twice:

  | 
  | Caused by: org.jboss.cache.pojo.PojoCacheException: init org.jboss.cache.config.Configuration at 777dc9f6 failed
  | 	at org.jboss.cache.pojo.impl.PojoCacheImpl.<init>(PojoCacheImpl.java:75)
  | 	at org.jboss.cache.pojo.PojoCacheFactory.createCache(PojoCacheFactory.java:54)
  | 	at com.fiserv.detection.eventcache.jboss.JBossPojoCacheStorage.<init>(JBossPojoCacheStorage.java:26)
  | 	at com.fiserv.detection.eventcache.jboss.JBossPojoCacheStorageFactory.getCacheStorage(JBossPojoCacheStorageFactory.java:100)
  | 	at com.fiserv.detection.eventcache.statemachine.CacheAccessorFactory.createAccessor(CacheAccessorFactory.java:38)
  | 	at com.fiserv.detection.eventcache.api.EventCacheService.createCacheAccessor(EventCacheService.java:62)
  | 	at com.fiserv.detection.patternmatching.PatternMatching.init(PatternMatching.java:100)
  | 	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.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1414)
  | 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1375)
  | 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
  | 	... 41 more
  | Caused by: org.jboss.cache.CacheException: java.lang.reflect.InvocationTargetException
  | 	at org.jboss.cache.util.reflect.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:148)
  | 	at org.jboss.cache.factories.ComponentRegistry$PrioritizedMethod.invoke(ComponentRegistry.java:970)
  | 	at org.jboss.cache.factories.ComponentRegistry.internalStart(ComponentRegistry.java:746)
  | 	at org.jboss.cache.factories.ComponentRegistry.start(ComponentRegistry.java:610)
  | 	at org.jboss.cache.invocation.CacheInvocationDelegate.start(CacheInvocationDelegate.java:355)
  | 	at org.jboss.cache.DefaultCacheFactory.createCache(DefaultCacheFactory.java:121)
  | 	at org.jboss.cache.pojo.impl.PojoCacheImpl.<init>(PojoCacheImpl.java:71)
  | 	... 54 more
  | Caused by: java.lang.reflect.InvocationTargetException
  | 	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.jboss.cache.util.reflect.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:144)
  | 	... 60 more
  | Caused by: org.jboss.cache.CacheException: Unable to start cache loaders
  | 	at org.jboss.cache.loader.CacheLoaderManager.startCacheLoader(CacheLoaderManager.java:467)
  | 	... 65 more
  | Caused by: java.sql.SQLException: ORA-00955: name is already used by an existing object
  | 
  | 	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
  | 	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
  | 	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
  | 	at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
  | 	at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
  | 	at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:955)
  | 	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168)
  | 	at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
  | 	at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3390)
  | 	at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.execute(NewProxyPreparedStatement.java:989)
  | 	at org.jboss.cache.loader.AdjListJDBCCacheLoader.createDummyTableIfNeeded(AdjListJDBCCacheLoader.java:296)
  | 	at org.jboss.cache.loader.AdjListJDBCCacheLoader.start(AdjListJDBCCacheLoader.java:269)
  | 	at org.jboss.cache.loader.JDBCCacheLoader.start(JDBCCacheLoader.java:376)
  | 	at org.jboss.cache.loader.CacheLoaderManager.startCacheLoader(CacheLoaderManager.java:461)
  | 	... 65 more
  | 

My jboss cache configuration file is as below:


  | <?xml version="1.0" encoding="UTF-8"?>
  | <jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  | 	xmlns="urn:jboss:jbosscache-core:config:3.0">
  | 
  | 	<locking isolationLevel="READ_COMMITTED"
  | 		lockParentForChildInsertRemove="false" lockAcquisitionTimeout="4294967"
  | 		nodeLockingScheme="mvcc" writeSkewCheck="false" concurrencyLevel="500" />
  | 
  | 	<transaction
  | 		transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"
  | 		syncRollbackPhase="false" syncCommitPhase="false" />
  | 
  | 	<jmxStatistics enabled="false" />
  | 
  | 	<startup regionsInactiveOnStartup="true" />
  | 
  | 	<shutdown hookBehavior="DEFAULT" />
  | 
  | 	<listeners asyncPoolSize="1" asyncQueueSize="100000" />
  | 
  | 	<invocationBatching enabled="false" />
  | 
  | 	<eviction wakeUpInterval="5000">
  | 
  | 		<!-- Cache wide default -->
  | 		<region name="/_default_" algorithmClass="org.jboss.cache.eviction.LRUAlgorithm">
  | 
  | 			<property name="maxNodes">100000</property>
  | 			<property name="timeToLiveSeconds">300</property>
  | 		</region>
  | 	</eviction>
  | 
  | 	<loaders passivation="false" shared="true">
  | 
  | 		<preload>
  | 			<node fqn="/" />
  | 		</preload>
  | 
  |  
  | 		<loader class="org.jboss.cache.loader.JDBCCacheLoader" async="false"
  | 			fetchPersistentState="false" ignoreModifications="false"
  | 			purgeOnStartup="false">
  | 			
  | 			<properties>
  | 
  | 				cache.jdbc.table.name=Cached_Events
  | 				cache.jdbc.table.create=true
  | 				cache.jdbc.table.drop=false
  | 				cache.jdbc.table.primarykey=jbosscache_pk
  | 				cache.jdbc.fqn.column=fqn
  | 				cache.jdbc.fqn.type=varchar2(255)
  | 				cache.jdbc.node.column=node
  | 				cache.jdbc.node.type=blob
  | 				cache.jdbc.parent.column=parent
  | 				
  | 				cache.jdbc.sql-concat=concat(1,2)
  | 				
  | 				cache.jdbc.connection.factory=org.jboss.cache.loader.C3p0ConnectionFactory
  | 				c3p0.maxPoolSize=20
  | 				c3p0.checkoutTimeout=5000
  | 				
  | 				location=tmp/jbosscache
  | 			</properties>
  | 
  | 		</loader>
  | 
  | 
  | 	</loaders>
  | 
  | </jbosscache>
  | 
  | 

I didn't manually create the table in Oracle at all. Has anyone encountered this before?

Regards,

Xuetao

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4240409#4240409

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4240409



More information about the jboss-user mailing list