2017-12-11 1 views
0

예외 1.7에서 업그레이드 한 후 예외가 발생입니다 : 의 Ignite 발견 SPI 구현 (TcpDiscoverySpi처럼 DiscoverySpiOrderSupport 주석과 SPI를 사용)의 Ignite 2.3

<bean id="igniteConfig" class="org.apache.ignite.configuration.IgniteConfiguration"> 
    <property name="cacheConfiguration"> 
     <util:list> 
      <bean class="org.apache.ignite.configuration.CacheConfiguration"> 
       <property name="name" value="rateLimitterBuckets" /> 
       <property name="cacheMode" value="REPLICATED" /> 
       <property name="rebalanceMode" value="SYNC" /> 
       <property name="expiryPolicyFactory"> 
        <bean class="javax.cache.configuration.FactoryBuilder.SingletonFactory"> 
         <constructor-arg> 
          <bean class="javax.cache.expiry.TouchedExpiryPolicy"> 
           <constructor-arg> 
            <bean class="javax.cache.expiry.Duration"> 
             <constructor-arg value="DAYS" /> 
             <constructor-arg value="1" /> 
            </bean> 
           </constructor-arg> 
          </bean> 
         </constructor-arg> 
        </bean> 
       </property> 
       <property name="eagerTtl" value="true" /> 
      </bean> 
     </util:list> 
    </property> 

    <property name="gridLogger"> 
     <bean class="org.apache.ignite.logger.log4j.Log4JLogger" /> 
    </property> 

    <property name="includeEventTypes"> 
     <list> 
      <util:constant static-field="org.apache.ignite.events.EventType.EVT_CLIENT_NODE_DISCONNECTED" /> 
      <util:constant static-field="org.apache.ignite.events.EventType.EVT_CLIENT_NODE_RECONNECTED" /> 
     </list> 
    </property> 

    <property name="metricsLogFrequency" value="3600000" /> 

    <property name="discoverySpi"> 
     <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi"> 
      <property name="ipFinder"> 
       <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder"> 
        <property name="addresses"> 
         <list> 
          <value>127.0.0.1:47500..47509</value> 
         </list> 
        </property> 
       </bean> 
      </property> 
     </bean> 
    </property> 
</bean> 

I를 노드 순서를 지원하지 않으며 캐시와 함께 사용할 수 없습니다 TcpDiscoverySpi을 사용하십시오. 소스 코드를 확인한 결과 @DiscoverySpiOrderSupport(true) 주석이 표시되었습니다.

하지만 여전히 예외가 있습니다. 그러므로 질문 : 그것을 고치는 방법?

UPD 1 : 스택 트레이스를 (내가 관련이 일부 제거 - 나는 점화에 따라 몇 콩이를, 그래서 때문에,이 예외를 만들 수 캔트) 추가

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ignite' defined in class path resource [farm-connection-ignite.xml]: Invocation of init method failed; nested exception is class org.apache.ignite.IgniteCheckedException: Discovery SPI implementation does not support node ordering and cannot be used with cache (use SPI with @DiscoverySpiOrderSupport annotation, like TcpDiscoverySpi) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:372) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351) 
    ... 76 more 
Caused by: class org.apache.ignite.IgniteCheckedException: Discovery SPI implementation does not support node ordering and cannot be used with cache (use SPI with @DiscoverySpiOrderSupport annotation, like TcpDiscoverySpi) 
    at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.initializeDefaultCacheConfiguration(IgnitionEx.java:2234) 
    at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.initializeConfiguration(IgnitionEx.java:2179) 
    at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start0(IgnitionEx.java:1678) 
    at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1652) 
    at org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1080) 
    at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:578) 
    at org.apache.ignite.IgniteSpring.start(IgniteSpring.java:66) 
    at org.apache.ignite.IgniteSpringBean.afterPropertiesSet(IgniteSpringBean.java:160) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) 
    ... 92 more 
+0

'TcpDiscoverySpi' 또는'DiscoverySpiOrderSupport' 클래스가 잘못된 버전의 Ignite에서로드 된 것 같습니다. 앱이 어떤 종류의 항아리로 인해 고통받지 않는지 확인하십시오. – Denis

+0

또한 예외의 전체 스택 추적을 제공하십시오 – Denis

+0

@Denis, 감사합니다. 질문을 스택 추적으로 업데이트했습니다. 또한 "jar hell"과 Maven의 의존성 계층 구조에서 볼 수있는 Ignite의 유일한 버전을 확인했고 war/WEB-INF/lib에 2.3.0이 추가되었습니다. 거기에 다른 버전이 보이지 않습니다. 'ignite-shmem-1.0.0'을 제외하고는 그것과 관련이 있다고 생각하지 않습니다. –

답변

0

이 잘 나타나는 그것은 지옥이 아니에요, 나는 classpath를 점검했습니다.

스프링이 프록시를 사용하여 빈을 래핑 할 때 Spring Context AOP 지옥입니다. 프록시에는 주석이 없습니다. 따라서 IgniteUtils.discoOrdered는 이러한 것을 보지 못합니다. 내 응용 프로그램 컨텍스트의 XML 설정에서 나는

<bean id="facadeMonitoringAdvisor" class="net.bull.javamelody.MonitoringSpringAdvisor"> 
    <property name="pointcut"> 
     <bean class="org.springframework.aop.support.JdkRegexpMethodPointcut"> 
      <property name="pattern" value=".*Impl.*" /> 
      <property name="excludedPattern" value=".*PerfSens.*" /> 
     </bean> 
    </property> 
</bean> 

지금 흥미로운 질문이 있습니다

  • 그것이 1.7.0에서 일을하는 이유. 프록시를 사용할 수있는 코드가 있어야합니다. 심지어 TcpDiscoverySpi 콩에 영향을 미치는 왜
  • 이 패턴은 분명히 내가 더 알아 경우 TcpDiscoverySpi

나는이 대답을 업데이 트됩니다 일치하지 않아야합니다.

+0

질문에서 제공 한 구성을 적용하여 문제를 재현 할 수 없습니다. 실패하거나 GitHub에 프로젝트를 게시하는 모든 세부 정보를 제공하십시오. 그렇지 않으면 사람들이 당신을 도울 수 없을 것입니다. – Denis

+0

나는 그것에 대해 연구 중이다 ... –