2017-06-21 4 views
0

試作のためにCassandraをIgniteに入れようとしていますが、Igniteを起動するのが難しいです。Igniteは、設定例では起動しません "BeanのクラスCassandraHelperが見つかりません"

私がIgniteに行ったことは、default-config.xmlを変更して、connection-settings.xmlを追加し、Cassandra/Igniteの依存関係をlibsフォルダに追加することです。

この時点で、私はIgniteを起動できません。すべてのエラーは、connection-settings.xmlで参照されるクラスに関連しているようです。

私のデバッグ: 私は、接続-settings.xml内のパスは、彼らが期待されるが含まれていることを彼らがいたと述べ、およびファイルということを確認するためのIgniteのソースコードをダウンロードし、エラー

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

で開始機能)。

find。 -name CassandraHelper.javaは、その名前を持つ2つのそのようなファイルがのIgniteの源である私に言った:

./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が含まれています。奇妙なことに、私はorg.apache.ignite.cache.store.cassandra.common.CassandraHelperを指すようにconnection-settings.xmlを変更しましたが、確かに「クラスが見つかりません」から「そのようなメソッドが見つかりません」というエラーがgetContactPointsArray ''

Igniteが見つからなかった他のファイルもsrc/mainではなくsrc/testディレクトリの下にあることがわかったので、何らかの理由でIgniteが検索していますsrc/testの下で検索しなければならないときはsrc/mainの下にあります。これは手動で設定しなければならないようなものではないようで、私はIgniteにconnection-settings.xmlを介して他のディレクトリの下を見るように指示する方法がわからない。

私は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

、私は< 'プロパティ名=「contactPoints」の値を使用するcassandraRegularDataSourceを変更してある=「localhost」を/> 'を使用します。これで問題は解決しましたが、私はまだいくつかの面をデバッグしています。 – Oxirane

答えて

1

org.apache.ignite.tests.utils.CassandraHelperクラスはIgniteテストにのみ使用され、明らかにリリースパッケージには含まれていません。

独自のファクトリメソッドを作成するか、そのCassandraHelperからコピーすることができます。

最も簡単な方法は、Spring構成でセットアップそこにある:Mityaの提案といくつかの試行錯誤によって

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

ああ、ありがとう。私は、それらの例が私が思っていたより少しクッキーカッターであると思います。 資格情報フィールドが動作すれば、今すぐ起動する必要があります。ご協力ありがとうございました! – Oxirane

関連する問題