2016-07-29 7 views
0

Ich arbeite mit Wildfly 9.x, mit Infinispan 7.2.3. Ich stelle mich dem Problem, ein jgroups change_view-Ereignis zu erzwingen, um einen anderen Koordinator in einer "Predestroy" -Phase zu wählen.Infinispan JGROUPS force Ändern Anzeigen

Dieser Code-Schnipsel Code:

Address localAddr=cacheManager.getAddress(); 
     Address coord=cacheManager.getMembers().get(0); 
     if(!localAddr.equals(coord)) { 
      logger.error("View can only be changed on coordinator"); 
      return; 
     } 
     if(cacheManager.getTransport().getMembers().size() == 1) { 
      logger.error("Coordinator cannot change as view only has a single member"); 
      return; 
     } 

     long newId= cacheManager.getTransport().getViewId() + 1; 
     List<Address> mbrs = cacheManager.getMembers(); 
     Address tmpCoord=mbrs.remove(0); 

gibt mir diese Fehlermeldung:

10:13:28,688 WARN [org.jboss.as.ee] (ServerService Thread Pool -- 95) WFLYEE0006: Failed to destroy component instance o[email protected]5d8d8b5c: javax.ejb.EJBException: java.lang.UnsupportedOperationException 
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:187) 
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:277) 
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(CMTTxInterceptor.java:349) 
    at org.jboss.as.ejb3.tx.LifecycleCMTTxInterceptor.processInvocation(LifecycleCMTTxInterceptor.java:66) 
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 
    at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) 
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 
    at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45) 
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 
    at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64) 
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 
    at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:356) 
    at org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(PrivilegedWithCombinerInterceptor.java:80) 
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 
    at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) 
    at org.jboss.as.ee.component.BasicComponentInstance.destroy(BasicComponentInstance.java:125) 
    at org.jboss.as.ejb3.component.singleton.SingletonComponent.destroySingletonInstance(SingletonComponent.java:185) 
    at org.jboss.as.ejb3.component.singleton.SingletonComponent.done(SingletonComponent.java:142) 
    at org.jboss.as.ejb3.component.EJBComponent.stop(EJBComponent.java:559) 
    at org.jboss.as.ee.component.ComponentStartService$2.run(ComponentStartService.java:78) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
    at org.jboss.threads.JBossThread.run(JBossThread.java:320) 
Caused by: java.lang.UnsupportedOperationException 
    at java.util.Collections$UnmodifiableList.remove(Collections.java:1317) 
    at com.klopotek.core.session.job.SessionsHooverScheduler.changeView(SessionsHooverScheduler.java:219) 
    at com.klopotek.core.session.job.SessionsHooverScheduler.stopJobs(SessionsHooverScheduler.java:192) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.jboss.as.ee.component.ManagedReferenceLifecycleMethodInterceptor.processInvocation(ManagedReferenceLifecycleMethodInterceptor.java:96) 
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 
    at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doLifecycleInterception(Jsr299BindingsInterceptor.java:114) 
    at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:98) 
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 
    at org.jboss.as.ee.component.ManagedReferenceReleaseInterceptor.processInvocation(ManagedReferenceReleaseInterceptor.java:56) 
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 
    at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50) 
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:275) 
    ... 24 more 

Gibt es eine Möglichkeit, den Satz einer neuen Ansicht zu zwingen mit Infinispan?

Antwort

1

Wenn Sie Zugriff auf den JGroups-Kanal erhalten, funktioniert [1] möglicherweise. IIRC kann der Kanal über cache.getAdvancedCache().getRpcManager().getChannel(), oder einem ähnlichen Anruf abgerufen werden ...

[1] https://github.com/belaban/JGroups/wiki/Changing-the-coordinator-of-a-cluster

+0

ja ich habe schon dein beispiel versucht aber durch infinispan konnte ich es nicht reproduzieren. Ich kann keine getChannel() in der RpcManager-Klasse finden ... können Sie genau die richtige Methode angeben? – Alex

+0

ich das gefunden ... http: //planet.jboss.org/post/how_to_hijack_a_jgroups_channel_inside_infinispan_jboss_and_get_away_with_it – Alex

+0

Es ist RpcManager.getTransport(), werfen diese auf eine JGroupsTransport, dann rufen getChannel() –

1

Ich bin nicht sicher, aber der Koordinator für Infinispan ändern könnte eine weitere Änderung verursachen und vielleicht eine andere Rebalancing, wenn Sie tun Sie dies. Auch dieses Verhalten kann sich mit der nächsten Version ändern.

Warum möchten Sie es tun? Wenn Sie den Knoten schließen, wird der Koordinator gemäß der Richtlinie geändert, und die Caches werden neu verteilt (für verteilte), um der Anzahl der Besitzer für einen Schlüssel zu entsprechen.