๋ฒ๊ทธ ์ค๋ช
2019/11/19 14:17:34.136 [rxnetty-nio-eventloop-5-1] WARN i.n.c.AbstractChannelHandlerContext -
An exception 'java.lang.NoClassDefFoundError: Could not initialize class com.microsoft.azure.cosmosdb.internal.directconnectivity.rntbd.RntbdClientChannelHandler' [enable DEBUG level for full stacktrace] was thrown by a user handler's exceptionCaught() method while handling the following exception:
java.lang.NoClassDefFoundError: Could not initialize class com.microsoft.azure.cosmosdb.internal.directconnectivity.rntbd.RntbdClientChannelHandler
at com.microsoft.azure.cosmosdb.internal.directconnectivity.rntbd.RntbdClientChannelPool.<init>(RntbdClientChannelPool.java:122)
at com.microsoft.azure.cosmosdb.internal.directconnectivity.rntbd.RntbdClientChannelPool.<init>(RntbdClientChannelPool.java:114)
at com.microsoft.azure.cosmosdb.internal.directconnectivity.rntbd.RntbdServiceEndpoint.<init>(RntbdServiceEndpoint.java:108)
at com.microsoft.azure.cosmosdb.internal.directconnectivity.rntbd.RntbdServiceEndpoint.<init>(RntbdServiceEndpoint.java:67)
at com.microsoft.azure.cosmosdb.internal.directconnectivity.rntbd.RntbdServiceEndpoint$Provider.lambda$get$1(RntbdServiceEndpoint.java:404)
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
at com.microsoft.azure.cosmosdb.internal.directconnectivity.rntbd.RntbdServiceEndpoint$Provider.get(RntbdServiceEndpoint.java:403)
at com.microsoft.azure.cosmosdb.internal.directconnectivity.RntbdTransportClient.invokeStoreAsync(RntbdTransportClient.java:147)
at com.microsoft.azure.cosmosdb.internal.directconnectivity.TransportClient.invokeResourceOperationAsync(TransportClient.java:35)
at com.microsoft.azure.cosmosdb.internal.directconnectivity.StoreReader.readFromStoreAsync(StoreReader.java:644)
at com.microsoft.azure.cosmosdb.internal.directconnectivity.StoreReader.readFromReplicas(StoreReader.java:233)
at com.microsoft.azure.cosmosdb.internal.directconnectivity.StoreReader.lambda$null$10(StoreReader.java:412)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
at rx.Observable.unsafeSubscribe(Observable.java:10327)
at rx.internal.operators.OnSubscribeRedo$2.call(OnSubscribeRedo.java:273)
at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.enqueue(TrampolineScheduler.java:73)
at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.schedule(TrampolineScheduler.java:52)
at rx.internal.operators.OnSubscribeRedo$5.request(OnSubscribeRedo.java:361)
at rx.Subscriber.setProducer(Subscriber.java:211)
at rx.internal.operators.OnSubscribeRedo.call(OnSubscribeRedo.java:353)
at rx.internal.operators.OnSubscribeRedo.call(OnSubscribeRedo.java:47)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.Observable.unsafeSubscribe(Observable.java:10327)
at rx.Completable$10.call(Completable.java:588)
at rx.Completable$10.call(Completable.java:567)
at rx.Completable.unsafeSubscribe(Completable.java:2035)
at rx.Completable.unsafeSubscribe(Completable.java:2083)
at rx.Completable.unsafeSubscribe(Completable.java:2067)
at rx.Completable$32.call(Completable.java:2253)
at rx.Completable$32.call(Completable.java:2250)
at rx.Observable.unsafeSubscribe(Observable.java:10327)
at rx.internal.operators.OnSubscribeDelaySubscriptionOther.call(OnSubscribeDelaySubscriptionOther.java:80)
at rx.internal.operators.OnSubscribeDelaySubscriptionOther.call(OnSubscribeDelaySubscriptionOther.java:31)
at rx.Observable.unsafeSubscribe(Observable.java:10327)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
at rx.Observable.unsafeSubscribe(Observable.java:10327)
at rx.internal.operators.OnSubscribeSwitchIfEmpty$ParentSubscriber.subscribe(OnSubscribeSwitchIfEmpty.java:101)
at rx.internal.operators.OnSubscribeSwitchIfEmpty.call(OnSubscribeSwitchIfEmpty.java:52)
at rx.internal.operators.OnSubscribeSwitchIfEmpty.call(OnSubscribeSwitchIfEmpty.java:31)
at rx.Observable.unsafeSubscribe(Observable.java:10327)
at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext(OperatorMerge.java:248)
at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext(OperatorMerge.java:148)
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(OnSubscribeMap.java:77)
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(OnSubscribeMap.java:77)
at rx.internal.producers.SingleProducer.request(SingleProducer.java:65)
at rx.Subscriber.setProducer(Subscriber.java:211)
at rx.internal.operators.OnSubscribeMap$MapSubscriber.setProducer(OnSubscribeMap.java:102)
at rx.internal.operators.OnSubscribeMap$MapSubscriber.setProducer(OnSubscribeMap.java:102)
at rx.internal.operators.SingleLiftObservableOperator$WrapSubscriberIntoSingle.onSuccess(SingleLiftObservableOperator.java:76)
at rx.internal.operators.SingleOnSubscribeMap$MapSubscriber.onSuccess(SingleOnSubscribeMap.java:74)
at rx.internal.operators.SingleOnSubscribeMap$MapSubscriber.onSuccess(SingleOnSubscribeMap.java:74)
at rx.internal.operators.SingleOnSubscribeMap$MapSubscriber.onSuccess(SingleOnSubscribeMap.java:74)
at rx.internal.util.ScalarSynchronousSingle$1.call(ScalarSynchronousSingle.java:36)
at rx.internal.util.ScalarSynchronousSingle$1.call(ScalarSynchronousSingle.java:32)
at rx.Single.subscribe(Single.java:1979)
at rx.Single$2$1.onSuccess(Single.java:687)
at rx.Single$2$1.onSuccess(Single.java:683)
at rx.internal.operators.SingleOnSubscribeMap$MapSubscriber.onSuccess(SingleOnSubscribeMap.java:74)
at rx.internal.util.ScalarSynchronousSingle$1.call(ScalarSynchronousSingle.java:36)
at rx.internal.util.ScalarSynchronousSingle$1.call(ScalarSynchronousSingle.java:32)
at rx.Single.subscribe(Single.java:1979)
at rx.Single$2$1.onSuccess(Single.java:687)
at rx.Single$2$1.onSuccess(Single.java:683)
at rx.internal.operators.SingleOnSubscribeMap$MapSubscriber.onSuccess(SingleOnSubscribeMap.java:74)
at rx.internal.util.ScalarSynchronousSingle$1.call(ScalarSynchronousSingle.java:36)
at rx.internal.util.ScalarSynchronousSingle$1.call(ScalarSynchronousSingle.java:32)
at rx.Single.subscribe(Single.java:1979)
at rx.Single$2$1.onSuccess(Single.java:687)
at rx.Single$2$1.onSuccess(Single.java:683)
at rx.internal.operators.SingleOnSubscribeMap$MapSubscriber.onSuccess(SingleOnSubscribeMap.java:74)
at rx.internal.operators.SingleOperatorOnErrorResumeNext$2.onSuccess(SingleOperatorOnErrorResumeNext.java:63)
at rx.internal.operators.SingleOnSubscribeMap$MapSubscriber.onSuccess(SingleOnSubscribeMap.java:74)
at rx.internal.operators.OnSubscribeSingle$1.onCompleted(OnSubscribeSingle.java:55)
at rx.internal.operators.NotificationLite.accept(NotificationLite.java:125)
at rx.internal.operators.CachedObservable$ReplayProducer.replay(CachedObservable.java:403)
at rx.internal.operators.CachedObservable$CacheState.dispatch(CachedObservable.java:220)
at rx.internal.operators.CachedObservable$CacheState.onCompleted(CachedObservable.java:211)
at rx.internal.operators.CachedObservable$CacheState$1.onCompleted(CachedObservable.java:179)
at rx.internal.producers.SingleProducer.request(SingleProducer.java:75)
at rx.Subscriber.setProducer(Subscriber.java:209)
at rx.internal.operators.SingleLiftObservableOperator$WrapSubscriberIntoSingle.onSuccess(SingleLiftObservableOperator.java:76)
at rx.internal.operators.SingleDoOnEvent$SingleDoOnEventSubscriber.onSuccess(SingleDoOnEvent.java:63)
at rx.internal.operators.SingleDoOnEvent$SingleDoOnEventSubscriber.onSuccess(SingleDoOnEvent.java:63)
at rx.internal.operators.SingleDoOnEvent$SingleDoOnEventSubscriber.onSuccess(SingleDoOnEvent.java:63)
at rx.internal.util.ScalarSynchronousSingle$1.call(ScalarSynchronousSingle.java:36)
at rx.internal.util.ScalarSynchronousSingle$1.call(ScalarSynchronousSingle.java:32)
at rx.Single.subscribe(Single.java:1979)
at rx.Single$2$1.onSuccess(Single.java:687)
at rx.Single$2$1.onSuccess(Single.java:683)
at rx.internal.operators.SingleOnSubscribeMap$MapSubscriber.onSuccess(SingleOnSubscribeMap.java:74)
at rx.internal.operators.SingleOnSubscribeMap$MapSubscriber.onSuccess(SingleOnSubscribeMap.java:74)
at rx.internal.operators.SingleOnSubscribeMap$MapSubscriber.onSuccess(SingleOnSubscribeMap.java:74)
at rx.internal.operators.SingleOnSubscribeMap$MapSubscriber.onSuccess(SingleOnSubscribeMap.java:74)
at rx.internal.operators.SingleOnSubscribeMap$MapSubscriber.onSuccess(SingleOnSubscribeMap.java:74)
at rx.internal.operators.OnSubscribeSingle$1.onCompleted(OnSubscribeSingle.java:55)
at rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:656)
at rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:568)
at rx.internal.operators.OperatorMerge$MergeSubscriber.onCompleted(OperatorMerge.java:281)
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onCompleted(OnSubscribeMap.java:97)
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onCompleted(OnSubscribeMap.java:97)
at rx.internal.operators.DeferredScalarSubscriber.complete(DeferredScalarSubscriber.java:102)
at rx.internal.operators.DeferredScalarSubscriber.onCompleted(DeferredScalarSubscriber.java:73)
at io.reactivex.netty.protocol.http.UnicastContentSubject$AutoReleaseByteBufOperator$1.onCompleted(UnicastContentSubject.java:260)
at rx.internal.operators.BufferUntilSubscriber.onCompleted(BufferUntilSubscriber.java:156)
at io.reactivex.netty.protocol.http.UnicastContentSubject.onCompleted(UnicastContentSubject.java:282)
at io.reactivex.netty.protocol.http.client.ClientRequestResponseConverter$ResponseState.sendOnComplete(ClientRequestResponseConverter.java:413)
at io.reactivex.netty.protocol.http.client.ClientRequestResponseConverter$ResponseState.access$500(ClientRequestResponseConverter.java:350)
at io.reactivex.netty.protocol.http.client.ClientRequestResponseConverter.channelRead(ClientRequestResponseConverter.java:168)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:438)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:326)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:300)
at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:253)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1478)
at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1227)
at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1274)
at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:503)
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:442)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:281)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:93)
at io.reactivex.netty.metrics.BytesInspector.channelRead(BytesInspector.java:59)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
at io.reactivex.netty.pipeline.InternalReadTimeoutHandler.channelRead(InternalReadTimeoutHandler.java:108)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1422)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:931)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:700)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:635)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:552)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:514)
at io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1050)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
์ฌํํ๋ ค๋ฉด
๋๋ ์ฌ์ฉํ๋ค
DAO์์ DIRECT๋ฅผ ์ฌ์ฉํ๊ณ Change Feed Processor์์ GATEWAY๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ. ๋ชจ๋ ๊ฒ์ด ๊ด์ฐฎ์ต๋๋ค. ๊ทธ๋ฌ๋ Change Feed Processor๋ฅผ DIRECT๋ก ์ ํํ๋ฉด. ๊ฒฝ๊ณ ์์ธ๊ฐ ๋ฐ์ํ๊ธฐ ์์ํฉ๋๋ค.
์์๋๋ ํ๋
๋ ๋ค DIRECT๋ฅผ ์ฌ์ฉํ ๋ ๊ฒฝ๊ณ ์์ธ๊ฐ ์์ต๋๋ค.
์ค์ ํ๋
์์ธ 'java.lang.NoClassDefFoundError : com.microsoft.azure.cosmosdb.internal.directconnectivity.rntbd.RntbdClientChannelHandler'ํด๋์ค๋ฅผ ์ด๊ธฐํ ํ ์ ์์ต๋๋ค.
ํ๊ฒฝ ์์ฝ
SDK ๋ฒ์ : 2.6.3
Java JDK ๋ฒ์ : 1.8.0_211
OS ๋ฒ์ : Linux, MacOSX
์ด๊ฒ์ ๊ดํ ์
๋ฐ์ดํธ๊ฐ ์์ต๋๊น? com.microsoft.azure:azure-cosmosdb-spring-boot-starter:jar:2.2.3
์์ ๋์ผํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ด ๋ฌธ์ ์ ์ค๋ณต : https://github.com/Azure/azure-sdk-for-java/issues/7091
์ด๊ฒ์ ์ถ๊ฐํด๋ณด์ญ์์ค.
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-cosmosdb-direct</artifactId>
<version>2.6.11</version>
</dependency>
@ xinlian12-์ด๋ฏธ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ ์ ์์ต๋๋ค. ๋ค์ ํ์ธํ๊ณ ๋ ์ด์ ๋ฌธ์ ๊ฐ๋์ง ์์ผ๋ฉด ๋ซ์ผ์ธ์.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ ๊ดํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
com.microsoft.azure:azure-cosmosdb-spring-boot-starter:jar:2.2.3
์์ ๋์ผํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.