2013-08-14 6 views
5

ho scritto seguente EJB:Ogni NetworkInterface enumerato all'interno JBoss sempre ISUP

@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); 
      } 
     } 
    } 
} 

Su distribuire questa registra come:

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) 

Il che non è valido. Uscita da questo stesso ciclo in esecuzione sul runtime di J2SE assomiglia:

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

questo è un problema di server di applicazione? Sto usando JBoss EAP 6.1.0 GA (che è basato su AS 7). Come ottenere un elenco valido di NetworkInterfaces in esecuzione senza aprire la connessione su ciascuno di essi? Oltre a questo, voglio sapere quale supporta il multicast, ma questo è sempre true.


Repo

ho creato repo at github con il progetto di Idea, compiled ear e tronchi per la corsa sia jboss e pure di JDK. Esso contiene anche used configuration file e list of dynamically loaded libraries.

+0

Stai utilizzando lo stesso JRE? Oppure JBoss usa per es. OpenJDK e la tua app standalone Oracle JRE? JBoss utilizza (facoltativamente) librerie native per ssl e network e file io, ma dubito che abbia qualcosa a che fare con il tuo problema. – greyfairer

+0

Sì, sia pure loop che ejb sono stati testati su questo stesso 'jdk1.7.0_21_i586' da Oracle – kbec

+0

SecurityManager può limitare il numero di interfacce di rete che è possibile vedere, ma non dovrebbe influire sullo stato di isUp ... provi a correre senza i moduli nativi? IIRC, si chiamano libapr-1.so e libapr-util-1.so. – greyfairer

risposta

1

La differenza è il risultato dell'utilizzo dell'opzione di comando "-Djava.net.preferIPv4Stack = true", probabilmente si avvia JVM JBoss con questa opzione impostata. Quando si avvia il programma standalone con questa opzione, si otterranno gli stessi risultati.

Per quanto riguarda il motivo per cui questo accade, sto ancora cercando. Finora sono arrivato alla conslusione qualcosa si confonde quando si hanno più interfacce sullo stesso dispositivo fisico, dove alcune hanno IPv6 abilitato e alcune lo hanno disabilitato. Questo "qualcosa" potrebbe essere la classe Windows, JVM o NetworkInterface.

Alcune informazioni sull'opzione e su come IPv4 e IPv6 funzionano all'interno della JVM nello Networking IPv6 User Guide da Oracle.

Ricerca Google "java.net.preferIPv4Stack isUp" porta a un OpenJDK bug report che in realtà afferma che il metodo ifUp() potrebbe non funzionare correttamente in alcuni casi in cui IPv6 è disabilitato sull'interfaccia.

+0

Sembra una soluzione. La controllerò presto. – kbec