ちょっと一息「DynamicConfigService」

雑談

こんにちは。

お久しぶりです。

カジマツです。

最近は多忙を極め、全然更新できてませんでした!!!!

ので、久々の更新です。

 

最近Javaを使っていた際にProxy周りで、
激しい戦いをしましたので、その際の事を書きます。

DynamicConfigService

皆様、こんな言葉を耳にした事がありますでしょうか?

「DynamicConfigService」

なんと躍動感あふれるサービスなんでしょう!!!

思わず飛び跳ねたく成りますね。

こんな躍動感あふれるやつが、結構な曲者だったのです。

私はどれだけ長い間苦しめられたことか。。。

ネットで調べても出てこなかったので、
自分で軽くまとめて置こうと思います。

事の発端は、Proxy内部から外部への通信をしようした時

事件が起きたのは、JavaでProxy内部から外部への通信を
行おうとした時でした。

つい先日までは動いていたプログラムが急に動かなくなってしまったのです。

DynamicConfigServiceがどうちゃらこうちゃらとエラーを吐きながら・・・

 

ちなみに、Proxy環境内での出来事です。

なぜ急にエラーを吐くようになったのか、
結局詳細な原因はわかっていません。。。

Proxy側も特に変化はなかったはず。。

Proxy環境内から外側への通信を行っていたので、
Proxyの設定は入れていました。(zshユーザなので.zshrcに)

https_proxy=hogehoge:hogehoge@ip:port
http_proxy=$https_proxy

みたいな感じで。
(他にはGUIで「設定」から「ネットワーク」のProxyのとこにも)

私はUbuntuユーザなので、そこら中にProxyの設定はいれていたので、
不足は無いと思いこんでいました。

もしかしたら、何かをインストールしたり、設定を追加したものが
邪魔して動かなくなったのか?と考えました。

考えた原因その1 無線編

デスクトップでUbuntuを動かしているのですが、無線子機のアダプタ繋いで
無線LANのアクセスポイントにしようと思い、
無線系のパッケージをいろいろとインストールしていました。

その際に、通信系のパッケージを適当に入れた気がしたので、
それも影響しているのか?!と考えて、
一生懸命アンインスコしました。

再度、Javaのプログラムを動かしたのですが、やはり動きませんでした。。。

考えた原因その2 netbios編

ちょうどこの頃、sshで他のマシンに行く時に
なぜかhostnameを用いてアクセスできてたんですよね。

自分のウブントゥだけ、IPアドレスを使ってsshで入っていました。

いろいろ調べた結果、netbiosというのを有効にすると、
IPアドレスの代わりにhostnameを代わりに使う事ができるようになる
という事を知りました。

で、早速ウブントゥでnetbiosの設定をいれて、
hostnameを使ってsshなどで入れるようになって、
キャッキャウフフしてました。

もしかして、無いとは思うけど、これも影響しているのか?!
と思って、無効にしました。

再度、Javaのプログラムを動かすもむなしく、通信できず。。。
ココロがおれそうでした。。。

ちなみに、ウブントゥの場合ですが、
netbios有効にするには、

/etc/nsswitch.conf

を触ります。

中を見てみると、defaultで以下のような記載があると思います。

修正前
hosts: files mdns4_minimal [NOTFOUND=return] dns
修正後
hosts: files mdns4_minimal [NOTFOUND=return] dns wins

最後に、「wins」を付け加えるだけで、netbios有効にできます。
楽しいnetbios生活をどうぞ!!!!!

 

原因がわかった! その原因とは?!

で、いろいろ調べた結果、同じような事に陥ってる人がいました。

どうやらJavaを起動した際に有効になる「起動時オプション」というのを
予め設定しないといけなかったみたいです。

しかし、私は既に、以下のオプションを有効にしていました。

-Djava.net.uesSystemProxies

なので、Javaにおけるプロキシの設定も完璧だと思っていたのです。。。

上のオプションの詳細ははこちらのOracleのページに記載されておりました。
以下のように記載されておりました。

java.net.useSystemProxies (デフォルト: false)
最近のWindowsシステムやGnome 2.xシステムでは、このプロパティをtrueに設定し、システムのプロキシ設定を使用するようにjava.net stackに指示できます(これらのどちらのシステムでも、ユーザー・インタフェースからプロキシをグローバルに設定可能)。このプロパティは起動時に1回だけチェックされることに注意してください。
Oracle「ネットワークのプロパティ」引用
URL:https://docs.oracle.com/javase/jp/8/docs/api/java/net/doc-files/net-properties.html

 

しかし、現実はそう甘くなかった。。。

実は上記の他にも以下のProxyの設定項目もあったのです。。。
更に私は、TLSのバージョンの指定も追加しました。
(いろいろ試していて分かったのですが、TLSのオプションは自分の場合は不要でした)

-Dhttp.proxyHost
-Dhttp.proxyPort
-Dhttp.proxyUser
-Dhttp.proxyPassword
-Dhttps.proxyHost
-Dhttps.proxyPort
-Dhttps.proxyUser
-Dhttps.proxyPassword
-Dhttps.protocols=TLS1.2(このオプションは無くてもOKでした!)

これらの設定を入れた後に実行すると、、、、、、、、

 

うまく通信できるではないですか!!!!
しかし、なぜつい最近まで上記のオプション無しに通信できていたのかが謎。。。

とりあえず無事に解決しました。

ちなみにuseSystemProxiesのオプションを無効にして、https.Proxyの方のオプションのみで
現在は動いているのを確認してます。

もしかしたら環境によっては、useSystemProxiesのオプションはうまく動かないのかなぁとも
思ったり。。。

 

とりあえず無事に解決したので、今回は良しとしました。

まぁ、なかなかjavaでproxyには、引っかからないとは思いますが
頭の隅っこに入れて置くと役にたつかもしれませんね!

雑談
interop 2019 に行って来ました!!

こんにちは、木尾木公です。 AWS summitの事については既に書いていますが、 同日に、隣の会場 …

雑談
【Amazon】インフラエンジニアの商品紹介

どーも 梶松です。 最近はAWSの資格を取得しようと毎日勉強しています。 そんなことでよくAmazo …

雑談
[Android]手始めにadb編

こんにちは。梶松です。 今回はAndroidに挑戦してみようと思います。 Androidの入門として …