You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ignite.apache.org by Thomas Isaksen <th...@sysco.no> on 2018/01/11 14:17:49 UTC
Problem enabling read-through on cache - no suitable driver
I am trying to enable read-through on my cache as follows:
<bean id= "simpleDataSource" class="org.h2.jdbcx.JdbcDataSource"/>
<bean id="credentialsCacheTemplate" class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="testCache"/>
<property name="cacheMode" value="PARTITIONED"/>
<property name="backups" value="1"/>
<property name="readThrough" value="true"/>
<property name="cacheStoreFactory">
<bean class="org.apache.ignite.cache.store.jdbc.CacheJdbcPojoStoreFactory">
<property name="dataSourceBean" value="simpleDataSource" />
</bean>
</property>
</bean>
Once I activate my cluster I get this error message:
SEVERE: Failed to initialize cache. Will try to rollback cache start routine. [cacheName=testCache]
class org.apache.ignite.IgniteCheckedException: Failed to start component: javax.cache.CacheException: Failed access to metadata for detect database dialect.
at org.apache.ignite.internal.util.IgniteUtils.startLifecycleAware(IgniteUtils.java:8757)
at org.apache.ignite.internal.processors.cache.GridCacheProcessor.createCache(GridCacheProcessor.java:1344)
at org.apache.ignite.internal.processors.cache.GridCacheProcessor.prepareCacheStart(GridCacheProcessor.java:1799)
at org.apache.ignite.internal.processors.cache.CacheAffinitySharedManager.onCacheChangeRequest(CacheAffinitySharedManager.java:751)
at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onClusterStateChangeRequest(GridDhtPartitionsExchangeFuture.java:817)
at org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.init(GridDhtPartitionsExchangeFuture.java:583)
at org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:2279)
at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
at java.lang.Thread.run(Thread.java:745)
Caused by: javax.cache.CacheException: Failed access to metadata for detect database dialect.
at org.apache.ignite.cache.store.jdbc.CacheAbstractJdbcStore.resolveDialect(CacheAbstractJdbcStore.java:273)
at org.apache.ignite.cache.store.jdbc.CacheAbstractJdbcStore.start(CacheAbstractJdbcStore.java:305)
at org.apache.ignite.internal.util.IgniteUtils.startLifecycleAware(IgniteUtils.java:8753)
... 8 more
Caused by: java.sql.SQLException: No suitable driver found for
at org.h2.jdbcx.JdbcDataSource.getJdbcConnection(JdbcDataSource.java:190)
at org.h2.jdbcx.JdbcDataSource.getConnection(JdbcDataSource.java:159)
at org.apache.ignite.cache.store.jdbc.CacheAbstractJdbcStore.openConnection(CacheAbstractJdbcStore.java:325)
at org.apache.ignite.cache.store.jdbc.CacheAbstractJdbcStore.resolveDialect(CacheAbstractJdbcStore.java:268)
... 10 more
I can see that there is a message "No suitable driver found for .." but shouldn't the H2 driver already be on the Ignite classpath already? If not, how do I fix it?
Regards
Thomas Isaksen
RE: Problem enabling read-through on cache - no suitable driver
Posted by "slava.koptilin" <sl...@gmail.com>.
Hi,
please see my answer to that thread. I hope it solves the issue.
Thanks!
--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/
RE: Problem enabling read-through on cache - no suitable driver
Posted by Thomas Isaksen <th...@sysco.no>.
Hi Slava,
Ok great that clears up things quite a bit for me.
The template I am trying to use is shown in my latest post:
http://apache-ignite-users.70518.x6.nabble.com/SQL-Error-Failed-to-query-Ignite-tp19475.html
Thanks!
./t
-----Original Message-----
From: slava.koptilin [mailto:slava.koptilin@gmail.com]
Sent: mandag 15. januar 2018 11.42
To: user@ignite.apache.org
Subject: RE: Problem enabling read-through on cache - no suitable driver
Hi Thomas,
> however, when I try using my own templates I simply get SQL
>Error[50000] "Cache doesn't exist!"
>- not sure why this is happening but maybe I'm not connecting to the
>right
DB?
Could you please provide us with the template you are trying to use?
> Is the jdbc:ignite:thin connection not a connection to the H2 instance
> used by Ignite internally?
No, jdbc:ignite:thin is not a connection to the underlying H2 db. This is a thin driver which is used to connect to Ignite node and allows processing distributed data using Ignite cluster. Please see the following page for details [1]
[1] https://apacheignite-sql.readme.io/docs/jdbc-driver#jdbc-thin-driver
Thanks,
Slava.
--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/
RE: Problem enabling read-through on cache - no suitable driver
Posted by "slava.koptilin" <sl...@gmail.com>.
Hi Thomas,
> however, when I try using my own templates I simply get SQL Error[50000]
> "Cache doesn't exist!"
>- not sure why this is happening but maybe I'm not connecting to the right
DB?
Could you please provide us with the template you are trying to use?
> Is the jdbc:ignite:thin connection not a connection to the H2 instance
> used by Ignite internally?
No, jdbc:ignite:thin is not a connection to the underlying H2 db. This is a
thin driver which is used to connect to Ignite node and allows processing
distributed data using Ignite cluster. Please see the following page for
details [1]
[1] https://apacheignite-sql.readme.io/docs/jdbc-driver#jdbc-thin-driver
Thanks,
Slava.
--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/
RE: Problem enabling read-through on cache - no suitable driver
Posted by Thomas Isaksen <th...@sysco.no>.
Hi Slava,
Thank you so much for your reply it is most helpful!
I'm a little confused by all of this because I have been connecting with DBeaver to jdbc:ignite:thin://127.0.0.1/ and I can create tables there if I use the predefined templates PARTITIONED or REPLICATED, however, when I try using my own templates I simply get SQL Error[50000] "Cache doesn't exist!" - not sure why this is happening but maybe I'm not connecting to the right DB?
Is the jdbc:ignite:thin connection not a connection to the H2 instance used by Ignite internally? Is it not "legit" to use this instance to create my tables or do I have to use another database?
./t
-----Original Message-----
From: slava.koptilin [mailto:slava.koptilin@gmail.com]
Sent: torsdag 11. januar 2018 17.26
To: user@ignite.apache.org
Subject: Re: Problem enabling read-through on cache - no suitable driver
Hi Thomas,
Please make sure that your h2 database is started and required tables are created.
You can use the following test as example how to do that (please see,
CacheJdbcPojoStoreAbstractSelfTest#beforeTest)
https://github.com/apache/ignite/blob/master/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreAbstractSelfTest.java
Cache configuration should be modified as well.
1. First of all, correct DB connection URL should be provided. For instance,
<bean id="simpleDataSource" class="org.h2.jdbcx.JdbcDataSource">
<property name="URL"
value="jdbc:h2:mem:TestDatabase;DB_CLOSE_DELAY=-1"/>
<property name="user" value="username"/>
<property name="password" value=""/>
</bean>
2. secondly, you need to configure types mapping within the cache configuration. Let's assume that you have a simple cache IgniteCache<Integer, String>
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="test-cache"/>
<property name="readThrough" value="true"/>
<property name="writeThrough" value="true"/>
<property name="cacheStoreFactory">
<bean
class="org.apache.ignite.cache.store.jdbc.CacheJdbcPojoStoreFactory">
<property name="dataSourceBean" value="storeDataSource"/>
<property name="dialect">
<bean
class="org.apache.ignite.cache.store.jdbc.dialect.H2Dialect"/>
</property>
<property name="types">
<list>
<bean
class="org.apache.ignite.cache.store.jdbc.JdbcType">
<property name="cacheName" value="test-cache"/>
<property name="keyType"
value="java.lang.Integer"/>
<property name="valueType"
value="java.lang.String"/>
<property name="databaseSchema" value="PUBLIC"/>
<property name="databaseTable"
value="testtable"/>
<property name="keyFields">
<list>
<bean class="org.apache.ignite.cache.store.jdbc.JdbcTypeField">
<property name="databaseFieldName"
value="ID"/>
<property name="databaseFieldType">
<util:constant static-field="java.sql.Types.INTEGER"/>
</property>
<property name="javaFieldName"
value="id"/>
<property name="javaFieldType"
value="java.lang.Integer"/>
</bean>
</list>
</property>
<property name="valueFields">
<list>
<bean class="org.apache.ignite.cache.store.jdbc.JdbcTypeField">
<property name="databaseFieldName"
value="name"/>
<property name="databaseFieldType">
<util:constant static-field="java.sql.Types.VARCHAR"/>
</property>
<property name="javaFieldName"
value="name"/>
<property name="javaFieldType"
value="java.lang.String"/>
</bean>
</list>
</property>
</bean>
</list>
</property>
</bean>
</property>
</bean>
additional example(s) can be found here:
https://github.com/apache/ignite/blob/master/modules/spring/src/test/config/jdbc-pojo-store-builtin.xml
Thanks,
Slava.
--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/
Re: Problem enabling read-through on cache - no suitable driver
Posted by "slava.koptilin" <sl...@gmail.com>.
Hi Thomas,
Please make sure that your h2 database is started and required tables are
created.
You can use the following test as example how to do that (please see,
CacheJdbcPojoStoreAbstractSelfTest#beforeTest)
https://github.com/apache/ignite/blob/master/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreAbstractSelfTest.java
Cache configuration should be modified as well.
1. First of all, correct DB connection URL should be provided. For instance,
<bean id="simpleDataSource" class="org.h2.jdbcx.JdbcDataSource">
<property name="URL"
value="jdbc:h2:mem:TestDatabase;DB_CLOSE_DELAY=-1"/>
<property name="user" value="username"/>
<property name="password" value=""/>
</bean>
2. secondly, you need to configure types mapping within the cache
configuration. Let's assume that you have a simple cache
IgniteCache<Integer, String>
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="test-cache"/>
<property name="readThrough" value="true"/>
<property name="writeThrough" value="true"/>
<property name="cacheStoreFactory">
<bean
class="org.apache.ignite.cache.store.jdbc.CacheJdbcPojoStoreFactory">
<property name="dataSourceBean" value="storeDataSource"/>
<property name="dialect">
<bean
class="org.apache.ignite.cache.store.jdbc.dialect.H2Dialect"/>
</property>
<property name="types">
<list>
<bean
class="org.apache.ignite.cache.store.jdbc.JdbcType">
<property name="cacheName" value="test-cache"/>
<property name="keyType"
value="java.lang.Integer"/>
<property name="valueType"
value="java.lang.String"/>
<property name="databaseSchema" value="PUBLIC"/>
<property name="databaseTable"
value="testtable"/>
<property name="keyFields">
<list>
<bean
class="org.apache.ignite.cache.store.jdbc.JdbcTypeField">
<property name="databaseFieldName"
value="ID"/>
<property name="databaseFieldType">
<util:constant
static-field="java.sql.Types.INTEGER"/>
</property>
<property name="javaFieldName"
value="id"/>
<property name="javaFieldType"
value="java.lang.Integer"/>
</bean>
</list>
</property>
<property name="valueFields">
<list>
<bean
class="org.apache.ignite.cache.store.jdbc.JdbcTypeField">
<property name="databaseFieldName"
value="name"/>
<property name="databaseFieldType">
<util:constant
static-field="java.sql.Types.VARCHAR"/>
</property>
<property name="javaFieldName"
value="name"/>
<property name="javaFieldType"
value="java.lang.String"/>
</bean>
</list>
</property>
</bean>
</list>
</property>
</bean>
</property>
</bean>
additional example(s) can be found here:
https://github.com/apache/ignite/blob/master/modules/spring/src/test/config/jdbc-pojo-store-builtin.xml
Thanks,
Slava.
--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/