web-dev-qa-db-fra.com

Que signifie «javax.naming.NoInitialContextException»?

Comme le titre l'indique, que signifie "javax.naming.NoInitialContextException" en termes non techniques? Et quelles sont les suggestions générales pour y remédier?

EDIT (à partir de la console):

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  Java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.Java:645)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.Java:288)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.Java:325)
    at javax.naming.InitialContext.lookup(InitialContext.Java:392)
    at cepars.app.ConnectionHelper.getConnection(ConnectionHelper.Java:25)
    at cepars.app.ConnectionHelper.getConnection(ConnectionHelper.Java:10)
    at cepars.review.ReviewDAO.getJobList(ReviewDAO.Java:30)
    at cepars.review.Test.main(Test.Java:43)
Java.lang.NullPointerException
    at cepars.review.ReviewDAO.getJobList(ReviewDAO.Java:31)
    at cepars.review.Test.main(Test.Java:43)
cepars.app.DAOException
    at cepars.review.ReviewDAO.getJobList(ReviewDAO.Java:39)
    at cepars.review.Test.main(Test.Java:43)
18
jdbcnewbie.

Cela signifie essentiellement que l'application souhaite effectuer certaines "opérations de dénomination" (par exemple, les recherches JNDI ou LDAP) et qu'elle ne disposait pas d'informations suffisantes pour pouvoir créer une connexion au serveur d'annuaire. En tant que documents pour l'état d'exception,

Cette exception est levée lorsqu'aucune implémentation de contexte initiale ne peut être créée. La politique de sélection d'une implémentation de contexte initiale est décrite dans la documentation de la classe InitialContext.

Et si vous regardez consciencieusement les javadocs pour InitialContext , ils décrivent assez bien comment le contexte initial est construit et quelles sont vos options pour fournir l'adresse/les informations d'identification/etc.

Si vous essayez de créer le contexte et que vous êtes coincé ailleurs, veuillez poster en arrière expliquant ce que vous avez fait jusqu'à présent et où vous échouez.

13
Andrzej Doyle

Cela signifie qu'il n'y a pas de contexte initial :)

Mais sérieusement, JNDI (javax.naming) consiste à rechercher des objets ou des ressources à partir d'un répertoire ou d'un fournisseur. Pour rechercher quelque chose, vous avez besoin d'un endroit où chercher (c'est le InitialContext). NoInitialContextException signifie "Je veux trouver le numéro de téléphone de John Smith, mais je n'ai pas de répertoire à consulter".

Un InitialContext peut être créé de plusieurs façons. Cela peut être fait manuellement, par exemple en créant une connexion à un serveur LDAP. Il peut également être configuré par un serveur d'applications à l'intérieur duquel vous exécutez votre application. Dans ce cas, le conteneur (serveur d'applications) vous fournit déjà un "répertoire", à travers lequel vous pouvez rechercher tout ce que le serveur d'applications met à disposition. Ceci est souvent configurable et constitue un moyen courant de déplacer ce type de configuration de l'implémentation d'application vers le conteneur, où il peut être partagé entre toutes les applications du serveur.

MISE À JOUR: à partir de l'extrait de code que vous publiez, il semble que vous essayez d'exécuter du code autonome destiné à être exécuté sur un serveur d'applications. Dans ce cas, le code tente d'obtenir une connexion à une base de données à partir du "répertoire". Il s'agit de l'une des ressources souvent configurées dans le conteneur du serveur d'applications. Ainsi, plutôt que d'avoir à gérer la configuration et les connexions à la base de données dans votre code, vous pouvez le configurer dans votre serveur d'applications et demander simplement une connexion (à l'aide de JNDI) dans votre code.

30
pap

Il suffit de lire les documents :

Cette exception est levée lorsqu'aucune implémentation de contexte initiale ne peut être créée. La politique de sélection d'une implémentation de contexte initiale est décrite dans la documentation de la classe InitialContext.

Cette exception peut être levée lors de toute interaction avec InitialContext, pas seulement lors de la construction de InitialContext. Par exemple, l'implémentation du contexte initial peut récupérer le contexte paresseusement uniquement lorsque des méthodes réelles y sont appelées. L'application ne doit pas dépendre du moment où l'existence d'un contexte initial est déterminée.

Mais cela est expliqué beaucoup mieux dans la documentation pour InitialContext

6
Sean Patrick Floyd