This question already has an answer here:
- NoInitialContextException error 12 answers
As the title suggests, what does "javax.naming.NoInitialContextException" mean in non technical terms? And what are some general suggestions to fix it?
EDIT (From the 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)
It basically means that the application wants to perform some "naming operations" (e.g. JNDI or LDAP lookups), and it didn't have sufficient information available to be able to create a connection to the directory server. As the docs for the exception state,
And if you dutifully have a look at the javadocs for InitialContext, they describe quite well how the initial context is constructed, and what your options are for supplying the address/credentials/etc.
If you have a go at creating the context and get stuck somewhere else, please post back explaining what you've done so far and where you're running aground.
It means that there is no initial context :)
But seriously folks, JNDI (javax.naming) is all about looking up objects or resources from some directory or provider. To look something up, you need somewhere to look (this is the InitialContext). NoInitialContextException means "I want to find the telephone number for John Smith, but I have no phonebook to look in".
An InitialContext can be created in any number of ways. It can be done manually, for instance creating a connection to an LDAP server. It can also be set up by an application server inside which you run your application. In this case, the container (application server) already provides you with a "phonebook", through which you can look up anything the application server makes available. This is often configurable and a common way of moving this type of configuration from the application implementation to the container, where it can be shared across all applications in the server.
UPDATE: from the code snippet you post it looks like you are trying to run code stand-alone that is meant to be run in an application server. In this case, the code attempting to get a connection to a database from the "phonebook". This is one of the resources that is often configured in the application server container. So, rather than having to manage configuration and connections to the database in your code, you can configure it in your application server and simple ask for a connection (using JNDI) in your code.
In extremely non-technical terms, it may mean that you forgot to put "ejb:" or "jdbc:" or something at the very beginning of the URI you are trying to connect.
Just read the docs:
But this is explained much better in the docs for
InitialContext