使用 Apache Cassandra,Kundera,Spring MVC 时出现错误 NoSuchMethodErr



我不断收到消息

 java.lang.NoSuchMethodError: org.apache.cassandra.thrift.TBinaryProtocol: method <init>(Lorg/apache/thrift/transport/TTransport;)V not found
 at com.impetus.client.cassandra.schemamanager.CassandraSchemaManager.initiateClient(CassandraSchemaManager.java:446)
at com.impetus.kundera.configure.schema.api.AbstractSchemaManager.exportSchema(AbstractSchemaManager.java:101)
at com.impetus.client.cassandra.schemamanager.CassandraSchemaManager.exportSchema(CassandraSchemaManager.java:138)
at com.impetus.kundera.configure.SchemaConfiguration.configure(SchemaConfiguration.java:172)
at com.impetus.kundera.configure.ClientMetadataBuilder.buildClientFactoryMetadata(ClientMetadataBuilder.java:45)
at com.impetus.kundera.persistence.EntityManagerFactoryImpl.configureClientFactories(EntityManagerFactoryImpl.java:352)
at com.impetus.kundera.persistence.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:116)
at com.impetus.kundera.KunderaPersistence.createEntityManagerFactory(KunderaPersistence.java:83)
at com.impetus.kundera.KunderaPersistence.createContainerEntityManagerFactory(KunderaPersistence.java:65)

每当我尝试运行我的Java Spring MVC 3.2项目时。我正在尝试使用Kundera从Spring WebApp连接到已安装在计算机上的Apache Cassandra 1.2.8。我在项目的pom.xml文件中包含了以下依赖项:

  1. 规模7-鳞片(1.3-1.1.X)
  2. Cassandra-all & Cassandra-clientutil (1.2.8)
  3. Kundera-Core & Kundera-Cassandra (2.6)

我的 Spring 项目使用无 XML 配置(Java Config)和 JPA,除了 kundera 的持久性之外.xml它在 {PROJECT}/src/main/resources/META-INF 下,以便在部署期间位于类路径的基础。我的坚持.xml看起来像:

    <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
        version="2.0">
        <persistence-unit name="cassandra_pu">
            <provider>com.impetus.kundera.KunderaPersistence</provider> 
            <class>org.tutiworks.orm.Role</class>
            <class>org.tutiworks.orm.User</class>   
            <properties>            
                <property name="kundera.nodes" value="localhost"/>
                <property name="kundera.port" value="9160"/>
                <property name="kundera.keyspace" value="afrikana"/>
                <property name="kundera.dialect" value="cassandra"/>
                <property name="kundera.ddl.auto.prepare" value="update"/>
                <property name="kundera.client.lookup.class" value="com.impetus.client.cassandra.pelops.PelopsClientFactory" />
                <property name="kundera.cache.provider.class" value="com.impetus.kundera.cache.ehcache.EhCacheProvider"/>
                <property name="kundera.cache.config.resource" value="/ehcache-cassandra.xml"/>                 
            </properties>       
        </persistence-unit>
    </persistence>

创建实体管理器的配置类如下所示:

            @Configuration
    public class SpringDataConfig extends WebMvcConfigurerAdapter{
        @Autowired
        private Environment env;
        @Value("${kundera.nodes}") private String node;
        @Value("${kundera.port}") private String port;
        @Value("${kundera.keyspace}") private String keyspace;
        @Value("${kundera.dialect}") private String dialect;
        @Value("${kundera.ddl.auto.prepare}") private String dbGenerator;
        @Value("${kundera.cache.provider.class}") private String cacheClass;
        @Value("${kundera.client.lookup.class}") private String lookupClass;
        @Value("${kundera.cache.config.resource}") private String configResource;
        @Value("${persistence.unit.name}") private String persistenceUnitName;
        @Bean
        public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
            LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
            em.setPersistenceUnitName(persistenceUnitName);
            return em;
        }
        @Bean
        public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
            return new PersistenceExceptionTranslationPostProcessor();
        }
    }

以下类演示如何使用持久性上下文。

        public abstract class GenericDAO< T extends Serializable > {
           private Class<T> clazz;
           @PersistenceContext
           EntityManager entityManager;
           protected void setClazz( Class<T> clazzToSet ){
              this.clazz = clazzToSet;
           }
           public T findOne( String id ){
              return this.entityManager.find( this.clazz, id );
           }
           @SuppressWarnings("unchecked")
           public List< T > findAll(){
              return this.entityManager.createQuery( "from " + this.clazz.getName() )
               .getResultList();
           }
           public void save( T entity ){
              this.entityManager.persist( entity );
           }
           public void update( T entity ){
              this.entityManager.merge( entity );
           }
           public void delete( T entity ){
              this.entityManager.remove( entity );
           }
           public void deleteById( String entityId ){
              T entity = this.findOne( entityId );
              this.delete( entity );
           }
        }
映射到

Apache Cassandra 安装中的列族的 ORM 示例如下所示。

      @XmlRootElement(name = "Role")
    @Entity(name="Role")
    @Table(name = "roles", schema = "afrikana@cassandra_pu")
    public class Role implements Serializable {
        private static final long serialVersionUID = 9127322651789683331L;
        @Id
        @Column(name="id")
        @XmlID
        private String id;
        @Column(name = "role_name")
        @XmlElement(name = "role_name")
        private String roleName;
        public String getRoleName() {
            return roleName;
        }
        public void setRoleName(String roleName) {
            this.roleName = roleName;
        }
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
    }

我的配置哪里会出错?我错过了什么?如何修复此错误?

昆德拉卡桑德拉库运行在 1.2.4 版本。理想情况下,1.2.8 或更高版本应始终向后兼容,但不幸的是,在这种情况下,它们不是!

相关内容

最新更新