Jeremy London
Jeremy London

Reputation: 43

Failed to Create Ignite Component when running Apache Ignite on command Line

When starting to learn ignite, I ended up using IntelliJ as an IDE and it has been working fine. However I need to move it over onto a supercomputer environment and need to be able to run it from the command line but am having trouble with my code being able to find the needed classes. I created my project using maven added the proper dependencies as mentioned in the getting started guide. Following that I had maven package the project and used the following command:

/usr/java/jdk1.8.0_91/bin/java -cp "${IGNITE_HOME}/modules/core/target/ignite-core-1.6.0.jar:${IGNITE_HOME}/modules/core/target/libs/cache-api-1.0.0.jar:${IGNITE_HOME}/modules/spring/target/ignite-spring-1.6.0.jar:target/my-app-1.0-SNAPSHOT.jar" com.mycompany.app.App

However it is failing to create an ignite component with the following error:

Exception in thread "main" class org.apache.ignite.IgniteException: Failed to create Ignite component (consider adding ignite-spring module to classpath) [component=SPRING, cls=org.apache.ignite.internal.util.spring.IgniteSpringHelperImpl]
    at org.apache.ignite.internal.util.IgniteUtils.convertException(IgniteUtils.java:906)
    at org.apache.ignite.Ignition.start(Ignition.java:350)
    at com.mycompany.app.App.main(App.java:24)
Caused by: class org.apache.ignite.IgniteCheckedException: Failed to create Ignite component (consider adding ignite-spring module to classpath) [component=SPRING, cls=org.apache.ignite.internal.util.spring.IgniteSpringHelperImpl]
    at org.apache.ignite.internal.IgniteComponentType.componentException(IgniteComponentType.java:313)
    at org.apache.ignite.internal.IgniteComponentType.create0(IgniteComponentType.java:289)
    at org.apache.ignite.internal.IgniteComponentType.create(IgniteComponentType.java:200)
    at org.apache.ignite.internal.IgnitionEx.loadConfigurations(IgnitionEx.java:637)
    at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:840)
    at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:749)
    at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:619)
    at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:589)
    at org.apache.ignite.Ignition.start(Ignition.java:347)
    ... 1 more
Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/BeansException
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at org.apache.ignite.internal.IgniteComponentType.create0(IgniteComponentType.java:275)
    ... 8 more
Caused by: java.lang.ClassNotFoundException: org.springframework.beans.BeansException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 11 more

Looking for other psimilar problems, I've seen that it is because of failure to include ignite-spring in the pom file. However I have included that. Here is my pom file:

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-app</name>
  <url>http://maven.apache.org</url>
  <build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.5.1</version>
      <configuration>
       <source>1.8</source>
       <target>1.8</target>
      </configuration>
    </plugin>
  </plugins>
  </build>
  <dependencies>
    <dependency>
      <groupId>org.apache.ignite</groupId>
      <artifactId>ignite-core</artifactId>
      <version>1.6.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.ignite</groupId>
      <artifactId>ignite-spring</artifactId>
      <version>1.6.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.ignite</groupId>
      <artifactId>ignite-indexing</artifactId>
      <version>1.6.0</version>
    </dependency>
  </dependencies>
</project>

Where am I going wrong? Has important into the IDE caused something to become inconsistent? Is my command for running the code incomplete or erroneous? Thanks for the help. If needed here are the first lines of my code where the error is occurring:

package com.mycompany.app;

import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.StringTokenizer;

public class App
{
    public static void main( String[] args ) {
        printClasspath();
        String data;
        try {
            data = readFile("tweet.txt");
            Ignite ignite = Ignition.start("/ignite-1.6.0/examples/config/example-ignite.xml");
            IgniteCache<Integer, String[]> cache = ignite.getOrCreateCache("myCacheName");
        ...
        }
     }
}

Upvotes: 4

Views: 9655

Answers (2)

y durga prasad
y durga prasad

Reputation: 1202

Because classes are not identified by our java class Refer the following commands

INSTALLATION ON UNIX

  1. Download https://ignite.apache.org/download.cgi site

  2. apache-ignite-fabric-1.5.0-b1-bin unzip this folder

    In this example my "apache-ignite-fabric-1.5.0-b1-bin " directory located in "/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin"

  3. HelloWorld program Example:

    //program starting#################################################################################################################################
    
    import org.apache.ignite.Ignite;
    import org.apache.ignite.IgniteException;
    import org.apache.ignite.Ignition;
    import org.apache.ignite.IgniteCache;
    //import org.apache.ignite.internal.util.spring;
    public class HelloWorld {
      public static void main(String[] args) throws IgniteException {
        try (Ignite ignite = Ignition.start("/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/examples/config/example-ignite.xml")) {
          // Put values in cache.
          IgniteCache<Integer, String> cache = ignite.getOrCreateCache("myCache");
          cache.put(1, "Hello");
          cache.put(2, "World");
          cache.put(3,"Durga Prasad");
          // Get values from cache
          // Broadcast 'Hello World' on all the nodes in the cluster.
          ignite.compute().broadcast(()->System.out.println(cache.get(1) + " " + cache.get(2) + " " +cache.get(3)));
        }
      }
    }
    
    
    //end program ###################################################################################################################### 
    
  4. This HelloWorld.java file is created in "[stp@ril-srv-sp4 apache-ignite-fabric-1.5.0-b1-bin]$ cd libs" location

    Before compiling this program we have to identify the all jar locations in "/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs" folder and inside the subfolders also.

    [stp@ril-srv-sp4 apache-ignite-fabric-1.5.0-b1-bin]$ cd libs
    javac -cp "/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-core-1.5.0-b1.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/cache-api-1.0.0.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-shmem-1.0.0.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-indexing/commons-codec-1.6.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-indexing/h2-1.3.175.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-indexing/ignite-indexing-1.5.0-b1.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-indexing/lucene-core-3.5.0.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/commons-logging-1.1.1.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-beans-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-expression-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/ignite-spring-1.5.0-b1.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-context-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-jdbc-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-aop-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-core-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-tx-4.1.0.RELEASE.jar" HelloWorld.java
    
  5. create a jar file using "HelloWorld.class"

    jar -cf HelloWorld.jar HelloWorld.class
    
  6. run this jar file along with class

    [stp@ril-srv-sp4 libs]$ java -cp "/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-core-1.5.0-b1.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/cache-api-1.0.0.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-shmem-1.0.0.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-indexing/commons-codec-1.6.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-indexing/h2-1.3.175.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-indexing/ignite-indexing-1.5.0-b1.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-indexing/lucene-core-3.5.0.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/commons-logging-1.1.1.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-beans-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-expression-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/ignite-spring-1.5.0-b1.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-context-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-jdbc-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-aop-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-core-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-tx-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/HelloWorld.jar" HelloWorld
    [14:14:26]    __________  ________________
    [14:14:26]   /  _/ ___/ |/ /  _/_  __/ __/
    [14:14:26]  _/ // (7 7    // /  / / / _/
    [14:14:26] /___/\___/_/|_/___/ /_/ /___/
    [14:14:26]
    [14:14:26] ver. 1.5.0-b1#20151202-sha1:062d440c
    [14:14:26] 2015 Copyright(C) Apache Software Foundation
    [14:14:26]
    [14:14:26] Ignite documentation: http://ignite.apache.org
    [14:14:26]
    [14:14:26] Quiet mode.
    [14:14:26]   ^-- Logging to file '/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/work/log/ignite-6790e4dd.0.log'
    [14:14:26]   ^-- To see **FULL** console log here add -DIGNITE_QUIET=false or "-v" to ignite.{sh|bat}
    [14:14:26]
    [14:14:26] OS: Linux 3.10.0-327.el7.x86_64 amd64
    [14:14:26] VM information: OpenJDK Runtime Environment 1.8.0_102-b14 Oracle Corporation OpenJDK 64-Bit Server VM 25.102-b14
    [14:14:26] Configured plugins:
    [14:14:26]   ^-- None
    [14:14:26]
    [14:14:26] Security status [authentication=off, tls/ssl=off]
    [14:14:28] Performance suggestions for grid  (fix if possible)
    [14:14:28] To disable, set -DIGNITE_PERFORMANCE_SUGGESTIONS_DISABLED=true
    [14:14:28]   ^-- Disable peer class loading (set 'peerClassLoadingEnabled' to false)
    [14:14:28]   ^-- Disable grid events (remove 'includeEventTypes' from configuration)
    [14:14:28]
    [14:14:28] To start Console Management & Monitoring run ignitevisorcmd.{sh|bat}
    [14:14:28]
    [14:14:28] Ignite node started OK (id=6790e4dd)
    [14:14:28] Topology snapshot [ver=2, servers=2, clients=0, CPUs=4, heap=14.0GB]
    Hello World Durga Prasad
    [14:14:29] Ignite node stopped OK [uptime=00:00:00:633]
    
  7. Open another terminal with example-ignite.xml file

    [stp@ril-srv-sp4 bin]$ ./ignite.sh "/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/examples/config/example-ignite.xml"
    OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
    [14:14:17]    __________  ________________
    [14:14:17]   /  _/ ___/ |/ /  _/_  __/ __/
    [14:14:17]  _/ // (7 7    // /  / / / _/
    [14:14:17] /___/\___/_/|_/___/ /_/ /___/
    [14:14:17]
    [14:14:17] ver. 1.5.0-b1#20151202-sha1:062d440c
    [14:14:17] 2015 Copyright(C) Apache Software Foundation
    [14:14:17]
    [14:14:17] Ignite documentation: http://ignite.apache.org
    [14:14:17]
    [14:14:17] Quiet mode.
    [14:14:17]   ^-- Logging to file '/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/work/log/ignite-825641bf.0.log'
    [14:14:17]   ^-- To see **FULL** console log here add -DIGNITE_QUIET=false or "-v" to ignite.{sh|bat}
    [14:14:17]
    [14:14:17] OS: Linux 3.10.0-327.el7.x86_64 amd64
    [14:14:17] VM information: OpenJDK Runtime Environment 1.8.0_102-b14 Oracle Corporation OpenJDK 64-Bit Server VM 25.102-b14
    [14:14:17] Configured plugins:
    [14:14:17]   ^-- None
    [14:14:17]
    [14:14:17] Security status [authentication=off, tls/ssl=off]
    [14:14:19] Performance suggestions for grid  (fix if possible)
    [14:14:19] To disable, set -DIGNITE_PERFORMANCE_SUGGESTIONS_DISABLED=true
    [14:14:19]   ^-- Disable peer class loading (set 'peerClassLoadingEnabled' to false)
    [14:14:19]   ^-- Disable grid events (remove 'includeEventTypes' from configuration)
    [14:14:19]
    [14:14:19] To start Console Management & Monitoring run ignitevisorcmd.{sh|bat}
    [14:14:19]
    [14:14:19] Ignite node started OK (id=825641bf)
    [14:14:19] Topology snapshot [ver=1, servers=1, clients=0, CPUs=4, heap=1.0GB]
    [14:14:28] New version is available at ignite.apache.org: 1.7.0
    [14:14:28] Topology snapshot [ver=2, servers=2, clients=0, CPUs=4, heap=14.0GB]
    Hello World Durga Prasad
    [14:14:29] Topology snapshot [ver=3, servers=1, clients=0, CPUs=4, heap=1.0GB]
    

Upvotes: 2

Valentin Kulichenko
Valentin Kulichenko

Reputation: 8390

I suggest to do the following:

  1. Pack all your application classes (without Ignite dependencies) into a JAR and put it into IGNITE_HOME/libs folder.
  2. Set MAIN_CLASS environment variable to your main class (com.mycompany.app.App).
  3. Run IGNITE_HOME/bin/ignite.sh script. It will properly form the classpath parameter for Java with all required Ignite dependencies and will run your application.

Upvotes: 3

Related Questions