1) As per this link
https://www.gridgain.com/sdk/pe/latest/javadoc/org/apache/ignite/IgniteSpringBean.html
I
used ContextRefreshedEvent to initialize atomic ignite sequence as a spring
bean. But when I do this the thread creating atomic sequence is getting
hunup.
Please check the thread dump as shown below.
public class SubscriptionAtomicSequence implements
ApplicationListener<ContextRefreshedEvent>{
private static final Logger *LOGGER *=
LoggerFactory.*getLogger*(SubscriptionAtomicSequence.class);
private IgniteAtomicSequence sequence;
@Autowired
private Ignite ignite;
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
this.sequence=ignite.atomicSequence("subscription",0,true);
}
public long getSubscriptionId()
{
return sequence.getAndIncrement();
}
"main@1" prio=5 tid=0x1 nid=NA waiting
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Unsafe.java:-1)
at
java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
at
java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)
at
org.apache.ignite.internal.util.IgniteUtils.await(IgniteUtils.java:7430)
at
org.apache.ignite.internal.processors.datastructures.DataStructuresProcessor.awaitInitialization(DataStructuresProcessor.java:1089)
at
org.apache.ignite.internal.processors.datastructures.DataStructuresProcessor.getAtomic(DataStructuresProcessor.java:496)
at
org.apache.ignite.internal.processors.datastructures.DataStructuresProcessor.sequence(DataStructuresProcessor.java:372)
at
org.apache.ignite.internal.IgniteKernal.atomicSequence(IgniteKernal.java:3537)
at
org.apache.ignite.internal.IgniteKernal.atomicSequence(IgniteKernal.java:3526)
at
org.apache.ignite.IgniteSpringBean.atomicSequence(IgniteSpringBean.java:485)
at
com.qualys.agms.robot.sequence.SubscriptionAtomicSequence.onApplicationEvent(SubscriptionAtomicSequence.java:27)
at
com.qualys.agms.robot.sequence.SubscriptionAtomicSequence.onApplicationEvent(SubscriptionAtomicSequence.java:16)
at
org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
at
org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
at
org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at
org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:399)
at
org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:353)
at
org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:887)
at
org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:161)
at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:552)
- locked <0x24ec> (a java.lang.Object)
at
org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
at
org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752)
at
org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:388)
at
org.springframework.boot.SpringApplication.run(SpringApplication.java:327)
at
org.springframework.boot.SpringApplication.run(SpringApplication.java:1246)
at
org.springframework.boot.SpringApplication.run(SpringApplication.java:1234)
at
com.qualys.agms.robot.boot.SpringBootStarter.main(SpringBootStarter.java:16)
2) Is there any better way to create the Ignite atomic sequence as a spring
bean. I did not like the idea of composing the IgniteAtomicSequence in
SubscriptionAtomicSequence class. But I had to do that because Ignite
instance is started after all other Spring beans have been initialized. I
cannot simply write following code, because when this bean is created
ignite is not fully initialized during this time and it throw exception.
@Bean
public IgniteAtomicSequence subscriptionSequence(){
return ignite.atomicSequence("subscription",0,true);
}