JVM/Tomcat で実行されるアプリケーションがあり、それが実行されるすべてのマシンで IPv6 スタックが有効になっています。IPv4 のみをサポートする別のマシンにリクエストを送信しようとしていますが、JVM は常に IPv6 スタックを優先してこのリクエストを作成します (ApacheHttpClient
クラスを使用してリクエストを作成しています)。
プロパティについては知ってい-Djava.net.preferIPv4Stack=true
ますが、ここでは説明しませんが、JVM の起動時に渡すことができません。次のようにプログラムで(短期間)設定することさえできません。
System.setProperty("java.net.preferIPv4Stack", "true");
...これは、JVM/Tomcat インスタンスで実行されている他のスレッドに影響を与える可能性があるためです (この質問や他の質問から理解したように)。
問題は、この単一のリクエストを IPv4 スタックを通過させるにはどうすればよいか (IPv4 エンドポイントに接続するだけでなく、IPv4 インターフェースを実際に使用することを意味する) ということです。
curl は JVM をまったく使用しないため、 (exec またはlibcurlバインディングを介して) cURL を使用することを考えました。
他のアイデアはありますか?