2017-06-21 50 views
0

我试图将Cassandra放入Ignite中进行一些原型设计,并且遇到Ignite启动时遇到的一些困难。Ignite未启动示例配置,“找不到类CassandraHelper for bean”

到目前为止,我对Ignite所做的所有工作都是改变default-config.xml,添加一个connection-settings.xml并将Cassandra/Ignite的依赖关系添加到libs文件夹中。

此时,我无法启动Ignite。所有错误都与connection-settings.xml中引用的类有关。

我调试: 我开始与错误

org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.apache.ignite.tests.utils.CassandraHelper] for bean with name 'contactPoints' defined... 

我下载点燃的源代码来检查哪里哪里的连接settings.xml中的路径表示,他们的文件,它们包含的预期功能)。

找到。 -name CassandraHelper.java告诉我有两个这样的文件,用点燃的来源,名称:

./modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/common/CassandraHelper.java 
./modules/cassandra/store/src/test/java/org/apache/ignite/tests/utils/CassandraHelper.java 

这两个只有后者实际上包含函数getContactPointsArray。出于好奇,我改变了connection-settings.xml指向org.apache.ignite.cache.store.cassandra.common.CassandraHelper,果然,错误从“无法找到类”改为“没有这样的方法”getContactPointsArray “”。

看着源代码,我发现Ignite未能找到的其他文件也位于src/test目录下的预期位置,而不是src/main,所以我怀疑 - 由于某种原因Ignite正在搜索在src/main下,它应该在src/test下进行搜索。这似乎不是我应该手动配置的东西,我不知道如何通过connection-settings.xml告诉Ignite来查看其他目录下的Ignite。

对Ignite和Cassandra来说,我什么都不是专家,所以如果我在设置事物时犯了一些奇怪的错误,我不会感到惊讶,但是到目前为止我无法弄清楚我可能会犯什么错误取得了。任何建议,将不胜感激。

我的文件:

默认-config.xml中(从https://apacheignite.readme.io/v1.6/docs/examples拍摄,我删除cache2)。

<?xml version="1.0" encoding="UTF-8"?> 

<!-- 
    Licensed to the Apache Software Foundation (ASF) under one or more 
    contributor license agreements. See the NOTICE file distributed with 
    this work for additional information regarding copyright ownership. 
    The ASF licenses this file to You under the Apache License, Version 2.0 
    (the "License"); you may not use this file except in compliance with 
    the License. You may obtain a copy of the License at 

     http://www.apache.org/licenses/LICENSE-2.0 

    Unless required by applicable law or agreed to in writing, software 
    distributed under the License is distributed on an "AS IS" BASIS, 
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    See the License for the specific language governing permissions and 
    limitations under the License. 
--> 

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd"> 

    <!-- Cassandra connection settings --> 
    <import resource="connection-settings.xml" /> 

    <!-- Persistence settings for 'cache1' --> 
    <bean id="cache1_persistence_settings" class="org.apache.ignite.cache.store.cassandra.utils.persistence.KeyValuePersistenceSettings"> 
     <constructor-arg type="org.springframework.core.io.Resource" value="classpath:org/apache/ignite/tests/persistence/blob/persistence-settings-1.xml" /> 
    </bean> 

    <!-- Ignite configuration --> 
    <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration"> 
     <property name="cacheConfiguration"> 
      <!-- Configuring persistence for "cache1" cache --> 
      <bean class="org.apache.ignite.configuration.CacheConfiguration"> 
       <property name="name" value="cache1"/> 
       <property name="readThrough" value="true"/> 
       <property name="writeThrough" value="true"/> 
       <property name="cacheStoreFactory"> 
       <bean class="org.apache.ignite.cache.store.cassandra.CassandraCacheStoreFactory"> 
        <property name="dataSourceBean" value="cassandraAdminDataSource"/> 
        <property name="persistenceSettingsBean" value="cache1_persistence_settings"/> 
       </bean> 
       </property> 
      </bean> 
     </property> 

     <!-- Explicitly configure TCP discovery SPI to provide list of initial nodes. --> 
     <property name="discoverySpi"> 
      <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi"> 
       <property name="ipFinder"> 
        <!-- 
         Ignite provides several options for automatic discovery that can be used 
         instead os static IP based discovery. For information on all options refer 
         to our documentation: http://apacheignite.readme.io/docs/cluster-config 
        --> 
        <!-- Uncomment static IP finder to enable static-based discovery of initial nodes. --> 
        <!--<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">--> 
        <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder"> 
         <property name="addresses"> 
          <list> 
           <!-- In distributed environment, replace with actual host IP address. --> 
           <value>127.0.0.1:47500..47509</value> 
          </list> 
         </property> 
        </bean> 
       </property> 
      </bean> 
     </property> 
    </bean> 
</beans> 

连接的settings.xml(来自同一网页采取AdminCredentials东西除去几个其他的StackOverflow线程提及在小原型阶段不需要这些)

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

    <bean id="loadBalancingPolicy" class="com.datastax.driver.core.policies.RoundRobinPolicy"/> 

    <bean id="contactPoints" class="org.apache.ignite.tests.utils.CassandraHelper" factory-method="getContactPointsArray"/> 

    <bean id="cassandraAdminDataSource" class="org.apache.ignite.cache.store.cassandra.utils.datasource.DataSource"> 
     <property name="credentials" ref="cassandraAdminCredentials"/> 
     <property name="contactPoints" ref="contactPoints"/> 
     <property name="readConsistency" value="ONE"/> 
     <property name="writeConsistency" value="ONE"/> 
     <property name="loadBalancingPolicy" ref="loadBalancingPolicy"/> 
    </bean> 
     <bean id="cassandraRegularDataSource" class="org.apache.ignite.cache.store.cassandra.datasource.DataSource"> 
     <property name="credentials" ref="cassandraRegularCredentials"/> 
     <property name="contactPoints" ref="contactPoints"/> 
     <property name="readConsistency" value="ONE"/> 
     <property name="writeConsistency" value="ONE"/> 
     <property name="loadBalancingPolicy" ref="loadBalancingPolicy"/> 
    </bean> 
</beans> 

的pom.xml为依赖关系

<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.myapp</groupId> 
    <artifactId>myapp</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>myapp</name> 
    <url>http://maven.apache.org</url> 
<dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.google.collections</groupId> 
     <artifactId>google-collections</artifactId> 
     <version>1.0</version> 
    </dependency> 

    <!-- Ignite --> 
    <dependency> 
     <groupId>org.apache.ignite</groupId> 
     <artifactId>ignite-core</artifactId> 
     <version>2.0.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.ignite</groupId> 
     <artifactId>ignite-spring</artifactId> 
     <version>2.0.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.ignite</groupId> 
     <artifactId>ignite-indexing</artifactId> 
     <version>2.0.0</version> 
    </dependency> 

    <!-- Cassandra --> 
    <dependency> 
     <groupId>org.apache.cassandra</groupId> 
     <artifactId>cassandra-all</artifactId> 
     <version>3.10</version> 
    </dependency> 
    <dependency> 
     <groupId>com.datastax.cassandra</groupId> 
     <artifactId>cassandra-driver-core</artifactId> 
     <version>3.2.0</version> 
    </dependency> 

    <!-- Ignite-Cassandra Bridge --> 
    <dependency> 
     <groupId>org.apache.ignite</groupId> 
     <artifactId>ignite-cassandra-store</artifactId> 
     <version>2.0.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.ignite</groupId> 
     <artifactId>ignite-cassandra-serializers</artifactId> 
     <version>2.0.0</version> 
    </dependency>  

    <!-- Discontinued? 1.8.0 is latest. 
      I think ignite-cassandra-store replaced this. --> 
    <!-- <dependency> 
     <groupId>org.apache.ignite</groupId> 
     <artifactId>ignite-cassandra</artifactId> 
     <version>1.8.0</version> 
    </dependency> --> 



    </dependencies> 
    <build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.3</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <transformers> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           <mainClass>com.myapp.myclass</mainClass> 
          </transformer> 
         </transformers> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

     <!-- Used to package all our dependancies. Ignite needs this. --> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <version>3.0.0</version> 
     <executions> 
      <execution> 
       <id>copy</id> 
       <phase>package</phase> 
       <goals> 
        <goal>copy-dependencies</goal> 
       </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

预先感谢您!

+0

通过米卡的建议和一些试验和错误,我已经改变cassandraRegularDataSource使用'<属性名=“contactPoints”值=“本地主机” />'而不是定义一个bean。这解决了这个问题,但我仍在调试其他方面。 – Oxirane

回答

1

org.apache.ignite.tests.utils.CassandraHelper该类仅用于Ignite测试,显然它不包含在发行包中。

为了让它工作,您可以编写自己的工厂方法或从CassandraHelper复制它。

最简单的方法是设置它在Spring配置:

<util:list id="contactPoints" value-type="java.lang.String"> 
    <value>127.0.0.1:9160</value> 
</util:list> 
+0

啊,谢谢。我猜这些例子比我想象的要少一些。 我想如果我可以得到证书字段的工作,它应该现在启动。感谢您的帮助! – Oxirane

相关问题