Embarked on my Infinispan journey today (we are moving from Apache JCS to Infinispan) and ran into the following (base) exception:
Caused by: org.infinispan.commons.CacheConfigurationException: ISPN000327: Cannot find a parser for element 'string-keyed-jdbc-store' in namespace 'urn:infinispan:config:store:jdbc:13.0'. Check that your configuration is up-to date for Infinispan '13.0.11.Final' and if you have the proper dependency in the classpath
at org.infinispan.configuration.parsing.ParserRegistry.findNamespaceParser(ParserRegistry.java:233)
at org.infinispan.configuration.parsing.ParserRegistry.parseElement(ParserRegistry.java:206)
at org.infinispan.configuration.parsing.ConfigurationBuilderHolder.handleAnyElement(ConfigurationBuilderHolder.java:139)
at org.infinispan.commons.configuration.io.AbstractConfigurationReader.handleAny(AbstractConfigurationReader.java:57)
at org.infinispan.configuration.parsing.CacheParser.parsePersistence(CacheParser.java:1397)
at org.infinispan.configuration.parsing.CacheParser.parseCacheElement(CacheParser.java:488)
at org.infinispan.configuration.parsing.CacheParser.parseSharedStateCacheElement(CacheParser.java:220)
at org.infinispan.configuration.parsing.CacheParser.parseReplicatedCache(CacheParser.java:1154)
at org.infinispan.configuration.parsing.Parser.parseCaches(Parser.java:849)
at org.infinispan.configuration.parsing.Parser.parseContainer(Parser.java:735)
at org.infinispan.configuration.parsing.Parser.readElement(Parser.java:85)
at org.infinispan.configuration.parsing.ParserRegistry.parseElement(ParserRegistry.java:209)
at org.infinispan.configuration.parsing.ParserRegistry.parse(ParserRegistry.java:187)
at org.infinispan.configuration.parsing.ParserRegistry.parse(ParserRegistry.java:175)
at org.infinispan.configuration.parsing.ParserRegistry.parse(ParserRegistry.java:157)
at org.infinispan.configuration.parsing.ParserRegistry.parse(ParserRegistry.java:141)
at org.infinispan.globalstate.impl.GlobalConfigurationManagerImpl.buildConfiguration(GlobalConfigurationManagerImpl.java:302)
at org.infinispan.globalstate.impl.GlobalConfigurationManagerImpl.createCacheLocally(GlobalConfigurationManagerImpl.java:277)
at org.infinispan.globalstate.impl.GlobalConfigurationStateListener.handleCreate(GlobalConfigurationStateListener.java:46)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.infinispan.notifications.impl.AbstractListenerImpl$ListenerInvocationImpl.lambda$invoke$1(AbstractListenerImpl.java:424)
... 62 more
The code is as follows and exception is generated from getOrCreateCache.
GlobalConfigurationBuilder gcb = GlobalConfigurationBuilder.defaultClusteredBuilder();
EmbeddedCacheManager ecm = new DefaultCacheManager(gcb.build());
//now per cache configuration.
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.clustering().cacheMode(CacheMode.REPL_SYNC);
cb.persistence().addStore(JdbcStringBasedStoreConfigurationBuilder.class)
.shared(true)
.dialect(DatabaseType.POSTGRES)
.table()
.dropOnExit(false)
.createOnStart(true)
.tableNamePrefix("INFINISPAN_TEST")
.idColumnName("ID_COLUMN").idColumnType("VARCHAR(255)")
.dataColumnName("DATA_COLUMN").dataColumnType("bytea")
.timestampColumnName("TIMESTAMP_COLUMN").timestampColumnType("BIGINT")
.segmentColumnName("SEGMENT_COLUMN").segmentColumnType("INT")
.connectionPool()
.connectionUrl("jdbc:postgresql://localhost:5432/testinfini")
.username("user")
.password("password")
.driverClass("org.postgresql.Driver");
Cache<String, String> cache = ecm.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE).getOrCreateCache("myCache", cb.build());
The dependencies have been collected post modifying the Embedded WeatherApp Sample pom.xml.
Here is a snippet of that too.
<properties>
<version.infinispan>13.0.11.Final</version.infinispan>
<version.javax.annotation.javax.annotation-api>1.3.1</version.javax.annotation.javax.annotation-api>
<version.protostream>4.4.4.Final</version.protostream>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-bom</artifactId>
<version>${version.infinispan}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-core</artifactId>
</dependency>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-cachestore-jdbc</artifactId>
<version>${version.infinispan}</version>
</dependency>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-cachestore-jdbc-common</artifactId>
<version>${version.infinispan}</version>
</dependency>
<dependency>
<groupId>org.infinispan.protostream</groupId>
<artifactId>protostream-processor</artifactId>
<version>${version.protostream}</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>${version.javax.annotation.javax.annotation-api}</version>
</dependency>
</dependencies>
Would be much grateful for any pointers as to what I am doing wrong here?