[jboss-user] [JBoss Cache: Core Edition] - JDBC Cache loader error

sridhar_ratna do-not-reply at jboss.com
Thu Feb 5 04:17:34 EST 2009


Hi All,

I am very new to Jboss cache and this is my first example tring with jboss cache.

I would like to load the data from mysql database to jboss cache.

my code

  | public class Test {
  | 	public static void main(String[] args) {
  | 
  | 		CacheFactory factory = new DefaultCacheFactory();
  | 		   Cache cache = factory.createCache("cacheloader.xml");
  | 		   cache.create();
  | 		   cache.start();
  | 
  | 		   Node rootNode = cache.getRoot();
  | 		   System.out.println(rootNode);
  | 		   System.out.println(rootNode.getFqn());
  | 		
  | 	}
  | 
  | }

And my Config file is


  | <?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">
  | 
  |     <!-- Configure the TransactionManager -->
  |     <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
  | 
  |     <!-- Specific eviction policy configurations -->
  |     <eviction wakeUpInterval="5000">
  |         <!-- Cache wide default -->
  |         <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm" eventQueueSize="200000">
  |             <property name="maxNodes" value="5000"/>
  |             <property name="timeToLive" value="3000"/>
  |         </default>
  |         <region name="/org/jboss/test/data">
  |             <property name="maxNodes" value="100"/>
  |             <property name="timeToLive" value="3000"/>
  |         </region>
  |     </eviction>
  | 
  |     <loaders passivation="false" shared="false">
  |          <preload>
  |             <node fqn="/"/>
  |         </preload>
  |         <!-- if passivation is true, only the first cache loader is used; the rest are ignored -->
  |         <loader
  |                 class="org.jboss.cache.loader.JDBCCacheLoader"
  |                 async="false"
  |                 fetchPersistentState="true"
  |                 ignoreModifications="false"
  |                 purgeOnStartup="false">
  |             <properties>
  |                 cache.jdbc.table.name=jbosscache
  |                 cache.jdbc.table.create=true
  |                 cache.jdbc.table.drop=true
  |                 cache.jdbc.table.primarykey=jbosscache_pk
  |                 cache.jdbc.fqn.column=fqn
  |                 cache.jdbc.fqn.type=VARCHAR(255)
  |                 cache.jdbc.node.column=value
  |                 cache.jdbc.node.type=LONGBLOB
  |                 cache.jdbc.parent.column=null
  |                 cache.jdbc.driver=com.mysql.jdbc.Driver
  |                 cache.jdbc.url=jdbc:mysql://172.16.16.42:3306/jbosscache
  |                 cache.jdbc.user=root
  |                 cache.jdbc.password=root
  |             </properties>
  |         </loader>
  |     </loaders>
  | </jbosscache>
  | 
  | 

When i run the code its giving the error

  | log4j:WARN No appenders could be found for logger (org.jboss.cache.factories.ComponentRegistry).
  | log4j:WARN Please initialize the log4j system properly.
  | Exception in thread "main" 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:1005)
  | 	at org.jboss.cache.factories.ComponentRegistry.internalStart(ComponentRegistry.java:775)
  | 	at org.jboss.cache.factories.ComponentRegistry.start(ComponentRegistry.java:629)
  | 	at org.jboss.cache.invocation.CacheInvocationDelegate.start(CacheInvocationDelegate.java:344)
  | 	at org.jboss.cache.DefaultCacheFactory.createCache(DefaultCacheFactory.java:121)
  | 	at org.jboss.cache.DefaultCacheFactory.createCache(DefaultCacheFactory.java:93)
  | 	at org.jboss.cache.DefaultCacheFactory.createCache(DefaultCacheFactory.java:77)
  | 	at Test.main(Test.java:18)
  | 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:597)
  | 	at org.jboss.cache.util.reflect.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:144)
  | 	... 8 more
  | Caused by: org.jboss.cache.CacheException: Unable to start cache loaders
  | 	at org.jboss.cache.loader.CacheLoaderManager.startCacheLoader(CacheLoaderManager.java:467)
  | 	... 13 more
  | Caused by: java.lang.IllegalStateException: Failed to insert node: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'null) SELECT '/', null, null FROM jbosscache_D WHERE NOT EXISTS (SELECT fqn FROM' at line 1
  | 	at org.jboss.cache.loader.AdjListJDBCCacheLoader.insertNode(AdjListJDBCCacheLoader.java:540)
  | 	at org.jboss.cache.loader.JDBCCacheLoader.addNewSubtree(JDBCCacheLoader.java:348)
  | 	at org.jboss.cache.loader.JDBCCacheLoader.put(JDBCCacheLoader.java:145)
  | 	at org.jboss.cache.loader.JDBCCacheLoader.start(JDBCCacheLoader.java:380)
  | 	at org.jboss.cache.loader.CacheLoaderManager.startCacheLoader(CacheLoaderManager.java:461)
  | 	... 13 more
  | Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'null) SELECT '/', null, null FROM jbosscache_D WHERE NOT EXISTS (SELECT fqn FROM' at line 1
  | 	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
  | 	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
  | 	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
  | 	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
  | 	at com.mysql.jdbc.Connection.execSQL(Connection.java:3283)
  | 	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332)
  | 	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1604)
  | 	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1519)
  | 	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1504)
  | 	at org.jboss.cache.loader.AdjListJDBCCacheLoader.insertNode(AdjListJDBCCacheLoader.java:527)
  | 	... 17 more
  | 
  | 

What is the problem?
I tried this in another way too
I replaced the main method code with following code and still getting the same error.


  | Properties props = new Properties();
  | 		props.put("cache.jdbc.table.name","jbosscache");
  | 		props.put("cache.jdbc.table.create","false");
  | 		props.put("cache.jdbc.fqn.column","fqn");
  | 		props.put("cache.jdbc.node.column","value");
  | 		props.put("cache.jdbc.driver","com.mysql.jdbc.Driver");
  | 		props.put("cache.jdbc.url","jdbc:mysql://172.16.16.42:3306/jbosscache");
  | 		props.put("cache.jdbc.user","root");
  | 		props.put("cache.jdbc.password","root");
  | 		props.put("cache.jdbc.parent.column","null");
  | 		
  | 		IndividualCacheLoaderConfig config = new IndividualCacheLoaderConfig();
  | 		config.setProperties(props);
  | 		JDBCCacheLoader jdbcCacheLoader = null;
  | 		
  | 		jdbcCacheLoader = new JDBCCacheLoader();
  | 		jdbcCacheLoader.setConfig(config);
  | 		try {
  | 			jdbcCacheLoader.start();
  | 		} catch (Exception e) {
  | 			// TODO Auto-generated catch block
  | 			e.printStackTrace();
  | 		}
  | 

My table is like 

  | CREATE TABLE  `jbosscache`.`jbosscache` (
  |   `jbosscache_pk` int(10) unsigned NOT NULL auto_increment,
  |   `fqn` varchar(255) NOT NULL default '',
  |   `value` longblob NOT NULL,
  |   PRIMARY KEY  (`jbosscache_pk`)
  | ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  | 

Please help me.


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

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



More information about the jboss-user mailing list