Afin de permettre aux applications Java d’avoir un contrôle plus fin sur l’adressage Internet, la communauté OpenJDK prévoit de développer une interface de fournisseur de services (SPI) pour la résolution des noms et adresses d’hôtes. Une proposition d’amélioration du JDK (JEP) en cours d’examen s’attelle au développement d’une telle SPI. Ainsi java.net.InetAddress pourra utiliser des résolveurs autres que celui intégré de la plate-forme d'exploitation. Pour motiver cette offre, les contributeurs ont déclaré que l’API résout les noms d'hôtes en adresses IP et vice versa. L'API utilise actuellement le résolveur natif de l’OS, qui est généralement configuré pour utiliser une combinaison d'un fichier d'hôtes locaux et du DNS.

Les raisons d’une SPI

Pourquoi une SPI ? les spécialistes mettent en avant la personnalisation. En effet, une SPI pour le résolveur accordera aux frameworks et aux applications d’avoir un contrôle plus fin sur les résultats de la résolution. Par ailleurs, elle permettrait aux bibliothèques existantes d’être équipées ultérieurement d’un résolveur personnalisé. Ils évoquent également le projet Loom qui explore les caractéristiques de la VM Java et les API qui en découlent. Le problème est qu’une opération de résolution de sein l’API InetAddress bloque un actuellement appel à l’OS.

Un autre résolveur devrait activer le protocole client DNS directement sans blocage. Enfin, pour les protocoles réseaux émergents, un résolveur SPI intégrerait de manière transparente de nouveaux protocoles tels que DNS sur Quick UDP Internet Connections (QUIC), Transport Layer Security (TLS) ou HTTPS.

Un quitus d’Oracle

Oracle a déclaré que la proposition s'inscrivait dans le cadre d'un effort visant à offrir une programmation asynchrone en Java, car les consultations DNS existantes sont synchrones. L'implémentation actuelle de INetAddress repose sur l’OS dans un appel bloquant. L'objectif est de la rendre intégrable. La proposition ne vise pas une version spécifique de Java standard à partir du 9 septembre. Sans une SPI tel que celle qui est proposée, les applications devront continuer à utiliser des solutions de contournement. Une application peut utiliser l'interface Java Naming and Directory (JNDI) et son fournisseur DNS pour rechercher des adresses et des noms de réseau.

Bien que cette approche puisse être utile pour les apps qui nécessitent un contrôle précis des recherches DNS, elle est découplée d'InetAddress, de sorte que l'utilisation de l'API réseau de la plate-forme nécessite des efforts supplémentaires. Par ailleurs, une application peut utiliser les bibliothèques de résolveurs du système d'exploitation directement via l'interface Java Native Interface (JNI) ou l'API de fonction étrangère du projet Panama. Comme pour JNDI, cette approche est découplée d'InetAddress et peu pratique à utiliser.