Third party "Blaze Persistence" libraries in ignition gateway module

I have included the Blaze persistence libraries into the gateway module pom.xml, in ingnition I am getting an exception like No CriteriaBuilderConfigurationProvider found on the class path. Please check if a valid implementation is on the class path.

Even I have added the Balze persistence related libraries in to the lib\core\gateway, still the same error.


java.lang.IllegalStateException: No CriteriaBuilderConfigurationProvider found on the class path. Please check if a valid implementation is on the class path.
 	at com.blazebit.persistence.Criteria.getDefaultProvider(Criteria.java:53)
 	at com.blazebit.persistence.Criteria.getDefault(Criteria.java:65)
 	at com.optebiz.factogrid.factomes.utils.CommonUtils.getConfiguration(CommonUtils.java:9)
 	at com.optebiz.factogrid.factomes.scripting.GatewayHook.startup(GatewayHook.java:40)
 	at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$LoadedModule.startup(ModuleManagerImpl.java:2439)
 	at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.startupModule(ModuleManagerImpl.java:1232)
 	at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$2.call(ModuleManagerImpl.java:777)
 	at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.executeModuleOperation(ModuleManagerImpl.java:953)
 	at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.installModuleInternal(ModuleManagerImpl.java:743)
 	at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$InstallCommand.execute(ModuleManagerImpl.java:1909)
 	at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$Receiver.receiveCall(ModuleManagerImpl.java:1862)
 	at com.inductiveautomation.ignition.gateway.redundancy.QueueableMessageReceiver.receiveCall(QueueableMessageReceiver.java:47)
 	at com.inductiveautomation.ignition.gateway.redundancy.RedundancyManagerImpl.dispatchMessage(RedundancyManagerImpl.java:1007)
 	at com.inductiveautomation.ignition.gateway.redundancy.RedundancyManagerImpl$ExecuteTask.run(RedundancyManagerImpl.java:1075)
 	at com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$ThrowableCatchingRunnable.run(BasicExecutionEngine.java:544)
 	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
 	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
 	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
 	at java.base/java.lang.Thread.run(Unknown Source)

Show how you're configuring the dependency in your pom.xml, please. Post it here as preformatted text inside triple backticks:
```
<xml>
``​`

Here is the pom.xml in gateway.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<artifactId>...</artifactId>
		<groupId>com.optebiz...</groupId>
		<version>1.0.0-SNAPSHOT</version>
	</parent>

	<artifactId>...-gateway</artifactId>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.compiler.source>11</maven.compiler.source>
		<maven.compiler.target>11</maven.compiler.target>

		<version.hibernate>6.1.3.Final</version.hibernate>
		<version.blaze-persistence>1.6.7</version.blaze-persistence>
	</properties>

	<dependencies>
		<dependency>
			<groupId>com.optebiz...</groupId>
			<artifactId>...-common</artifactId>
			<version>${project.version}</version>
		</dependency>
		<dependency>
			<groupId>com.inductiveautomation.ignitionsdk</groupId>
			<artifactId>ignition-common</artifactId>
			<version>${ignition-sdk-version}</version>
			<type>pom</type>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>com.inductiveautomation.ignitionsdk</groupId>
			<artifactId>gateway-api</artifactId>
			<version>${ignition-sdk-version}</version>
			<type>pom</type>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>com.inductiveautomation.ignitionsdk</groupId>
			<artifactId>driver-api</artifactId>
			<version>${ignition-sdk-version}</version>
			<type>pom</type>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.hibernate.orm</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>${version.hibernate}</version>
		</dependency>
		<dependency>
			<groupId>com.microsoft.sqlserver</groupId>
			<artifactId>mssql-jdbc</artifactId>
			<version>11.2.1.jre8</version>
		</dependency>
		<dependency>
			<groupId>org.postgresql</groupId>
			<artifactId>postgresql</artifactId>
			<version>42.5.0</version>
		</dependency>
		<dependency>
			<groupId>com.oracle.database.jdbc</groupId>
			<artifactId>ojdbc8</artifactId>
			<version>21.7.0.0</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.30</version>
		</dependency>
		<dependency>
			<groupId>com.blazebit</groupId>
			<artifactId>blaze-persistence-core-api-jakarta</artifactId>
			<version>${version.blaze-persistence}</version>
		</dependency>
		<dependency>
			<groupId>com.blazebit</groupId>
			<artifactId>blaze-persistence-core-impl-jakarta</artifactId>
			<version>${version.blaze-persistence}</version>
		</dependency>
		<dependency>
			<groupId>com.blazebit</groupId>
			<artifactId>blaze-persistence-integration-hibernate-6.0</artifactId>
			<version>${version.blaze-persistence}</version>
		</dependency>
		<dependency>
			<groupId>jakarta.xml.bind</groupId>
			<artifactId>jakarta.xml.bind-api</artifactId>
			<version>4.0.0</version>
		</dependency>
		<dependency>
			<groupId>com.sun.xml.bind</groupId>
			<artifactId>jaxb-impl</artifactId>
			<version>4.0.1</version>
		</dependency>
		<dependency>
			<groupId>jakarta.transaction</groupId>
			<artifactId>jakarta.transaction-api</artifactId>
			<version>2.0.1</version>
		</dependency>
		<dependency>
			<groupId>jakarta.activation</groupId>
			<artifactId>jakarta.activation-api</artifactId>
			<version>2.1.0</version>
		</dependency>
		<dependency>
			<groupId>jakarta.annotation</groupId>
			<artifactId>jakarta.annotation-api</artifactId>
			<version>2.1.0</version>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.24</version>
		</dependency>
		<dependency>
			<groupId>com.google.guava</groupId>
			<artifactId>guava</artifactId>
			<version>31.1-jre</version>
		</dependency>
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
			<version>2.9.0</version>
		</dependency>
		<dependency>
			<groupId>org.reflections</groupId>
			<artifactId>reflections</artifactId>
			<version>0.10.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-api</artifactId>
			<version>2.19.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-core</artifactId>
			<version>2.19.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-slf4j-impl</artifactId>
			<version>2.19.0</version>
		</dependency>
		<dependency>
			<groupId>com.lmax</groupId>
			<artifactId>disruptor</artifactId>
			<version>3.4.4</version>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.1</version>
				<configuration>
					<annotationProcessorPaths>
						<path>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
							<version>1.18.24</version>
						</path>
					</annotationProcessorPaths>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

I don't know anything about this library, but are you expecting to provide the CriteriaBuilderConfigurationProvider in your own code, or are you expecting one of your dependencies to provide it at runtime?
It's using the ServiceLoader paradigm, which requires you to add manifest information to the output JAR.
If you're expecting your own code to provide this, you will likely need to tell Maven to do so or add the required manifest file directly to your src/main/resources/. If you're expecting one of your dependencies to add it, you should check that they are by inspecting the .jar file(s) yourself; they're just .zip files.
You can also double-check that your required dependencies are actually included in your .modl and correctly linked in your module.xml file to opening the .modl as a ZIP.

This below one line resolved my problem

Thread.currentThread().setContextClassLoader(CriteriaBuilderConfigurationProvider.class.getClassLoader());

Thanks...

1 Like