5

次のEJBを書きました:

@Singleton
@LocalBean
@Startup
public class Starter {
    private static final Logger logger = Logger.getLogger("lab");

    @PostConstruct
    public void init() throws Exception {
        for (final Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
            final NetworkInterface iface = en.nextElement();
            if (iface.isUp()) {
                logger.info(iface);
            }
        }
    }
}

展開すると、次のようなログが記録されます。

name:lo (Software Loopback Interface 1)
name:net0 (WAN Miniport (SSTP))
name:net1 (WAN Miniport (L2TP))
name:net2 (WAN Miniport (PPTP))
name:ppp0 (WAN Miniport (PPPOE))
name:eth0 (WAN Miniport (IPv6))
name:eth1 (WAN Miniport (Network Monitor))
name:eth2 (WAN Miniport (IP))
name:net5 (Intel(R) Wireless WiFi Link 4965AGN)
name:eth7 (Intel(R) Wireless WiFi Link 4965AGN - VirtualBox Bridged Networking Driver Miniport)
name:eth8 (VirtualBox Host-Only Ethernet Adapter)
name:net20 (Intel(R) Wireless WiFi Link 4965AGN-Netmon Lightweight Filter Driver-0000)
name:eth10 (VirtualBox Host-Only Ethernet Adapter-Netmon Lightweight Filter Driver-0000)
name:eth11 (VirtualBox Host-Only Ethernet Adapter-QoS Packet Scheduler-0000)
name:eth12 (VirtualBox Host-Only Ethernet Adapter-WFP LightWeight Filter-0000)
name:eth13 (WAN Miniport (IPv6)-QoS Packet Scheduler-0000)
name:eth14 (WAN Miniport (IP)-QoS Packet Scheduler-0000)
name:eth15 (WAN Miniport (Network Monitor)-Netmon Lightweight Filter Driver-0000)
name:eth16 (WAN Miniport (Network Monitor)-QoS Packet Scheduler-0000)
name:net21 (Intel(R) Wireless WiFi Link 4965AGN-Native WiFi Filter Driver-0000)
name:eth20 (Intel(R) Wireless WiFi Link 4965AGN - VirtualBox Bridged Networking Driver Miniport-Netmon Lightweight Filter Driver-0000)
name:eth21 (Intel(R) Wireless WiFi Link 4965AGN - VirtualBox Bridged Networking Driver Miniport-QoS Packet Scheduler-0000)
name:eth22 (Intel(R) Wireless WiFi Link 4965AGN - VirtualBox Bridged Networking Driver Miniport-WFP LightWeight Filter-0000)

これは有効ではありません。J2SE ランタイムで実行されるこの同じループからの出力は、次のようになります。

name:lo (Software Loopback Interface 1)
name:net5 (Intel(R) Wireless WiFi Link 4965AGN)
name:eth8 (VirtualBox Host-Only Ethernet Adapter)

これはアプリケーション サーバーの問題ですか? JBoss EAP 6.1.0 GA (AS 7 上に構築) を使用しています。それぞれで接続を開かずに、実行中の NetworkInterfaces の有効なリストを取得する方法は? それ以外に、どれがマルチキャストをサポートしているか知りたいのですが、これも常にtrueです。


レポ

Idea のプロジェクトを使用して github にレポを作成し、 jboss純粋なjdk の両方を実行するためのとログをコンパイルしました。また、使用される構成ファイル動的にロードされるライブラリのリストも含まれています。

4

1 に答える 1

1

この違いは、「-Djava.net.preferIPv4Stack=true」コマンドライン オプションを使用した結果です。おそらく、このオプション セットで JBoss JVM を起動します。このオプションでスタンドアロン プログラムを開始すると、同じ結果が得られます。

なぜこれが正確に起こるのかについては、私はまだ探しています。これまでのところ、同じ物理デバイスに複数のインターフェイスがあり、IPv6 が有効になっているものと無効になっているものがあると、何かが混乱するという結論に達しました。この「何か」は、Windows、JVM、または NetworkInterface クラスである可能性があります。

このオプションと、IPv4 および IPv6 が JVM 内でどのように機能するかについての情報は、Oracle のNetworking IPv6 User Guideにあります。

Google 検索の「java.net.preferIPv4Stack isUp」は、インターフェースで IPv6 が無効になっている場合に ifUp() メソッドが正しく機能しない可能性があることを実際に示すOpenJDK バグ レポートにつながります。

于 2013-11-02T14:10:51.567 に答える