Liquibase fails with MongoDB - spring

I want to get an example of liquibase, Spring and MongoDB all together. In order to do so, I created a Spring project using Spring Initializr with Spring Data MongoDB as dependency. The project already connects to the database and now I would like to use liquibase. I followed the instructions from liquibase using the maven approach but if I run the maven command mvn liquibase:status I will get the following error:
Unexpected error running Liquibase: Cannot find database driver: com.mongodb.client.MongoClients.<init>()
It looks like this problem has been already reported to liquibase but if there is a solution it hasn't been posted in the issue.
I tried as well to use the CLI option by adding the jars to the lib folder of the liquibase installation. I got the same error if I run liquibase status
I have created a repo in GitHub to show the problem. Here there is some relevant configuration of the code:
pom.xml
<project>
...
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.3</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
...
<properties>
<liquibase-mongo-ext.version>4.14.0</liquibase-mongo-ext.version>
<liquibase-maven-plugin.version>4.2.0</liquibase-maven-plugin.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.liquibase.ext</groupId>
<artifactId>liquibase-mongodb</artifactId>
<version>${liquibase-mongo-ext.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>${liquibase-maven-plugin.version}</version>
<configuration>
<propertyFile>liquibase.properties</propertyFile>
</configuration>
<dependencies>
<dependency>
<groupId>org.liquibase.ext</groupId>
<artifactId>liquibase-mongodb</artifactId>
<version>${liquibase-mongo-ext.version}</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.6.1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
liquibase.properties
changeLogFile=./mongo/changelog/changelog.sql
url=jdbc:mongodb://127.0.0.1:27017/local
driver=com.mongodb.client.MongoClients
How can I get liquibase running with maven? Any suggestions?
EDIT 1:
As Andrey suggested:
Driver was updated to: driver=liquibase.ext.mongodb.database.MongoClientDriver
Url was updated to:
url=mongodb://127.0.0.1:27017/local
plugin from liquibase was updated with new dependency
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>4.9.1</version>
</dependency>
mvn liquibase:update now trhows the following error. Since the other error seems to be unrelated to this one. I'll solve this answer and create a new thread.
[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:4.2.0:update (default-cli) on project mongo: Execution default-cli of goal org.liquibase:liquibase-maven-plugin:4.2.0:update failed: A required class was missing while executing org.liquibase:liquibase-maven-plugin:4.2.0:update: liquibase/configuration/HubConfiguration
EDIT 2:
As mentioned in the answer, there was a mismatch between the version from Spring and the version of the plugin, which failed to find the class because HubConfiguration class is now under liquibase.hub.HubConfiguration This set up could have led to a CastException as well. So I updated the version liquibase-maven-plugin to 4.9.1
Also the use of the local database is not compatible with validators. The URI was updated to url=mongodb://127.0.0.1:27017/test in the liquibase.properties file.
Now it works like a charm! :D

I have found following mistakes in your configuration:
1.
changeLogFile=./mongo/changelog/changelog.sql
url=jdbc:mongodb://127.0.0.1:27017/local
driver=com.mongodb.client.MongoClients
while liquibase-mongodb expects something like (no jdbc prefix, another driver class):
changeLogFile=./mongo/changelog/changelog.sql
url=mongodb://127.0.0.1:27017/local
driver=liquibase.ext.mongodb.database.MongoClientDriver
liquibase version:
<liquibase-maven-plugin.version>4.2.0</liquibase-maven-plugin.version>
4.2.0 liquibase version seems to be incompatible with NoSQL DB extensions
spring boot 2.7.3 uses liquibase 4.9.1 - you need somehow choose the correct liquibase version
Finally I get the following on liquibase:update:
[ERROR] Failed to execute goal
org.liquibase:liquibase-maven-plugin:4.14.0:update (default-cli) on
project mongo: [ERROR] Error setting up or running Liquibase: [ERROR]
liquibase.exception.DatabaseException: Could not execute: Command
failed with error 72 (InvalidOptions): 'Document validators are not
allowed on collection local.DATABASECHANGELOGLOCK with UUID
31bd40b8-3e1c-45c8-9d03-77b91c67a1a9 in the local internal database'
on server 127.0.0.1:27017. The full response is {"ok": 0.0, "errmsg":
"Document validators are not allowed on collection
local.DATABASECHANGELOGLOCK with UUID
31bd40b8-3e1c-45c8-9d03-77b91c67a1a9 in the local internal database",
"code": 72, "codeName": "InvalidOptions"}
no idea what does it mean - something related to mongodb and extension I believe
UPD.
The root cause of last error is described in documentation:
Restrictions
You cannot specify a validator for collections in the admin, local, and config databases.
You cannot specify a validator for system.* collections.
So, url (jdbc:mongodb://127.0.0.1:27017/local) should point to another db.

Related

Correct the classpath of your application so that it contains a single, compatible version of org.elasticsearch.common.logging.Loggers

I'm getting following error while running my Spring boot app, I'm new to Spring boot and elastic search, please help to solve this issue.And attached my pom dependencies below.
Thanks in advance,
*************************** APPLICATION FAILED TO START ***************************
Description:
An attempt was made to call the method org.elasticsearch.common.logging.Loggers.getLogger(Ljava/lang/String;)Lorg/apache/logging/log4j/Logger; but it does not exist. Its class, org.elasticsearch.common.logging.Loggers, is available from the following locations:
jar:file:/C:/Users/Sudhakar/.m2/repository/org/elasticsearch/elasticsearch/6.6.2/elasticsearch-6.6.2.jar!/org/elasticsearch/common/logging/Loggers.class
It was loaded from the following location:
file:/C:/Users/Sudhakar/.m2/repository/org/elasticsearch/elasticsearch/6.6.2/elasticsearch-6.6.2.jar
Action:
Correct the classpath of your application so that it contains a single, compatible version of org.elasticsearch.common.logging.Loggers
Process finished with exit code 1
Maven dependencies:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.24</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.6.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.6.2</version>
</dependency>
Spring Boot uses Elasticsearch 6.4 by default. By using 6.6.2 as the versions for two Elasticsearch modules you will have ended up with a mixture of the two versions. You should remove the <version> configuration in your pom. If you are able to use Spring Boot’s default version there’s nothing more to do. If you need to use 6.6.2 you should add an entry in your pom’s <properties>:
<elasticsearch.version>6.6.2</elasticsearch.version>

Selenium-TestNG-Maven - Getting "java.lang.NoClassDefFoundError: org/openqa/selenium/firefox/FirefoxDriver"

This is my first selenium script using TestNG and Maven.
Created a simple "Hello World" code and a selenium test code which just checks the title of google page.
Selenium Code Below with TestNG:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;
public class HelloTest {
#Test
public void testOne() {
//WebDriver d=new FirefoxDriver();
System.setProperty("webdriver.gecko.driver","D:\\Firefox Driver\\geckodriver-v0.17.0-win64\\geckodriver.exe");
WebDriver d=new FirefoxDriver();
d.get("https://www.google.com");
System.out.println("This is first TestNG");
}
}
This is working absolutely fine when run through eclipse - Run As - Test NG test.
But when ran through Maven - mvn clean install from cmd prompt, i am getting below error
T E S T S
-------------------------------------------------------
Running HelloTest
Configuring TestNG with: TestNG652Configurator
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.94 sec <<< FAILURE! - in HelloTest
testOne(HelloTest) Time elapsed: 0.032 sec <<< FAILURE!
java.lang.NoClassDefFoundError: org/openqa/selenium/firefox/FirefoxDriver
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at HelloTest.testOne(HelloTest.java:11)
It is showing error at WebDriver d=new FirefoxDriver();. Not sure where the issue is. Added all jar files , checked the build path and all the jar were there. Below is my POM file.
<?xml version="1.0"?>
<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>
<groupId>com.demo.micky</groupId>
<artifactId>MavenDemoTwo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.9.8</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.12.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-firefox-driver</artifactId>
<version>3.12.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server</artifactId>
<version>3.12.0</version>
</dependency>
<dependency>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
<type>jar</type>
<version>15.0</version>
</dependency>
</dependencies>
</project>
Any help is deeply appreciated.
What is NoClassDefFoundError
NoClassDefFoundError in Java occurs when JVM is not able to find a particular class at runtime which was available at compile time. For example, if we have resolved a method call from a Class or accessing any static member of a Class and that Class is not available during runtime then JVM will throw NoClassDefFoundError.
The error you are seeing is :
java.lang.NoClassDefFoundError: org/openqa/selenium/firefox/FirefoxDriver
This clearly indicates that Selenium is trying to resolve the particular FirefoxDriver Class at runtime from org/openqa/selenium/firefox/FirefoxDriver which is not available.
What went wrong :
This situation occurs if there are presence of multiple sources to resolve the Classes and Methods through JDK/Maven/Gradle.
From the pom.xml it is pretty clear that you have added multiple dependencies for FirefoxDriver Class as follows:
<artifactId>selenium-java</artifactId>:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.12.0</version>
<scope>test</scope>
</dependency>
<artifactId>selenium-firefox-driver</artifactId>:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-firefox-driver</artifactId>
<version>3.12.0</version>
</dependency>
<artifactId>selenium-server</artifactId>:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server</artifactId>
<version>3.12.0</version>
</dependency>
Additionally you have also added all jar files.
From all the above mentioned points it's clear that the related Class or Methods were resolved from one source at Compile Time which was not available during Run Time.
Solution :
Here are a few steps to solve NoClassDefFoundError :
While using a Build Tool e.g. Maven or Gradle, remove all the External JARs from the Java Build Path. Maven or Gradle will download all the dependencies mentioned in the configuration file (e.g. pom.xml) to resolve the Classes and Methods.
If using Selenium JARs within a Java Project add only required External JARs within the Java Build Path and remove the unused and duplicate External JARs.
If you are using FirefoxDriver use either of the <artifactId>selenium-java</artifactId> or <artifactId>selenium-server</artifactId>. Avoid using both at the same time.
Remove the unwanted and duplicated from pom.xml
Clean your Project Workspace through your IDE and Rebuild your project with required dependencies only.
Use CCleaner tool to wipe off all the OS chores before and after the execution of your Test Suite.
If your base Web Client version is too old, then uninstall it through Revo Uninstaller and install a recent GA and released version of Web Client.
Take a System Reboot.
While you execute a Maven Project always perform the folling in sequence:
maven clean
maven install
maven test
You can find related discussions in:
Exception in thread “main” java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver
How to solve java.lang.NoClassDefFoundError? Selenium
java.lang.NoClassDefFoundError: com/google/common/base/Function
I was using eclipse 09-2019 which is the latest one with latest JDK installed 13, and latest selenium jar files 3.141.59, I installed other JDKs to work around to solve this issue after trying all answers on similar question. Then after 4 days trying, installed eclipse neon version(https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/neon/3/eclipse-java-neon-3-win32-x86_64.zip&mirror_id=105) and used Selenium-Java 3.5.2 jar files (https://jar-download.com/artifacts/org.seleniumhq.selenium/selenium-java/3.5.2/source-code) and now it is working perfectly Alhamdullilah.
Also I don't know what was the errors root cause exactly or at all, but now it is solved.
Wish if that help You

Spring boot 2.0.0.M1 NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.<init>

I used the starter page on https://start.spring.io/ to generate a project with a number of included modules
When I try to run the tests I get a lot of log info but these lines seem key
10:29:33.198 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding [Inlined Test Properties] PropertySource with highest search precedence
10:29:33.364 [main] DEBUG org.springframework.boot.context.logging.ClasspathLoggingApplicationListener - Application failed to start with classpath: [file:/C:/privilege/target/surefire/surefirebooter1615922581175854972.jar]
10:29:33.369 [main] ERROR org.springframework.boot.SpringApplication - Application startup failed
java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.<init>([Ljava/lang/Object;)V
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.bootstrapServiceContext(BootstrapApplicationListener.java:157)
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:98)
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:64)
The modules that I selected are:
Security
AOP
Web Jersey (JAX-RS)
Rest Repositories
DevTools
Cache
Session
Mobile
REST
Docs
Thymeleaf
MongoDB
Zuul
Zookeeper Discovery
Solr
Cloud
OAuth2
Lombok
Retry
I had to make a few mods to the generated pom but I think that I have a reasonable set of versions.
From the "effective pom" generated by STS, get the following properties:
<spring-batch.version>4.0.0.M2</spring-batch.version>
<undertow.version>1.4.14.Final</undertow.version>
<httpclient.version>4.5.3</httpclient.version>
<maven-surefire-plugin.version>2.18.1</maven-surefire-plugin.version>
<webjars-locator.version>0.32-1</webjars-locator.version>
<spring-ldap.version>2.3.1.RELEASE</spring-ldap.version>
<spring-security-oauth.version>2.1.0.RELEASE</spring-security-oauth.version>
<hibernate.version>5.2.10.Final</hibernate.version>
<groovy.version>2.4.11</groovy.version>
<rxjava2.version>2.1.0</rxjava2.version>
<byte-buddy.version>1.6.14</byte-buddy.version>
<spring-social-linkedin.version>2.0.0.M2</spring-social-linkedin.version>
<jmustache.version>1.13</jmustache.version>
<spring-cloud-connectors.version>2.0.0.M1</spring-cloud-connectors.version>
<mockito.version>2.7.22</mockito.version>
<reactor-bom.version>Bismuth-M1</reactor-bom.version>
<maven-antrun-plugin.version>1.8</maven-antrun-plugin.version>
<java.version>1.8</java.version>
<bitronix.version>2.1.4</bitronix.version>
<commons-beanutils.version>1.9.3</commons-beanutils.version>
<exec-maven-plugin.version>1.5.0</exec-maven-plugin.version>
<atomikos.version>3.9.3</atomikos.version>
<maven-javadoc-plugin.version>2.10.4</maven-javadoc-plugin.version>
<jersey.version>2.25.1</jersey.version>
<jaxen.version>1.1.6</jaxen.version>
<caffeine.version>2.5.0</caffeine.version>
<couchbase-cache-client.version>2.1.0</couchbase-cache-client.version>
<sun-mail.version>1.6.0-rc1</sun-mail.version>
<lettuce.version>5.0.0.M2</lettuce.version>
<wsdl4j.version>1.6.3</wsdl4j.version>
<jedis.version>2.9.0</jedis.version>
<javax-mail.version>1.6.0-rc1</javax-mail.version>
<lombok.version>1.16.16</lombok.version>
<maven-failsafe-plugin.version>2.18.1</maven-failsafe-plugin.version>
<activemq.version>5.14.5</activemq.version>
<spring-security-jwt.version>1.0.7.RELEASE</spring-security-jwt.version>
<spring-mobile.version>2.0.0.M1</spring-mobile.version>
<log4j2.version>2.8.2</log4j2.version>
<hazelcast-hibernate5.version>1.2.1</hazelcast-hibernate5.version>
<janino.version>3.0.7</janino.version>
<aspectj.version>1.8.10</aspectj.version>
<versions-maven-plugin.version>2.3</versions-maven-plugin.version>
<spring-kafka.version>2.0.0.M2</spring-kafka.version>
<tomcat.version>8.5.15</tomcat.version>
<postgresql.version>42.1.1</postgresql.version>
<statsd-client.version>3.1.0</statsd-client.version>
<spring-social-twitter.version>2.0.0.M2</spring-social-twitter.version>
<flyway.version>4.2.0</flyway.version>
<snakeyaml.version>1.18</snakeyaml.version>
<maven-enforcer-plugin.version>1.4</maven-enforcer-plugin.version>
<spring-cloud-starter-zuul.version>1.3.0.RELEASE</spring-cloud-starter-zuul.version>
<resource.delimiter>#</resource.delimiter>
<maven-dependency-plugin.version>2.10</maven-dependency-plugin.version>
<spring-cloud-starter-zookeeper-discovery.version>1.1.0.RELEASE</spring-cloud-starter-zookeeper-discovery.version>
<assertj.version>3.7.0</assertj.version>
<hikaricp.version>2.6.1</hikaricp.version>
<nekohtml.version>1.9.22</nekohtml.version>
<jest.version>2.4.0</jest.version>
<javax-transaction.version>1.2</javax-transaction.version>
<hazelcast.version>3.8.1</hazelcast.version>
<glassfish-el.version>3.0.0</glassfish-el.version>
<mariadb.version>2.0.1</mariadb.version>
<javax-validation.version>1.1.0.Final</javax-validation.version>
<thymeleaf-extras-java8time.version>3.0.0.RELEASE</thymeleaf-extras-java8time.version>
<spring-social.version>2.0.0.M3</spring-social.version>
<spring-security.version>5.0.0.M1</spring-security.version>
<solr.version>6.5.1</solr.version>
<maven-eclipse-plugin.version>2.10</maven-eclipse-plugin.version>
<neo4j-ogm.version>3.0.0-M01</neo4j-ogm.version>
<servlet-api.version>3.1.0</servlet-api.version>
<joda-time.version>2.9.9</joda-time.version>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<hibernate-validator.version>5.4.1.Final</hibernate-validator.version>
<jaybird.version>3.0.0</jaybird.version>
<commons-collections.version>3.2.2</commons-collections.version>
<liquibase.version>3.5.3</liquibase.version>
<maven-resources-plugin.version>3.0.1</maven-resources-plugin.version>
<embedded-mongo.version>2.0.0</embedded-mongo.version>
<spring-integration.version>5.0.0.M4</spring-integration.version>
<querydsl.version>4.1.4</querydsl.version>
<mongodb.version>3.4.2</mongodb.version>
<commons-codec.version>1.10</commons-codec.version>
<antlr2.version>2.7.7</antlr2.version>
<maven-jar-plugin.version>3.0.2</maven-jar-plugin.version>
<xml-apis.version>1.4.01</xml-apis.version>
<selenium.version>3.4.0</selenium.version>
<jetty-el.version>8.5.9.1</jetty-el.version>
<maven-help-plugin.version>2.2</maven-help-plugin.version>
<jetty.version>9.4.5.v20170502</jetty.version>
<ehcache.version>2.10.4</ehcache.version>
<mssql-jdbc.version>6.1.0.jre8</mssql-jdbc.version>
<spring-retry.version>1.2.0.RELEASE</spring-retry.version>
<mongo-driver-reactivestreams.version>1.3.0</mongo-driver-reactivestreams.version>
<ehcache3.version>3.3.1</ehcache3.version>
<simple-json.version>1.1.1</simple-json.version>
<couchbase-client.version>2.4.5</couchbase-client.version>
<narayana.version>5.5.24.Final</narayana.version>
<freemarker.version>2.3.26-incubating</freemarker.version>
<infinispan.version>8.2.6.Final</infinispan.version>
<unboundid-ldapsdk.version>3.2.1</unboundid-ldapsdk.version>
<httpasyncclient.version>4.1.3</httpasyncclient.version>
<thymeleaf-extras-springsecurity4.version>3.0.2.RELEASE</thymeleaf-extras-springsecurity4.version>
<spring-social-facebook.version>3.0.0.M2</spring-social-facebook.version>
<classmate.version>1.3.3</classmate.version>
<artemis.version>1.5.4</artemis.version>
<spring-plugin.version>1.2.0.RELEASE</spring-plugin.version>
<spring.version>5.0.0.RC1</spring.version>
<selenium-htmlunit.version>2.26</selenium-htmlunit.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<appengine-sdk.version>1.9.53</appengine-sdk.version>
<rxjava.version>1.3.0</rxjava.version>
<maven-shade-plugin.version>2.4.3</maven-shade-plugin.version>
<netty.version>4.1.11.Final</netty.version>
<commons-dbcp2.version>2.1.1</commons-dbcp2.version>
<htmlunit.version>2.26</htmlunit.version>
<jboss-transaction-spi.version>7.6.0.Final</jboss-transaction-spi.version>
<hamcrest.version>1.3</hamcrest.version>
<spring-cloud-starter-oauth2.version>1.2.0.RELEASE</spring-cloud-starter-oauth2.version>
<junit.version>4.12</junit.version>
<maven-install-plugin.version>2.5.2</maven-install-plugin.version>
<javax-cache.version>1.0.0</javax-cache.version>
<build-helper-maven-plugin.version>1.10</build-helper-maven-plugin.version>
<javax-jms.version>2.0.1</javax-jms.version>
<jtds.version>1.3.1</jtds.version>
<mysql.version>5.1.42</mysql.version>
<slf4j.version>1.7.25</slf4j.version>
<git-commit-id-plugin.version>2.2.2</git-commit-id-plugin.version>
<maven-compiler-plugin.version>3.1</maven-compiler-plugin.version>
<derby.version>10.13.1.1</derby.version>
<thymeleaf-layout-dialect.version>2.2.1</thymeleaf-layout-dialect.version>
<jooq.version>3.9.2</jooq.version>
<logback.version>1.2.3</logback.version>
<maven-clean-plugin.version>3.0.0</maven-clean-plugin.version>
<thymeleaf-spring5.version>3.0.6.M4</thymeleaf-spring5.version>
<rxjava-adapter.version>1.2.1</rxjava-adapter.version>
<spring-restdocs.version>1.2.1.RELEASE</spring-restdocs.version>
<jsonassert.version>1.5.0</jsonassert.version>
<spring-session.version>2.0.0.M1</spring-session.version>
<elasticsearch.version>2.4.5</elasticsearch.version>
<spring-cloud.version>Finchley.BUILD-SNAPSHOT</spring-cloud.version>
<httpcore.version>4.4.6</httpcore.version>
<sqlite-jdbc.version>3.16.1</sqlite-jdbc.version>
<dom4j.version>1.6.1</dom4j.version>
<thymeleaf-extras-data-attribute.version>2.0.1</thymeleaf-extras-data-attribute.version>
<jdom2.version>2.0.6</jdom2.version>
<javassist.version>3.21.0-GA</javassist.version>
<jetty-jsp.version>2.2.0.v201112011158</jetty-jsp.version>
<json-path.version>2.2.0</json-path.version>
<spring-hateoas.version>0.23.0.RELEASE</spring-hateoas.version>
<spring.boot.version>2.0.0.M1</spring.boot.version>
<sendgrid.version>3.2.0</sendgrid.version>
<spring-data-releasetrain.version>Kay-M3</spring-data-releasetrain.version>
<spring-ws.version>2.4.0.RELEASE</spring-ws.version>
<dropwizard-metrics.version>3.2.2</dropwizard-metrics.version>
<commons-pool.version>1.6</commons-pool.version>
<jboss-logging.version>3.3.1.Final</jboss-logging.version>
<jstl.version>1.2</jstl.version>
<webjars-hal-browser.version>3325375</webjars-hal-browser.version>
<maven-war-plugin.version>2.6</maven-war-plugin.version>
<gson.version>2.8.0</gson.version>
<h2.version>1.4.195</h2.version>
<cassandra-driver.version>3.2.0</cassandra-driver.version>
<jolokia.version>1.3.6</jolokia.version>
<maven-assembly-plugin.version>2.6</maven-assembly-plugin.version>
<commons-digester.version>2.1</commons-digester.version>
<jackson.version>2.9.0.pr3</jackson.version>
<jna.version>4.4.0</jna.version>
<maven-source-plugin.version>3.0.1</maven-source-plugin.version>
<maven.compiler.target>1.8</maven.compiler.target>
<commons-lang3.version>3.5</commons-lang3.version>
<maven-deploy-plugin.version>2.8.2</maven-deploy-plugin.version>
<thymeleaf.version>3.0.6.RELEASE</thymeleaf.version>
<commons-pool2.version>2.4.2</commons-pool2.version>
<maven-site-plugin.version>3.5.1</maven-site-plugin.version>
<maven-invoker-plugin.version>1.10</maven-invoker-plugin.version>
<spring-amqp.version>2.0.0.M4</spring-amqp.version>
<maven.compiler.source>1.8</maven.compiler.source>
<hsqldb.version>2.4.0</hsqldb.version>
The constructor of SpringApplicationBuilder has recently been changed in spring-boot 2.0.0.M1.
I had the same problem, but after updating to spring-cloud Finchley.BUILD-SNAPSHOT it disappeared. However, that's the version I see in your properties above.
In the end, I'm not exactly sure what causes your problem (and maybe shouldn't post this as an answer, but it's too long for a comment) but maybe that's a start for further investigation.
Since 2.0.0.M1 is not stable, you may want to wait for spring-boot 2.0.0 to be released. Otherwise, try deleting your local SNAPSHOT versions of spring.
I'll update this answer if I figure out more.
Just check spring-cloud-starter server version compatibility with spring-boot-starter-parent. This will help and it will resolve
15:49:31.609 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.<init>([Ljava/lang/Object;)V
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.bootstrapServiceContext(BootstrapApplicationListener.java:125)
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:89)
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:62)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127)
at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:74)
at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54)
at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:364)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:323)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1277)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1265)
In my case I've resolved this using spring-boot-starter-parent version 2.0.5.RELEASE and spring-cloud-starter-netflix-eureka-server with version Finchley.SR1.
Also added spring-cloud-starter-config dependencies with it.
Thanks and Hope It will help you.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
adding above tag for
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
resolved my problem, it's issue with spring - cloud and spring 2.1.x versions
Just complementing #Michel Jung's answer, I just needed to keep the spring-boot version as the same:
2.0.4.RELEASE
And add the Finchley.RELEASE's mavenBom as recommended here:
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:Finchley.RELEASE"
}
}
repositories {
maven {
url 'https://repo.spring.io/libs-milestone'
}
}
You need to check the consistency between Spring boot version and Release train version. Full documentation is HERE
You need to check Table 1. Release train Spring Boot compatibility
For example, if you use Spring Boot 2.4.x version, consistent Release train is 2020.0.x
For 2.2.0.RELEASE Spring Boot version compatible Release Train is Hoxton.RELEASE
In the dependencies it looks like:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.11</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Usually these factors are very simple, just find all dependencies with prefix "spring",
find out them have difference with the train version.
see
I think it is mainly happening because of the spring-cloud version. I am using 2.1.8.RELEASE of spring-boot-starter-parent and here are my findings
Tried by spring-cloud Camden.SR6 - Didn't work.
Tried by spring-cloud Finchley.SR1 - It worked this time.
I had this same problem in Java 8 while doing a project with the feign dependency, but I fixed it by changing it to the following:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.0.1.RELEASE</version>`
</dependency>

JMS connection to WebsphereMQ

I am trying to connect to WebsphereMQ using JMS.
The following configuration is defined:
properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");
properties.put(Context.URL_PKG_PREFIXES, "com.ibm.ws.naming");
properties.put(Context.PROVIDER_URL, "iiop://localhost:2809");
properties.put(Context.SECURITY_PRINCIPAL, "user")
properties.put(Context.SECURITY_CREDENTIALS, "password")
The following dependencies are included in the Maven POM file:
<dependency>
<groupId>com.ibm</groupId>
<artifactId>com.ibm.mqjms</artifactId>
<version>7.0.1.4</version>
</dependency>
<dependency>
<groupId>com.ibm</groupId>
<artifactId>com.ibm.mq.jmqi</artifactId>
<version>7.0.1.4</version>
</dependency>
<dependency>
<groupId>com.ibm</groupId>
<artifactId>com.ibm.dhbcore</artifactId>
<version>7.0</version>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>com.ibm.mq.jar</artifactId>
<version>7.0.1.4</version>
<scope>runtime</scope>
</dependency>
When trying to instantiate the context (new InitialContext(properties)), the following exception is thrown:
javax.naming.NoInitialContextException: Cannot instantiate class: com.ibm.websphere.naming.WsnInitialContextFactory [Root exception is java.lang.ClassNotFoundException: com.ibm.websphere.naming.WsnInitialContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:674)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
at javax.naming.InitialContext.init(InitialContext.java:242)
at javax.naming.InitialContext.<init>(InitialContext.java:216)
Is there a maven dependency missing?
Thanks
Not sure what the maven coordinates are, since I don't think these libraries are in any public repos, so coordinates will be repo specific, but according to this post, the jar files required are:
wssec.jar
naming.jar
namingclient.jar
lmproxy.jar
sas.jar
ecutils.jar
Nicholas' answer is correct. (Moving this from comment to allow for formatting)
IBM does not distribute their jars into Maven repositories. Someone in your organization deployed them manually (which is a common practice).
You either:
Are not pointing your maven settings.xml or project pom.xml to your organization's internal Maven Repository
Need to deploy the MQ jars to the repository manually.
mvn deploy:deploy-file -DgroupId=com.ibm.mq -DartifactId=mqjms -Dversion=7.5.0.2 -Dfile=mqjms.jar
See: https://maven.apache.org/guides/mini/guide-3rd-party-jars-remote.html

spring-boot upgrade from 1.3.2 to 1.3.3: logback issue

We've hit an issue when upgrading from spring-boot 1.3.2 to the recently released 1.3.3.
Our application has been making use of the following dependencies, each the latest, without issue:
<neo4j.version>2.3.2</neo4j.version>
<sdn.version>4.0.0.RELEASE</sdn.version>
<sdn.rest.version>3.4.0.RELEASE</sdn.rest.version>
<neo4j.ogm.version>1.1.5</neo4j.ogm.version>
Today I upgraded our spring-boot and Spring Data Neo4j -based application, which starts and works well with spring-boot 1.3.2.RELEASE, by changing the pom.xml from:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.2.RELEASE</version>
</parent>
to
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
With this being literally the only change, the application now fails to start with the following error:
...
Failed to instantiate [ch.qos.logback.classic.LoggerContext]
Reported exception:
java.lang.AbstractMethodError: ch.qos.logback.classic.pattern.EnsureExceptionHandling.process(Lch/qos/logback/core/pattern/Converter;)V
at ch.qos.logback.core.pattern.PatternLayoutBase.start(PatternLayoutBase.java:88)
at ch.qos.logback.classic.encoder.PatternLayoutEncoder.start(PatternLayoutEncoder.java:28)
at ch.qos.logback.core.joran.action.NestedComplexPropertyIA.end(NestedComplexPropertyIA.java:167)
at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:317)
at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:196)
at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:182)
at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)
at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:149)
at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:135)
at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:99)
at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:49)
at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:77)
at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:152)
at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:85)
at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:143)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:122)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:378)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:328)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:349)
at com.mycompany.Application.<clinit>(Application.java:35)
As expected, returning to 1.3.2.RELEASE does not cause any issues.
Searching so far reveals no trail to follow. Comparing the mvn dependency:tree output between using spring-boot 1.3.2.RELEASE and 1.3.3.RELEASE, I can see that the transient dependencies of ch.qos.logback:logback-classic and ch.qos.logback:logback-access jars have changed from 1.1.3 for spring-boot 1.3.2.RELEASE to 1.1.5 for spring-boot 1.3.3.RELEASE, while ch.qos.logback:logback-core remains at 1.1.3 for both spring-boot flavors.
Does anyone have any idea of what the underlying issue is (I'm guessing the class failing to instantiate has been removed or relocated) and/or -- more importantly -- what I can do to resolve it?
Spring Boot is missing some dependency management for logback-core which is allowing different versions to creep in. I've opened an issue to address that.
In the meantime, you can avoid the problem by adding your own dependency management for it to your pom:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

Resources