Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/thrift/transport/TTransportException
It seems you're missing some 3rd party libraries (in this case, Thrift which I believe contains the TTransportException
class). Add all required libraries to your classpath too, and let's see if that helps.
Aarish Ramesh
Tech generalist. Problem solver. Algorithmic geek. Product Guy. Loves interesting discussions on technology Let's connect! https://www.twitter.com/aarishr https://www.linkedin.com/in/aarishramesh/ https://github.com/aarishramesh
Updated on June 04, 2022Comments
-
Aarish Ramesh almost 2 years
I am new to Cassandra and i am trying to create a column and super-column family with the below program in Eclipse:
import java.util.Arrays; import java.util.List; import me.prettyprint.cassandra.model.BasicColumnDefinition; import me.prettyprint.cassandra.model.BasicColumnFamilyDefinition; import me.prettyprint.cassandra.serializers.StringSerializer; import me.prettyprint.cassandra.service.ThriftCfDef; import me.prettyprint.hector.api.Cluster; import me.prettyprint.hector.api.ddl.ColumnFamilyDefinition; import me.prettyprint.hector.api.ddl.ColumnIndexType; import me.prettyprint.hector.api.ddl.ColumnType; import me.prettyprint.hector.api.ddl.ComparatorType; import me.prettyprint.hector.api.ddl.KeyspaceDefinition; import me.prettyprint.hector.api.exceptions.HectorException; import me.prettyprint.hector.api.factory.HFactory; public class HectorTutorial { private static final String TEST_KEYSPACE = "TestKeyspace"; private static final String TEST_CF= "TestColumnFamily"; private static final String TEST_SUPER= "TestSuperColumn"; private static StringSerializer stringSerializer = StringSerializer.get(); public static void main(String[] args) throws Exception { Cluster cluster = HFactory.getOrCreateCluster("TestCluster", "localhost:9160"); try { if ( cluster.describeKeyspace(TEST_KEYSPACE ) != null ) { cluster.dropKeyspace(TEST_KEYSPACE ); } BasicColumnDefinition columnDefinition = new BasicColumnDefinition(); columnDefinition.setName(stringSerializer.toByteBuffer("TestColumn")); columnDefinition.setIndexName("TestColumn_idx "); columnDefinition.setIndexType(ColumnIndexType.KEYS); columnDefinition.setValidationClass(ComparatorType.LONGTYPE.getClassName()); BasicColumnFamilyDefinition columnFamilyDefinition = new BasicColumnFamilyDefinition(); columnFamilyDefinition.setKeyspaceName(TEST_KEYSPACE ); columnFamilyDefinition.setName(TEST_CF); columnFamilyDefinition.addColumnDefinition(columnDefinition); BasicColumnFamilyDefinition superCfDefinition = new BasicColumnFamilyDefinition(); superCfDefinition.setKeyspaceName(TEST_KEYSPACE ); superCfDefinition.setName(TEST_SUPER); superCfDefinition.setColumnType(ColumnType.SUPER); ColumnFamilyDefinition cfDefStandard = new ThriftCfDef(columnFamilyDefinition); ColumnFamilyDefinition cfDefSuper = new ThriftCfDef(superCfDefinition); KeyspaceDefinition keyspaceDefinition = HFactory.createKeyspaceDefinition(TEST_KEYSPACE , "org.apache.cassandra.locator.SimpleStrategy", 1, Arrays.asList(cfDefStandard, cfDefSuper)); cluster.addKeyspace(keyspaceDefinition); /* Below Code show your Keyspace Schema */ List<KeyspaceDefinition> keyspaces = cluster.describeKeyspaces(); for (KeyspaceDefinition kd : keyspaces) { if ( kd.getName().equals(TEST_KEYSPACE ) ) { System.out.println("Name: " +kd.getName()); System.out.println("RF: " +kd.getReplicationFactor()); System.out.println("strategy class: " +kd.getStrategyClass()); List<ColumnFamilyDefinition> cfDefs = kd.getCfDefs(); for (ColumnFamilyDefinition def : cfDefs) { System.out.println(" CF Type: " +def.getColumnType()); System.out.println(" CF Name: " +def.getName()); System.out.println(" CF Metadata: " +def.getColumnMetadata()); } } } } catch (HectorException he) { he.printStackTrace(); } cluster.getConnectionManager().shutdown(); } }
When I try to execute the program I get the following exception:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/thrift/transport/TTransportException at me.prettyprint.cassandra.connection.factory.HThriftClientFactoryImpl.createClient(HThriftClientFactoryImpl.java:28) at me.prettyprint.cassandra.connection.ConcurrentHClientPool.createClient(ConcurrentHClientPool.java:147) at me.prettyprint.cassandra.connection.ConcurrentHClientPool.<init>(ConcurrentHClientPool.java:53) at me.prettyprint.cassandra.connection.RoundRobinBalancingPolicy.createConnection(RoundRobinBalancingPolicy.java:67) at me.prettyprint.cassandra.connection.HConnectionManager.<init>(HConnectionManager.java:67) at me.prettyprint.cassandra.service.AbstractCluster.<init>(AbstractCluster.java:67) at me.prettyprint.cassandra.service.ThriftCluster.<init>(ThriftCluster.java:21) at me.prettyprint.hector.api.factory.HFactory.createCluster(HFactory.java:197) at me.prettyprint.hector.api.factory.HFactory.getOrCreateCluster(HFactory.java:144) at me.prettyprint.hector.api.factory.HFactory.getOrCreateCluster(HFactory.java:133) at HectorTutorial.main(HectorTutorial.java:27) Caused by: java.lang.ClassNotFoundException: org.apache.thrift.transport.TTransportException at java.net.URLClassLoader$1.run(URLClassLoader.java:217) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
I have included all the Hector api jars in the classpath and I do not know what is causing this error. Can someone please explain the reason for the error?