1

I'am trying to connect Cassandra 3.4 using Spring 4, but I'm unable to do. I tried connecting it without spring and it's working perfect but with Spring it has some issue which I'm unable to find out.

My CassandraConnectionManager.java

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.HostDistance;
import com.datastax.driver.core.PoolingOptions;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.SocketOptions;

public class CassandraConnectionManager {
    int concurrency = 50;
    int maxRequestsPerConnection = 128;
    int maxConnections = 10;
    int coreConnections = 5;
    int port = 7001;
    String hosts[];
    private Cluster cluster;
    private Session session;

    public CassandraConnectionManager(String hosts, String port, int maxConn, int coreConn) {
        this.maxConnections = maxConn;
        this.coreConnections = coreConn;
        this.port = Integer.parseInt(port);
        this.hosts = hosts.split(",");
        this.CassandraConnect();
    }

    public CassandraConnectionManager(String hosts) {
        this.maxConnections = concurrency / maxRequestsPerConnection + 1;
        this.hosts = hosts.split(",");
        this.CassandraConnect();
    }

    private void CassandraConnect() {
        PoolingOptions pools = new PoolingOptions();
        pools.setCoreConnectionsPerHost(HostDistance.LOCAL, coreConnections);
        pools.setMaxConnectionsPerHost(HostDistance.LOCAL, maxConnections);
        pools.setCoreConnectionsPerHost(HostDistance.REMOTE, coreConnections);
        pools.setMaxConnectionsPerHost(HostDistance.REMOTE, maxConnections);
        pools.setMaxRequestsPerConnection(HostDistance.LOCAL, concurrency);

        Cluster.Builder builder = new Cluster.Builder();
        builder.withPort(port);
        for (String host : hosts) {
            builder.addContactPoints(host);
        }
        builder.withPoolingOptions(pools);
        builder.withSocketOptions(new SocketOptions().setTcpNoDelay(true));
        this.cluster = builder.build();
        this.session = cluster.connect();
        System.out.println("Connected");
    }

    public Session getSession() {
        return this.session;
    }

    /** Close cluster. */

    public void close() {
        cluster.close();
    }
}

My CassandraDAO

import org.apache.log4j.Logger;

import com.datastax.driver.core.PreparedStatement;
import com.datastax.driver.core.Session;
import com.netcore.CassandraConnectionManager;

public class CassandraDAO {

    private CassandraConnectionManager casConnManager;
    private Session casSession;
    private PreparedStatement insertIntoP1events;

    final static Logger logger = Logger.getLogger(CassandraDAO.class);

    public CassandraDAO(CassandraConnectionManager casConnManager){
        this.casConnManager = casConnManager;
        this.casSession = casConnManager.getSession();
    }

    public void insert(Person book) {
        StringBuilder sb = new StringBuilder();
          sb.append("INSERT INTO ").append("login_event")
          .append("(id, age, name) ")
          .append("VALUES (").append(book.getId()).append(", '")
          .append(book.getAge()).append("', '")
          .append(book.getName()).append("');");

        String query = sb.toString();
        casSession.execute(query);
    }

}

Then I have a pojo with id,name age with its setter getters.

Below is my Test.java

public class TEST {
    private static ClassPathXmlApplicationContext ctx ;

    public static void main(String[] args) {
        Person p = new Person("S1", "Test", 24);
        ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        CassandraDAO casDAO = (CassandraDAO) ctx.getBean("casDao");
        casDAO.insert(p);

    }

}

My ApplicaitonContext.xml

    <?xml version='1.0'?>
    <?xml version='1.0'?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd " >



      <bean id="casandraManager" class ="com.test.CassandraConnectionManager" >
            <constructor-arg name="hosts" value="127.0.0.1" />
            <constructor-arg name="port" value="9042" />
            <constructor-arg name="maxConn" value="100" />
            <constructor-arg name="coreConn" value="5" />
            <constructor-arg name="ttlDays" value="7" />
        </bean>

        <bean id="casDao" class="com.test.CassandraDAO" >
            <constructor-arg index="0" ref="casandraManager" />
        </bean>

    </beans>

And finally my log

 Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.expression.spel.SpelParserConfiguration.<init>(Lorg/springframework/expression/spel/SpelCompilerMode;Ljava/lang/ClassLoader;)V
    at org.springframework.context.expression.StandardBeanExpressionResolver.<init>(StandardBeanExpressionResolver.java:98)
    at org.springframework.context.support.AbstractApplicationContext.prepareBeanFactory(AbstractApplicationContext.java:625)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:513)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.netcore.TEST.main(TEST.java:20)

Its working fine without Spring.

Test2.java

public class Test2 {
    public static void main(String[] args) {
        CassandraConnectionManager cm = new CassandraConnectionManager("localhost", "9042", 2, 2);
        CassandraDAO cd = new CassandraDAO(cm);


    }
}
Sergii Bishyr
  • 8,331
  • 6
  • 40
  • 69
Mart Loco
  • 9
  • 2
  • Are you connected to internet when compiling your application. seems the application is unable to find xsd schema definitions from `http://www.springframework.org/schema/data/cassandra/` – Rajith Pemabandu Apr 14 '17 at 05:46
  • 3
    Have you tried searching for the error message "Unable to locate Spring NamespaceHandler for XML schema namespace"? It seems that quite a few others on StackOverflow have encountered/asked this question before, e.g. http://stackoverflow.com/questions/1937767/spring-3-0-unable-to-locate-spring-namespacehandler-for-xml-schema-namespace – tep Apr 14 '17 at 05:48
  • Yes Rajith , I am connected to internet. – Mart Loco Apr 14 '17 at 05:53
  • Yes tylerparsons I tried still same issue, **Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/data/cassandra]** – Mart Loco Apr 14 '17 at 05:58

1 Answers1

1

Same code is working perfect with below drivers , there is some issue with driver.

Required JARs