Search code examples
oraclehibernatewebspheredatasourcejndi

Webshpere datasource error:Unable to lookup JNDI name


I am developing an application with Hibernate and Websphere Application Server 8.0.

I have create a datasource in Websphere and it can connect with database successfully.

But from application I am getting following error:

SystemErr R Error creating Session: org.hibernate.service.jndi.JndiException: Unable to lookup JNDI name [java:comp/env/jdbc/OracleDS]

Following is the setup I have done:

  1. Websphere datasource setup:

Successfully connected with database

  1. hibernate.cfg.xml

hibernate.cfg.xml

  1. web.xml

    web.xml

When I try to get sessiofactory, it gives me error:

HibernateUtil.java:

try
    {
        Configuration configuration = new Configuration().configure();
        serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
        sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    }
    catch (HibernateException he)
    {
        System.err.println("Error creating Session: " + he);
        throw new ExceptionInInitializerError(he);
    }

Error:

java.lang.NullPointerException at com.ibm.ws.webcontainer.metadata.WebComponentMetaDataImpl.getJavaNameSpace(WebComponentMetaDataImpl.java:143) at com.ibm.ws.threadContext.JavaNameSpaceAccessorImpl.getJavaNameSpace(JavaNameSpaceAccessorImpl.java:79) at com.ibm.ws.naming.java.javaURLContextFactory.createURLContextRoot(javaURLContextFactory.java:137) at com.ibm.ws.naming.urlbase.UrlContextFactory.getObjectInstance(UrlContextFactory.java:101) at org.apache.aries.jndi.URLContextProvider.getContext(URLContextProvider.java:43) at org.apache.aries.jndi.DelegateContext.getURLContext(DelegateContext.java:252) at org.apache.aries.jndi.DelegateContext.findContext(DelegateContext.java:214) at org.apache.aries.jndi.DelegateContext.findContext(DelegateContext.java:207) at org.apache.aries.jndi.DelegateContext.lookup(DelegateContext.java:157) at javax.naming.InitialContext.lookup(InitialContext.java:432) at org.hibernate.service.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:65) at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.configure(DatasourceConnectionProviderImpl.java:116) at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:223) at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:89) at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1818) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1776) at com.test.util.HibernateUtil.(HibernateUtil.java:25)

Error creating Session: org.hibernate.service.jndi.JndiException: Unable to lookup JNDI name [java:comp/env/jdbc/OracleDS]

Please let me know what I am missing.

I have applied more tries, now I am getting following error:

FFDC Exception:javax.naming.NamingException SourceId:com.ibm.ws.naming.java.javaURLContextFactory.createURLContextRoot ProbeId:142 Reporter:java.lang.Class@dfac0b43 javax.naming.NamingException: NMSV0308W: javaURLContextFactory cannot create a javaURLContext object because there is no java URL name space currently accessible from the executing thread. at com.ibm.ws.naming.java.javaURLContextFactory.createURLContextRoot(javaURLContextFactory.java:170) at com.ibm.ws.naming.urlbase.UrlContextFactory.getObjectInstance(UrlContextFactory.java:101) at org.apache.aries.jndi.URLContextProvider.getContext(URLContextProvider.java:43) at org.apache.aries.jndi.DelegateContext.getURLContext(DelegateContext.java:252) at org.apache.aries.jndi.DelegateContext.findContext(DelegateContext.java:214) at org.apache.aries.jndi.DelegateContext.findContext(DelegateContext.java:207) at org.apache.aries.jndi.DelegateContext.lookup(DelegateContext.java:157) at javax.naming.InitialContext.lookup(InitialContext.java:432) at org.hibernate.service.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:65) at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.configure(DatasourceConnectionProviderImpl.java:116) at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:223) at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:89) at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1818) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1776) at com.test.util.HibernateUtil.(HibernateUtil.java:25)


Solution

  • Did you create binding between you reference and JNDI name?

    You can do it

    • either using admin console - Enterprise Application > ApplicationName > Resource references. then select reference and map it to the datasource JNDI name
    • or using binding file - you need to create ibm-web-bnd.xml file with the following contents:

    <resource-ref name="jdbc/OracleDS" binding-name="jdbc/OracleDS" />