I am trying to add Elasticsearch to my project. I have addded the necessary dependencies to my pom.xml file. When I run the server I am getting this error:

java.lang.IllegalStateException: Failed to introspect Class [net.kzn.shoppingbackend.config.HibernateConfig] from ClassLoader [ParallelWebappClassLoader 

Please help me solve this problem.

Also I tried to find elasticsearch.yml file in eclipse to configure node but there is no such file. where Can i find elasticsearch.yml file.

HibernateConfig.java

package net.kzn.shoppingbackend.config; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp2.BasicDataSource; import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.transport.client.PreBuiltTransportClient; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.data.elasticsearch.core.ElasticsearchOperations; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; import org.springframework.orm.hibernate5.HibernateTransactionManager; import org.springframework.orm.hibernate5.LocalSessionFactoryBuilder; import org.springframework.transaction.annotation.EnableTransactionManagement; @Configuration @EnableElasticsearchRepositories(basePackages = "net.kzn.shoppingbackend") @ComponentScan(basePackages = { "net.kzn.shoppingbackend" }) @EnableTransactionManagement public class HibernateConfig { // change the below based on the DBMS you choose private final static String DATABASE_URL = "jdbc:h2:tcp://localhost/~/onlineshopping"; private final static String DATABASE_DRIVER = "org.h2.Driver"; private final static String DATABASE_DIALECT = "org.hibernate.dialect.H2Dialect"; private final static String DATABASE_USERNAME = "sa"; private final static String DATABASE_PASSWORD = ""; @Value("${elasticsearch.home:/home/vidyesh/.m2/repository/org/elasticsearch/client/elasticsearch-rest-client/5.6.8}") private String elasticsearchHome; @Value("${elasticsearch.cluster.name:elasticsearch}") private String clusterName; // database bean will be available @Bean("dataSource") public DataSource getDataSource() { BasicDataSource dataSource = new BasicDataSource(); // providing the database connection information dataSource.setDriverClassName(DATABASE_DRIVER); dataSource.setUrl(DATABASE_URL); dataSource.setUsername(DATABASE_USERNAME); dataSource.setPassword(DATABASE_PASSWORD); return dataSource; } // sessionFactory bean will be available @Bean public SessionFactory getSessionFactory(DataSource dataSource) { LocalSessionFactoryBuilder builder = new LocalSessionFactoryBuilder(dataSource); builder.addProperties(getHibernateProperties()); builder.scanPackages("net.kzn.shoppingbackend"); return builder.buildSessionFactory(); } // All the hibernate properties will be returned in this method private Properties getHibernateProperties() { Properties properties = new Properties(); properties.put("hibernate.dialect", DATABASE_DIALECT); properties.put("hibernate.show_sql", "true"); properties.put("hibernate.format_sql", "true"); properties.put("hibernate.hbm2ddl.auto", "update"); return properties; } @Bean public Client client() { TransportClient client = null; try { final Settings elasticsearchSettings = Settings.builder() .put("client.transport.sniff", true) .put("path.home", elasticsearchHome) .put("cluster.name", clusterName).build(); client = new PreBuiltTransportClient(elasticsearchSettings); client.addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"), 9300)); } catch (UnknownHostException e) { e.printStackTrace(); } return client; } @Bean public ElasticsearchOperations elasticsearchTemplate() { return new ElasticsearchTemplate(client()); } // transactionManager bean @Bean public HibernateTransactionManager geTransactionManager(SessionFactory sessionFactory) { HibernateTransactionManager transactionManager = new HibernateTransactionManager(sessionFactory); return transactionManager; } } 

Loaders.java

package net.kzn.shoppingbackend.load; import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.elasticsearch.core.ElasticsearchOperations; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import net.kzn.shoppingbackend.dto.Product; import net.kzn.shoppingbackend.dto.Users; import net.kzn.shoppingbackend.repository.UsersRepository; @Component public class Loaders { @Autowired ElasticsearchOperations operations; @Autowired UsersRepository usersRepository; @PostConstruct @Transactional public void loadAll(){ operations.putMapping(Product.class); System.out.println("Loading Data"); usersRepository.save(getData()); System.out.printf("Loading Completed"); } private List<Users> getData() { List<Users> userses = new ArrayList<>(); userses.add(new Users("Ajay",123L, "Accounting", 12000L)); userses.add(new Users("Jaga",1234L, "Finance", 22000L)); userses.add(new Users("Thiru",1235L, "Accounting", 12000L)); return userses; } } 

This is my pom.xml file

POM.xml

<project xmlns="" xmlns:xsi="" xsi:schemaLocation=" "> <modelVersion>4.0.0</modelVersion> <groupId>net.kzn</groupId> <artifactId>shoppingbackend</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>shoppingbackend</name> <url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>5.1.1.RELEASE</spring.version> <hibernate.version>5.3.6.Final</hibernate.version> <jackson.version>2.9.6</jackson.version> </properties> <dependencies> <!-- JUNIT version 4.12 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <!-- H2 database --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.197</version> </dependency> <!-- Hibernate Dependency --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-search-elasticsearch</artifactId> <version>5.10.4.Final</version> </dependency> <!-- --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <!-- --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.11.1</version> </dependency> <!-- database connection pooling --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>2.4.0</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <!-- --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.6</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.6</version> </dependency> <!-- SLF4J logging --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.12.Final</version> </dependency> <!-- --> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>6.3.2</version> </dependency> <!-- --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <version>6.3.2</version> </dependency> <!-- --> <dependency> <groupId>org.elasticsearch.plugin</groupId> <artifactId>transport-netty4-client</artifactId> <version>6.3.2</version> </dependency> <!-- --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-elasticsearch</artifactId> <version>3.0.11.RELEASE</version> </dependency> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>4.2.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> 

Error

 ERROR Context initialization failed 19:56:48.391" o.s.web.context.ContextLoader java.lang.IllegalStateException: Failed to introspect Class[net.kzn.shoppingbackend.config.HibernateConfig]from ClassLoader[ParallelWebappClassLoader context: onlineshopping delegate:false----------> Parent Classloader:java.net.URLClassLoader @24d 46 ca6] at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:680) at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:577) at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:562) at org.springframework.util.ReflectionUtils.getUniqueDeclaredMethods(ReflectionUtils.java:620) at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryMethod(AbstractAutowireCapableBeanFactory.java:721) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:662) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:630) at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1491) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:507) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:477) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:99) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:691) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:528) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:400) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:291) 

Please tell me what am i doing wrong here? Problem is related to dependancies?

2

2 Answers

Caused by: java.lang.ClassNotFoundException: org.springframework.data.elasticsearch.core.ElasticsearchOperations

This error message means that the jar containing this class is not on the application classpath.

Add spring-data-elasticsearch jar to it, and your error should be gone.

if you are using maven, add the jar to the classpath this way :

<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-elasticsearch</artifactId> <version>3.2.5.RELEASE</version> </dependency> 

The version that you should use depends on the version of elastic search you are connecting to :

 +--------------+----------------------------+----------------+-------------+ | Spring Data | Spring Data Elasticsearch | Elasticsearch | Spring Boot | +--------------+----------------------------+----------------+-------------+ | 2021.1 | 4.3.x | 7.15.2 | 2.5.x | | 2021.0 | 4.2.x | 7.12.0 | 2.5.x | | 2020.0.0 | 4.1.x | 7.9.3 | 2.3.x | | Neumann | 4.0.x | 7.6.2 | 2.3.x | | Moore | 3.2.x | 6.8.4 | 2.2.x | | Lovelace | 3.1.x | 6.2.2 | 2.1.x | | Kay | 3.0.x | 5.5.0 | 2.0.x | | Ingalls | 2.1.x | 2.4.0 | 1.5.x | +--------------+----------------------------+----------------+-------------+ 

(source : )

6

You need to add spring-data-elasticsearch.jar file into your class path. The error is showing because of this small mistake.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy